Bảo mật 22/09/2026 6 phút

JWT mổ xẻ: header.payload.signature — vì sao nó được KÝ chứ không MÃ HOÁ

Rất nhiều người tưởng JWT giấu kín dữ liệu vì thấy chuỗi dài loằng ngoằng. Thực ra payload chỉ là Base64URL — ai chặn được cũng giải ra đọc. Bài này tự dựng JWT bằng python hmac, đo output thật: giải ngược header/payload, xác minh chữ ký HMAC-SHA256, đổi role thành admin bị bắt vì chữ ký sai, và tấn công alg=none bị từ chối.

Bảo mật 22/09/2026 6 phút

ChaCha20-Poly1305: mã hoá dòng + xác thực trong một bước, và sự thật về tốc độ

ChaCha20-Poly1305 hay được giới thiệu là 'nhanh hơn AES' — nhưng đo thật trên máy có tăng tốc AES phần cứng thì AES-GCM lại nhanh gấp đôi. Bài này dựng demo thật bằng python cryptography: mã hoá AEAD sinh tag 16 byte, lật 1 bit ciphertext bị bắt ngay (InvalidTag), đổi AAD cũng bị bắt, và đo tốc độ trung thực trên CPU có lệnh AES.

Bảo mật 22/09/2026 6 phút

mTLS: khi server cũng đòi client trình chứng chỉ — xác thực hai chiều tận tầng TLS

HTTPS thường chỉ có client xác minh server. mTLS lật thêm một nửa: server cũng bắt client trình chứng chỉ hợp lệ. Bài này tự dựng một CA nội bộ bằng openssl, ký cert cho server và client, rồi đo output thật ba tình huống: client hợp lệ bắt tay thành công, client không cert bị từ chối, và client giả cùng tên nhưng CA khác cũng bị chặn — vì danh tính đến từ chữ ký CA, không phải cái tên.

Bảo mật 22/09/2026 6 phút

Xoay khoá mà không mã hoá lại cả kho: bao khoá (envelope encryption) và key-id

Đổi khoá mã hoá thì phải giải mã rồi mã hoá lại hàng triệu bản ghi? Không. Bài này dựng demo thật bằng python: mô hình bao khoá KEK bọc DEK, mỗi bản ghi lưu kèm kek_id. Xoay khoá chỉ cần re-wrap DEK vài chục byte, dữ liệu giữ nguyên; dữ liệu cũ vẫn giải được; và chỉ thu hồi khoá cũ sau khi mọi bản ghi đã chuyển.