為什麼分組密碼主 要用作流密碼?
使用 CTR 或 GCM 模式的分組密碼為我們提供了流密碼,唯一的區別是 CTR 不包含 MAC 標籤或 AAD,但 GCM 包含。我認為這些是分組密碼最常用的操作模式,因為 ECB 不安全且 CBC 不可並行化。
當一位根據密鑰流位映射到另一位時,這是否不會將有效算法塊大小減少到 1 位?保持密碼的塊大小不是更好嗎?
為什麼分組密碼主要用作流密碼?
CTR 模式不需要像 CBC 模式那樣的填充,多年來導致許多攻擊被稱為填充預言攻擊$$ 1 $$ $$ 2 $$. 最後,CBC 從 TLS 中刪除,TLS 1.3 只有 CTR 模式密碼(rfc 8446)。
+------------------------------+-------------+ | Description | Value | +------------------------------+-------------+ | TLS_AES_128_GCM_SHA256 | {0x13,0x01} | | | | | TLS_AES_256_GCM_SHA384 | {0x13,0x02} | | | | | TLS_CHACHA20_POLY1305_SHA256 | {0x13,0x03} | | | | | TLS_AES_128_CCM_SHA256 | {0x13,0x04} | | | | | TLS_AES_128_CCM_8_SHA256 | {0x13,0x05} | +------------------------------+-------------+
攻擊和 TLS 的決定增加了 CTR 模式的使用。請記住,幾乎所有網際網路安全都基於 TLS。根據 SSLlabs 的調查,有 %46.6 的站點接受 TLS 1.3(協議支持)
CTR 模式、CBC 和 CFB(所有歸檔操作模式)都沒有設計為 MAC。要擁有 Mac,請使用 HMAC 或使用 GCM、CCM、Poly1305 等。
如果從理論上講模式CBC和CTR只能提供Ind-CPA。除此之外,還需要 Ind-CCAx 的完整性。另一方面,經過身份驗證的加密(GCM、CCM、Poly1305)提供了比 Ind-CCAx 更高的安全性,
當一位根據密鑰流位映射到另一位時,這不會將有效算法塊大小減少到 1 位嗎?
好吧,如果你使用 CBC 並應用填充,那麼你執行的東西比丟棄塊中不必要的位要多。在這兩種情況下,加密塊的數量幾乎相同(除非塊已滿,否則對於 PKCS#7,需要一個額外的塊)。然後,應用填充和取消填充是要應用的附加功能。CTR 模式需要 x-or 流。
正如評論中所指出的,CTR 模式是高度可並行化的,甚至可以實現隨機訪問或預查流。我機器上的以下 OpenSLL 性能
openssl speed -evp aes-128-cbc aes-128-ctr
正如我們所看到的,除了非常短的消息 CTR 在 AES-NI 中擊敗了 CBC。
保持密碼的塊大小不是更好嗎?
不
- 我們必須處理填充及其不安全問題,當我們有 CTR 模式時,為什麼不完全刪除它。
- 對於 AES,它還將數據的大小最多增加 16 字節。
- CTR 模式設計使用 PRF 而不是 PRP(分組密碼是 PRP),這提供了更廣泛的功能使用 - 就像我們使用 ChaCha20 一樣。在 CBC 模式下,我們必須使用 PRP。
當然,沒有什麼是完美的!每種模式都有其優點和缺點。根據上下文,人們可以更喜歡一個。按照常識,在現代密碼學中,我們更喜歡經過身份驗證的加密模式,例如 AES-GCM(可能帶有 SIV)和 ChaCha20-Poly1305(對於 192 位隨機數更好的 xChaCha20-1305)。
- 有關 CTR 與 CBC 的詳細安全同情,請參閱CTR 是否比 CBC 更安全?