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

Hàm băm mật mã: dấu vân tay một chiều của dữ liệu — đo bằng openssl

Hàm băm biến dữ liệu bất kỳ thành một chuỗi cố định như dấu vân tay. Nhưng nhiều người nhầm nó là mã hóa. Bài mở đầu sê-ri mật mã đo thật bốn tính chất bằng openssl: cùng đầu vào cho cùng digest, đổi một ký tự thì digest khác hoàn toàn (chỉ 2/64 ký tự trùng), kích thước luôn cố định, và vì sao MD5 đã vỡ còn SHA-256 thì chưa.

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

Vì sao KHÔNG lưu mật khẩu bằng SHA trần: salt, hàm cố ý chậm — đo thật

SHA-256 rất tốt để kiểm toàn vẹn, nhưng dùng nó lưu mật khẩu là sai lầm nguy hiểm — vì nó quá nhanh. Bài này đo thật: SHA-256 chạy 2,3 triệu hash/giây (kẻ bẻ khóa mơ ước), còn PBKDF2 cố ý chậm chỉ 10/giây — chậm hơn 231.000 lần mà người đăng nhập không hề thấy. Cùng salt để rainbow table vô dụng.

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

AES và chế độ mã hóa: vì sao ECB lộ mẫu dữ liệu — thấy tận byte

AES mã hóa từng khối 16 byte; chế độ quyết định cách ghép các khối, và chọn sai thì mã hóa mà vẫn lộ thông tin. Bài này đo thật: cùng bốn khối giống hệt, ECB cho bốn khối mã GIỐNG HỆT (lộ mẫu — như ảnh chim cánh cụt kinh điển), còn CBC cho bốn khối khác nhau. Kèm vai trò của IV: cùng bản rõ, IV khác thì bản mã khác.

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

AES-GCM: mã hóa vừa giấu vừa chống sửa — và vì sao nonce không được lặp

CBC giấu được nội dung nhưng không biết bản mã có bị sửa. AES-GCM giải quyết: mã hóa và tạo tag xác thực trong một bước, sửa một byte là giải mã từ chối. Bài này đo thật bằng python cryptography: bản mã kèm tag, tamper cho InvalidTag, và cái bẫy chết người — lặp nonce làm lộ XOR hai bản rõ mà không cần khóa.

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

Chữ ký số: ký bằng khóa riêng, ai cũng xác thực bằng khóa công khai

Làm sao chứng minh một file/token/bản cập nhật đúng do bạn tạo và chưa bị sửa, mà ai cũng kiểm được nhưng không ai giả được? Chữ ký số: dùng cặp khóa NGƯỢC với mã hóa — ký bằng khóa riêng, xác thực bằng khóa công khai. Bài này đo thật bằng openssl: ký OK, sửa một ký tự thì verify thất bại, sai khóa công khai cũng thất bại — và khác HMAC ở chống chối bỏ.

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

TOTP: mã 6 số của xác thực hai lớp thực ra là gì — tự tính bằng python

Mã 6 số đổi mỗi 30 giây trên Google Authenticator không hề được server gửi tới điện thoại. Nó là HMAC-SHA1 của bí mật chung với thời gian, cắt lấy 6 chữ số. Bài cuối sê-ri mật mã tự tính TOTP từ đầu bằng python theo RFC 6238: cùng bí mật + cùng mốc thời gian cho cùng mã, mã không đổi trong cửa sổ 30s rồi đổi sang cửa sổ mới.