Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình

Các thuật toán Mã hóa phổ biến

Đối xứng (Symmetric) — Mã hóa dữ liệu lớn

Thuật toánKích thước khối/khóaĐặc điểmTrạng thái
AES (Rijndael)128-bit block, 128/192/256-bit keyTiêu chuẩn NIST (FIPS 197), AES-NI hardware, 10/12/14 vòng, SPNKhuyên dùng #1
ChaCha20-Poly1305Stream (256-bit key, 96-bit nonce)ARX, nhanh phần mềm, constant-time tự nhiên, RFC 8439, TLS 1.3Khuyên dùng #2 (nếu không AES-NI)
AES-GCM / ChaCha20-Poly1305AEAD (Authenticated Encryption)Mã hóa + xác thực cùng lúc, nonce duy nhất bắt buộcChế độ bắt buộc cho symmetric
Twofish128-bit block, 256-bit keyFeistel-like, MDS, pre-computed key-dependent S-box, không patentAn toàn, ít dùng hơn AES
Camellia128-bit block, 128/192/256-bit keyFeistel 18/24 vòng, tiêu chuẩn ISO/IEC 18033-3, Nhật/ẢoAn toàn, tùy chọn TLS
3DES (TDEA)64-bit block, 112/168-bit key3 lần DES, chậm, block nhỏ (birthday bound 2³²), deprecated NIST 2023Cấm dùng mới, chỉ legacy
Blowfish64-bit block, 32-448-bit keyKey schedule chậm, block nhỏ, successor là TwofishLegacy, không khuyên dùng

Bất đối xứng (Asymmetric) — Key Exchange, Chữ ký, KEM

Thuật toánLoạiKích thước khóaDùng choTrạng thái
RSAInteger Factorization2048/3072/4096-bitKEM (RSA-OAEP), Chữ ký (RSA-PSS), CertVẫn dùng rộng rãi, chậm, key lớn
ECC (ECDH/ECDSA/EdDSA)Elliptic Curve DLPP-256, P-384, Curve25519, Ed25519KEM (ECDH), Chữ ký (ECDSA/Ed25519), TLS 1.3Tiêu chuẩn hiện tại (nhỏ, nhanh)
X25519 / Ed25519Curve25519 (Montgomery/Edwards)256-bitECDH key exchange, EdDSA signatureKhuyên dùng #1 cho ECC
Kyber (ML-KEM)Module-LWE (Lattice)512/768/1024 (Kem)Post-Quantum KEM (NIST PQC Standard 2024)Chuẩn bị triển khai PQC
Dilithium (ML-DSA)Module-LWE/LWR256/384/512Post-Quantum Signature (NIST PQC 2024)Chuẩn bị triển khai PQC

Hybrid Encryption (Thực tế)

HPKE (RFC 9180) = KEM (X25519/Kyber) + KDF (HKDF-SHA256) + AEAD (AES-GCM/ChaCha20-Poly1305). Dùng trong TLS 1.3, MLS, Signal, age, rage.

Lựa chọn khuyến nghị (2024)

  1. Mã hóa dữ liệu (symmetric): AES-256-GCM (có AES-NI) hoặc ChaCha20-Poly1305 / XChaCha20-Poly1305.
  2. Key exchange: X25519 (classical) + Kyber-768 (PQC hybrid) — hybrid KEM.
  3. Chữ ký số: Ed25519 (classical) + Dilithium-3 (PQC hybrid).
  4. Password hashing: Argon2id > bcrypt > scrypt > PBKDF2-HMAC-SHA256.
  5. Thư viện: libsodium, Tink (Google), OpenSSL 3.0+, BoringSSL, AWS-LC, ring (Rust).

Không dùng: ECB, CBC không MAC, RSA-PKCS#1 v1.5, SHA-1/MD5 cho chữ ký, 3DES, RC4, DES, tự thiết kế crypto.