Hướng dẫn toàn diện này khám phá các khái niệm, thuật toán và giao thức mã hóa nâng cao được sử dụng trong các hệ thống truyền thông bảo mật hiện đại. Lý tưởng cho các developer và chuyên gia bảo mật.
Thuật Toán Mã Hóa Đối Xứng
AES (Advanced Encryption Standard)
Tiêu chuẩn vàng cho mã hóa đối xứng, được chính phủ Hoa Kỳ áp dụng vào năm 2001.
Tính Năng Chính
- Kích thước key: 128, 192, hoặc 256 bits
- Kích thước block: 128 bits
- Số vòng: 10, 12, hoặc 14 tùy thuộc vào kích thước key
- Hiệu năng: Được tối ưu hóa cao, có sẵn tăng tốc phần cứng
Các Mode Phổ Biến
- GCM (Galois/Counter Mode): Mã hóa xác thực, được khuyến nghị cho hầu hết các trường hợp
- CBC (Cipher Block Chaining): Mode truyền thống, yêu cầu MAC riêng
- CTR (Counter): Có thể song song hóa, được sử dụng trong một số giao thức
ChaCha20
Stream cipher hiện đại được thiết kế bởi Daniel J. Bernstein, ngày càng phổ biến như một giải pháp thay thế AES.
Ưu Điểm
- Nhanh hơn AES trên các thiết bị không có tăng tốc phần cứng
- Triển khai constant-time (chống lại timing attacks)
- Thiết kế đơn giản, dễ triển khai an toàn hơn
- Sử dụng với Poly1305 cho mã hóa xác thực
Mã Hóa Bất Đối Xứng
RSA (Rivest-Shamir-Adleman)
Được sử dụng rộng rãi cho trao đổi key và chữ ký số.
Các Cân Nhắc Về Key
- Kích thước key tối thiểu: 2048 bits (khuyến nghị 4096 bits cho bảo mật dài hạn)
- Hiệu năng: Tốn kém về mặt tính toán so với mã hóa đối xứng
- Padding schemes: Sử dụng OAEP cho mã hóa, PSS cho chữ ký
- Mối đe dọa lượng tử: Dễ bị tổn thương trước máy tính lượng tử (thuật toán Shor)
Elliptic Curve Cryptography (ECC)
Giải pháp thay thế hiệu quả hơn cho RSA với bảo mật tương đương ở kích thước key nhỏ hơn.
Các Đường Cong Phổ Biến
- Curve25519: Được thiết kế cho trao đổi key ECDH, được áp dụng rộng rãi
- Ed25519: Cho chữ ký số, được sử dụng trong SSH, GPG
- P-256 (secp256r1): Tiêu chuẩn NIST, được hỗ trợ rộng rãi
- P-384, P-521: Mức độ bảo mật cao hơn
Ưu Điểm So Với RSA
- ECC 256-bit ≈ bảo mật RSA 3072-bit
- Tính toán nhanh hơn
- Key và chữ ký nhỏ hơn
- Yêu cầu băng thông và lưu trữ thấp hơn
Giao Thức Trao Đổi Key
Diffie-Hellman (DH)
Cho phép hai bên thiết lập một bí mật chung qua kênh không an toàn.
Các Biến Thể
- Classic DH: Triển khai gốc
- ECDH: Phiên bản Elliptic Curve (hiệu quả hơn)
- X25519: ECDH hiện đại sử dụng Curve25519
Perfect Forward Secrecy (PFS)
Đảm bảo các thông tin liên lạc trong quá khứ vẫn an toàn ngay cả khi các key dài hạn bị xâm phạm.
Triển Khai
- Tạo các cặp key tạm thời cho mỗi phiên
- Hủy các session key sau khi sử dụng
- Được sử dụng trong TLS 1.3, Signal Protocol, v.v.
Hàm Hash
Họ SHA-2
- SHA-256: Đầu ra 256-bit, được sử dụng rộng rãi
- SHA-384, SHA-512: Mức độ bảo mật cao hơn
- Ứng dụng: Chữ ký số, xác thực chứng chỉ, hash mật khẩu (với kỹ thuật phù hợp)
SHA-3 (Keccak)
- Cấu trúc khác với SHA-2 (hàm sponge)
- Chống lại các cuộc tấn công mở rộng độ dài
- Phù hợp cho các ứng dụng yêu cầu biên độ bảo mật cao
BLAKE2/BLAKE3
- Nhanh hơn SHA-2 và SHA-3
- An toàn mật mã học
- BLAKE3: Có thể song song hóa cao, tuyệt vời cho dữ liệu lớn
Key Derivation Functions (KDFs)
PBKDF2 (Password-Based Key Derivation Function 2)
- Mục đích: Tạo các key mật mã từ mật khẩu
- Số lần lặp: Tối thiểu 100.000 (khuyến nghị của OWASP)
- Trường hợp sử dụng: Lưu trữ mật khẩu, tạo key
Argon2
Người chiến thắng của Password Hashing Competition (2015), được khuyến nghị cho các ứng dụng mới.
Các Biến Thể
- Argon2id: Hybrid (được khuyến nghị cho hầu hết các trường hợp)
- Argon2i: Được tối ưu hóa chống lại side-channel attacks
- Argon2d: Khả năng chống lại GPU attacks tối đa
scrypt
- Hàm memory-hard (chống lại hardware attacks)
- Được sử dụng bởi Litecoin, Tarsnap
- Cân bằng tốt giữa bảo mật và khả năng tương thích
Message Authentication Codes (MACs)
HMAC (Hash-based MAC)
- Kết hợp hàm hash với key bí mật
- Cung cấp xác thực và tính toàn vẹn
- Phổ biến: HMAC-SHA256, HMAC-SHA512
Poly1305
- Authenticator một lần
- Sử dụng với ChaCha20 cho mã hóa xác thực
- Nhanh và constant-time
Authenticated Encryption
Tại Sao Nó Quan Trọng
Chỉ mã hóa không đảm bảo tính toàn vẹn. Kẻ tấn công có thể sửa đổi ciphertext mà không bị phát hiện. Authenticated encryption giải quyết vấn đề này.
AEAD (Authenticated Encryption with Associated Data)
- AES-GCM: Được hỗ trợ rộng rãi nhất
- ChaCha20-Poly1305: Tốt hơn trên thiết bị di động
- AES-CCM: Được sử dụng trong một số giao thức không dây
Chữ Ký Số
RSA Signatures
- Padding: Sử dụng PSS (Probabilistic Signature Scheme)
- Hàm hash: SHA-256 hoặc cao hơn
- Kích thước key: Tối thiểu 2048 bits
ECDSA (Elliptic Curve Digital Signature Algorithm)
- Chữ ký nhỏ hơn RSA
- Yêu cầu tạo nonce cẩn thận (RNG yếu = key bị xâm phạm)
- Khuyến nghị biến thể xác định (RFC 6979)
Ed25519
- Xác định (không cần RNG)
- Tạo và xác minh chữ ký nhanh
- Chữ ký nhỏ (64 bytes)
- Chống lại side-channel attacks
Các Giao Thức Hiện Đại
Signal Protocol
Giao thức mã hóa end-to-end tiên tiến được sử dụng bởi Signal, WhatsApp, Facebook Messenger.
Tính Năng Chính
- Double Ratchet: Liên tục cập nhật key
- Perfect Forward Secrecy: Tin nhắn trong quá khứ vẫn an toàn
- Post-Compromise Security: Phục hồi sau khi key bị xâm phạm
- Asynchronous: Hoạt động ngay cả khi người nhận offline
TLS 1.3
Phiên bản mới nhất của giao thức Transport Layer Security.
Cải Tiến
- Loại bỏ các thuật toán và cipher suite yếu
- Luôn cung cấp forward secrecy
- Handshake nhanh hơn (1-RTT, tùy chọn 0-RTT)
- Server Hello được mã hóa
Noise Protocol Framework
Framework giao thức mật mã hiện đại để xây dựng các hệ thống truyền thông bảo mật.
Ứng Dụng
- WireGuard VPN
- Lightning Network
- I2P messaging
Post-Quantum Cryptography
Mối Đe Dọa
Máy tính lượng tử có thể phá vỡ RSA và ECC bằng thuật toán Shor. Các thuật toán đối xứng ít bị ảnh hưởng hơn nhưng yêu cầu key lớn hơn.
Các Ứng Viên Post-Quantum Của NIST
- Kyber: Key encapsulation dựa trên lattice
- Dilithium: Chữ ký số dựa trên lattice
- SPHINCS+: Chữ ký dựa trên hash
Chiến Lược Chuyển Đổi
- Phương pháp hybrid: Kết hợp thuật toán cổ điển và post-quantum
- Tăng kích thước key đối xứng lên 256 bits
- Theo dõi quá trình tiêu chuẩn hóa của NIST
- Lập kế hoạch cho tính linh hoạt của thuật toán
Best Practices Triển Khai
Đừng Tự Tạo Crypto Của Riêng Bạn
Sử dụng các thư viện đã được thiết lập và đánh giá ngang hàng:
- libsodium: Cấp cao, dễ sử dụng
- OpenSSL: Toàn diện, được hỗ trợ rộng rãi
- BoringSSL: Fork OpenSSL của Google
- Ring: Thư viện cryptography của Rust
Quản Lý Key
- Sử dụng hardware security modules (HSMs) cho các key quan trọng
- Triển khai chính sách luân chuyển key
- Không bao giờ hardcode key trong source code
- Sử dụng key derivation cho nhiều mục đích
- Xóa an toàn key khỏi bộ nhớ sau khi sử dụng
Tạo Số Ngẫu Nhiên An Toàn
- Sử dụng RNG an toàn mật mã (CSPRNG)
- Không bao giờ sử dụng hàm rand() tiêu chuẩn
- RNG của hệ điều hành: /dev/urandom (Linux), CryptGenRandom (Windows)
- Theo ngôn ngữ cụ thể: crypto.randomBytes (Node.js), module secrets (Python)
Phòng Chống Timing Attack
- Sử dụng so sánh constant-time cho các bí mật
- Tránh phân nhánh dựa trên dữ liệu bí mật
- Lưu ý về cache timing attacks
- Sử dụng các thư viện được thiết kế với khả năng chống timing attack
Kiểm Tra Và Xác Thực
Kiểm Toán Bảo Mật
- Penetration testing thường xuyên
- Code review bởi các chuyên gia bảo mật
- Kiểm toán bảo mật bên thứ ba
- Chương trình bug bounty
Tuân Thủ
- FIPS 140-2/3: Tiêu chuẩn chính phủ Hoa Kỳ
- Common Criteria: Chứng nhận bảo mật quốc tế
- PCI DSS: Yêu cầu của ngành thẻ thanh toán
Tài Nguyên Để Học Thêm
Sách
- "Cryptography Engineering" của Ferguson, Schneier, và Kohno
- "Serious Cryptography" của Jean-Philippe Aumasson
- "Applied Cryptography" của Bruce Schneier
Tài Nguyên Trực Tuyến
- Cryptopals Crypto Challenges
- Khóa học Cryptography của Stanford (Coursera)
- IACR ePrint Archive
- Crypto Stack Exchange