Computer >> Hướng Dẫn Máy Tính >  >> Kết Nối Mạng >> An Ninh Mạng

Stream Cipher (Mã luồng) trong bảo mật mạng là gì?

Định nghĩa Stream Cipher (Mã luồng)

Stream Cipher (Mã luồng) là thuật toán mã hóa đối xứng (symmetric encryption) xử lý dữ liệu theo từng bit hoặc từng byte (8 bit) một cách liên tục, khác với Block Cipher (Mã khối) xử lý theo khối kích thước cố định (64-bit, 128-bit, 256-bit).

Nguyên lý cốt lõi: Tạo ra một keystream (dòng khóa) – chuỗi bit ngẫu nhiên giả (pseudorandom) có độ dài bằng plaintext – sau đó thực hiện phép XOR (phép OR độc quyền) giữa plaintext và keystream để tạo ciphertext:

Ciphertext = Plaintext XOR Keystream
Plaintext  = Ciphertext XOR Keystream  (giải mã dùng cùng keystream)

Đặc điểm chính

  • Tốc độ cao, độ trễ thấp: Phù hợp streaming real-time (voice, video, TLS records, SSH, QUIC).
  • Không cần padding: Xử lý dữ liệu độ dài bất kỳ.
  • Stateful: Trạng thái nội bộ (internal state) thay đổi sau mỗi bit/byte – phải đồng bộ chính xác giữa sender/receiver.
  • Không lan truyền lỗi (Error propagation): Lỗi 1 bit chỉ ảnh hưởng 1 bit ciphertext (khác block cipher: lỗi 1 bit làm hỏng cả block).
  • Yêu cầu Keystream không bao giờ tái sử dụng (Key Reuse = Catastrophic): Nếu dùng lại cùng (Key, IV) cho 2 plaintext khác nhau → kẻ tấn công XOR 2 ciphertext → loại bỏ keystream → khôi phục plaintext (Two-time pad attack).

Phân loại Stream Cipher

LoạiĐặc điểmVí dụ
Synchronous (Đồng bộ)Keystream tạo ra độc lập với plaintext/ciphertext. Sender & receiver phải đồng bộ trạng thái (counter/nonce). Nếu mất đồng bộ → giải mã sai toàn bộ phần còn lại. Cần cơ chế resynchronization.ChaCha20, Salsa20, RC4 (deprecated), AES-CTR, AES-GCM (AEAD), ZUC (4G/5G), SNOW 3G/4G/5G
Self-Synchronizing (Tự đồng bộ) / AsynchronousKeystream tạo ra dựa trên N bit ciphertext trước đó. Tự động khôi phục đồng bộ sau N bit nếu mất gói tin. Chậm hơn, ít dùng hơn.Ciphertext Feedback (CFB) mode của Block Cipher, MUGI (historical)

Stream Cipher nổi bật & Trạng thái

CipherTrạng tháiĐặc điểm / Ứng dụng
ChaCha20 / ChaCha20-Poly1305 (AEAD)TIÊU CHUẨN HIỆN TẠI (IETF RFC 8439)Thiết kế bởi Daniel J. Bernstein. Nhanh, an toàn, side-channel resistant (ARX: Add-Rotate-XOR). Dùng trong TLS 1.3, SSH, WireGuard, QUIC, IPsec, Age, NaCl/libsodium. Khuyên dùng thay RC4/AES-CTR khi không có AES-NI.
AES-CTR (Counter Mode)Tiêu chuẩn (NIST SP 800-38A)Biến AES block cipher thành stream cipher. Cần AES-NI (hardware acceleration) để nhanh. Dùng trong TLS 1.2, IPsec, SRTP, Kerberos. Không có authentication – phải kết hợp HMAC hoặc dùng AES-GCM/CCM (AEAD).
AES-GCM / AES-CCM (AEAD)Tiêu chuẩn (NIST SP 800-38D/38C)Authenticated Encryption with Associated Data. Cùng lúc mã hóa & xác thực (integrity). Dùng trong TLS 1.2/1.3, IPsec, SSH, Wi-Fi (WPA2/3 CCMP/GCMP), Kubernetes secrets. Tiêu chuẩn vàng hiện nay.
RC4 (Rivest Cipher 4)DEPRECATED / CẤM DÙNG (RFC 7465)Thiết kế 1987, dùng rộng rãi trong SSL/TLS, WEP, WPA-TKIP. Lỗ hổng bias trong keystream byte đầu (Fluhrer-Mantin-Shamir, Royal Holloway) → khôi phục plaintext. Loại bỏ hoàn toàn.
Salsa20 / XSalsa20Tiền thân ChaCha20Cùng tác giả DJB. XSalsa20 mở rộng nonce 192-bit. Ít dùng hơn ChaCha20.
ZUC / SNOW 3G/4G/5GTiêu chuẩn 3GPPDùng trong mã hóa 4G LTE (EEA2/EIA2), 5G (128-EEA3/128-EIA3). Phần cứng chuyên dụng.
Grain / Trivium / MickeyLightweight (ISO/IEC 29192)Dành cho RFID, sensor, IoT cực hạn tài nguyên (hardware gate count thấp).

