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

Các chế độ vận hành (Modes of Operation) của Block Cipher

Block cipher gốc (ECB) mã hóa từng khối độc lập → không an toàn (lộ pattern). Chế độ vận hành thêm IV, chaining, feedback để đạt bảo mật IND-CPA/IND-CCA.

Bảng so sánh các chế độ chính

Chế độIV/NonceMã hóa song songGiải mã song songError PropagationXác thựcTrạng thái
ECBKhôngCóCóKhôngKhôngCẤM DÙNG (dữ liệu >1 khối)
CBCRandom IVKhôngCó1 block lỗi → 2 block plaintext saiKhông (cần HMAC riêng)Legacy, TLS 1.2, disk encryption (XTS tốt hơn)
CTRNonce + CounterCóCóKhông (bit error → bit error)Không (cần HMAC riêng)Tốt, biến block→stream, dùng trong GCM/CCM
OFBRandom IVKhôngKhôngKhôngKhôngÍt dùng, keystream độc lập plaintext
CFBRandom IVKhôngKhông1 block lỗi → 2 block plaintext saiKhôngLegacy, stream-like cho block cipher
GCMNonce (96-bit khuyên dùng)CóCóKhông (tag fail → reject all)Có (AEAD) — GHASHTiêu chuẩn #1 (TLS 1.2/1.3, IPsec)
CCMNonceKhôngKhôngKhông (tag fail)Có (AEAD) — CBC-MAC + CTRIoT, constrained (AES-CCM)
OCBNonceCóCóKhôngCó (AEAD) — 1 passAn toàn, ít triển khai do patent (hết hạn 2018)
XTSTweak (sector index)CóCóKhôngKhông (chỉ confidentiality)Tiêu chuẩn disk encryption (IEEE 1619, LUKS, BitLocker)

Chi tiết các chế độ quan trọng

CBC (Cipher Block Chaining)

Enc: C₀ = IV (random); Cᵢ = E(K, Pᵢ ⊕ Cᵢ₋₁)
Dec: Pᵢ = D(K, Cᵢ) ⊕ Cᵢ₋₁
  • IV phải ngẫu nhiên, không thể đoán trước (unpredictable) — không dùng counter.
  • Padding oracle attack (Vaudenay 2002) nếu dùng padding PKCS#7 và tiết lộ lỗi padding. Khắc phục: AEAD hoặc Encrypt-then-MAC.

CTR (Counter Mode)

Keystream block i = E(K, Nonce || Counter_i)
Cᵢ = Pᵢ ⊕ Keystream_i
  • Biến block cipher thành stream cipher.
  • Nonce không bao giờ lặp với cùng khóa (key, nonce pair duy nhất).
  • Song song hóa hoàn hảo, random access, pre-computation keystream.

GCM (Galois/Counter Mode) — AEAD tiêu chuẩn

  • Kết hợp CTR encryption + GHASH authentication (GF(2¹²⁸) polynomial hash).
  • Tag 128-bit (hoặc truncate 96/104/112/120/128).
  • Nonce 96-bit khuyên dùng (random hoặc counter). Nonce khác 96-bit → GHASH thêm bước hash nonce.
  • Rủi ro nghiêm trọng: Lặp (Key, Nonce) → keystream reuse + GHASH key leak → forge tag tùy ý. XChaCha20-Poly1305 an toàn hơn cho nonce random.
  • Hỗ trợ phần cứng (AES-NI + PCLMULQDQ).

XTS (XEX Tweakable Block Cipher with Ciphertext Stealing)

  • Dành cho disk encryption: sector-based, random access, không mở rộng ciphertext.
  • Tweak = sector index → cùng plaintext ở sector khác → ciphertext khác.
  • Không cung cấp xác thực (integrity) — cần layer riêng (dm-verity, fsverity).

Khuyến nghị lựa chọn (2024)

  1. Mạng / TLS / API / Messaging: AES-GCM (có AES-NI) hoặc ChaCha20-Poly1305 / XChaCha20-Poly1305 (AEAD).
  2. Disk / File encryption (random access): AES-XTS (confidentiality) + integrity layer riêng.
  3. IoT / Constrained: AES-CCM hoặc ChaCha20-Poly1305.
  4. Legacy migration: CBC+HMAC-SHA256 (Encrypt-then-MAC) → chuyển AEAD sớm.
  5. Tuyệt đối không: ECB, CBC không MAC, CTR không MAC, OFB, CFB cho ứng dụng mới.