Lập trình 22/09/2026 6 phút

Băm mật khẩu: vì sao SHA-256 nhanh là SAI, và bcrypt chậm 1,3 triệu lần là cố ý

Dùng SHA-256 để băm mật khẩu nghe có vẻ an toàn — nó là hàm băm mạnh mà. Nhưng chính sự NHANH của nó khiến nó sai cho mật khẩu. Bài này đo thật trong Go: SHA-256 băm một mật khẩu trong 38 nano-giây (26 triệu lần/giây), còn bcrypt cost 10 mất 51ms — chậm hơn 1,3 triệu lần, cố ý, để brute-force bất khả thi; mỗi cost +1 chậm gấp đôi. Kèm vai trò của salt chống rainbow table.

Lập trình 22/09/2026 6 phút

Timing attack: so sánh token bằng == làm rò rỉ bí mật qua thời gian — và cách so constant-time

So sánh một token hay chữ ký bằng == trông vô hại, nhưng nó thoát sớm ở byte đầu tiên khác nhau — nên thời gian so sánh tiết lộ bạn đã đoán đúng bao nhiêu byte. Bài này đo thật trong Go: so sánh thoát sớm cho thời gian tuyến tính theo số byte khớp (từ 1.2ns khi khớp 0% lên 50.692ns khi khớp 100%), còn ConstantTimeCompare phẳng ~54.700ns bất kể khớp bao nhiêu. Về lý thuyết, kênh thời gian đó cho phép dò token từng byte.