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

Đường cong elliptic (EC): vì sao khóa 256-bit mạnh ngang RSA 3072 — đo thật

RSA khóa càng dài càng chậm và cồng kềnh. Đường cong elliptic đạt cùng mức an toàn với khóa nhỏ hơn nhiều nhờ dựa trên một bài toán khó khác. Bài này đo thật bằng openssl: khóa riêng EC P-256 chỉ 241 byte so với RSA 3072 là 2484 byte, và ECDSA ký nhanh hơn RSA tới ~90 lần — kèm đánh đổi RSA verify vẫn nhanh hơn.

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

Diffie-Hellman: tạo bí mật chung mà không hề gửi nó qua mạng — đo thật

RSA giải bài trao khóa bằng cách mã khóa AES rồi gửi. Diffie-Hellman làm điều còn ảo diệu hơn: hai bên tự tính ra CÙNG một khóa bí mật mà bí mật đó không bao giờ đi qua mạng. Bài này đo thật bằng openssl X25519 — Alice và Bob mỗi bên chỉ dùng khóa riêng của mình + khóa công khai của người kia, cho ra hai giá trị giống hệt nhau. Kèm forward secrecy và bẫy MITM.

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

Sinh số ngẫu nhiên an toàn: vì sao random() thường phá vỡ cả hệ mật mã

Mọi thứ trong mật mã — khóa, salt, IV, nonce, token — đều dựa vào ngẫu nhiên KHÔNG đoán được. Nhưng random() thường là tất định: cùng seed cho cùng dãy. Bài này đo thật bằng python: random.seed(42) ra y hệt hai lần, token sinh bằng seed=timestamp tái tạo được; còn secrets/os.urandom/openssl rand thì không đoán nổi. Dùng sai nguồn ngẫu nhiên là lỗ hổng nghiêm trọng.

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

Mã hóa file bằng mật khẩu: ghép AES, PBKDF2 và salt lại — đo thật bằng openssl

Người dùng nhớ mật khẩu, nhưng AES-256 cần khóa nhị phân 32 byte — khoảng cách đó do hàm dẫn khóa (KDF) lấp. Bài này mã hóa một file thật bằng openssl với AES-256-CBC + PBKDF2: xem header Salted__ tự chứa salt, giải mã đúng ra nội dung còn sai mật khẩu thì bad decrypt, và cùng file+mật khẩu hai lần cho bản mã khác nhau nhờ salt ngẫu nhiên.

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.