Stream Cipher vs Block Cipher – So sánh

Tiêu chíStream CipherBlock Cipher (ECB/CBC/CTR/GCM)
Đơn vị xử lýBit / Byte (stream)Khối cố định (64/128/256 bit)
PaddingKhông cầnCần (trừ CTR/GCM/CFB/OFB)
Tốc độ phần mềm (không AES-NI)Nhanh hơn (ChaCha20 ~3-4x AES)Chậm (AES software implementation)
Tốc độ phần cứng (có AES-NI)NhanhRất nhanh (AES-NI 1-3 cycles/byte)
Lan truyền lỗi1 bit lỗi → 1 bit saiCBC: 1 block lỗi → 2 block sai; CTR/GCM: 1 bit
ParallelizationKhó (sequential state)CTR/GCM: Song song hoàn hảo
Nonce/IV reuse riskCực kỳ nguy hiểm (Key reuse = break)Cũng nguy hiểm (CTR/GCM), ECB: pattern leak
AuthenticationCần AEAD (Poly1305, GMAC) hoặc HMAC riêngGCM/CCM/OCB: Built-in AEAD

Ứng dụng thực tế trong Bảo mật mạng

  • TLS 1.3: Bắt buộc AEAD – ChaCha20-Poly1305 hoặc AES-GCM (cả hai là stream-based AEAD).
  • WireGuard VPN: ChaCha20-Poly1305 – hiệu năng cao, code đơn giản (4000 dòng).
  • QUIC / HTTP/3: TLS 1.3 기반 – ChaCha20-Poly1305 / AES-GCM.
  • SSH: chacha20-poly1305@openssh.com, aes256-gcm@openssh.com.
  • IPsec ESP: AES-GCM, ChaCha20-Poly1305 (RFC 7634).
  • Wi-Fi (WPA2/WPA3): CCMP (AES-CCM) / GCMP (AES-GCMP) – block cipher mode nhưng hoạt động như stream trên từng frame.
  • Disk Encryption: XTS mode (block) – không dùng stream cipher do cần random access.
  • Age (file encryption): ChaCha20-Poly1305.

Yêu cầu an toàn thiết kế Stream Cipher

  1. CSPRNG (Cryptographically Secure PRNG): Keystream phải không thể dự đoán được bit tiếp theo kể cả biết nhiều bit trước (next-bit test).
  2. Nonce/IV duy nhất (Unique Nonce): Mỗi (Key, Nonce) chỉ dùng 1 lần. Nonce có thể public nhưng không được lặp lại. Counter/IV quản lý cẩn thận.
  3. Key Space lớn: ≥ 128-bit (256-bit cho ChaCha20, AES-256).
  4. Kháng tấn công Time-Memory-Data Tradeoff.
  5. Side-channel resistance: Constant-time implementation (ChaCha20 ARX tự nhiên constant-time).
  6. Authenticated Encryption (AEAD): Luôn kết hợp authentication (Poly1305, GMAC) – không bao giờ dùng unauthenticated stream cipher riêng lẻ.

Kết luận

Stream Cipher là xương sống của mã hóa truyền thông hiện đại (TLS 1.3, WireGuard, QUIC, SSH). ChaCha20-Poly1305 và AES-GCM là hai tiêu chuẩn AEAD (Authenticated Encryption with Associated Data) thống trị – cung cấp cả Confidentiality và Integrity/Authentication trong một primitive duy nhất. RC4 đã chết. Khi triển khai: ưu tiên thư viện đã kiểm chứng (libsodium, OpenSSL, BoringSSL, Go crypto, Rust ring) – đừng tự viết crypto.