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

So sánh hằng thời gian: vì sao dùng == để so token là lỗ hổng đo được

So sánh chuỗi bí mật bằng == trông vô hại, nhưng nó thoát sớm ở byte sai đầu tiên — và thời gian chạy rò rỉ số byte đúng. Bài này đo THẬT bằng Go: hàm so thoát sớm tăng đều từ 1,2 ns (0 byte đúng) tới 8,6 ns (31 byte đúng), một timing oracle rõ rệt; còn ConstantTimeCompare phẳng lì ~9,2 ns bất kể khớp bao nhiêu.