Aes

Salsa20/ChaCha20 或 AES-Encrypt 中的常量、密鑰、隨機數和計數器位之間的根本區別?

  • August 30, 2019

Salsa20 核心函式採用 128 位常量、256 位密鑰、64 位計數器和 64 位隨機數並生成 512 位值。或者更一般地說,它是從 512 位值到 512 位值的映射。

出於特定目的選擇特定輸入位是否有原因?例如,如果交換了一些計數器位位置和關鍵位位置,這會導緻密碼更弱嗎?如果我們使用常量位作為附加的關鍵位呢?

AES加密怎麼樣?如果我們將 AES-128-Encrypt 視為從 256 位值到 128 位值的映射,我們能否在不削弱密鑰和IV輸入塊的情況下使用我們想要的任何輸入位?

編輯:澄清我的 AES 問題:我寫了IV但我的意思是input block。(根據操作模式,輸入塊可能是 IV、明文塊、計數器等)

現在我想一想,很明顯,關鍵位與輸入塊位不同。給定 AES-Encrypt 的輸出和輸入塊,很難確定密鑰。但是,鑑於 AES-Encrypt 的輸出和密鑰,確定輸入塊很簡單:只需應用 AES-Decrypt。

出於特定目的選擇特定輸入位是否有原因?例如,如果交換了一些計數器位位置和關鍵位位置,這會導緻密碼更弱嗎?

不,不會對安全產生實際影響。選擇特定位置主要是為了提高 SIMD 實施性能。Salsa20 和 ChaCha 核心函式,忽略常數,可以認為是 $ f : {0,1}^{384} \rightarrow {0,1}^{512} $ ,因此只要它是安全的,各個位的確切位置並不重要,人們認為它是安全的。事實上,ChaCha 的 IETF 變體使用與 Bernstein 的原始版本不同的隨機數和計數器大小(分別為 96:32 和 64:64)。

請注意,這些職位確實有一些安全隱患。ChaCha 論文的第 3.2 節解釋了攻擊者控制的詞如何在 Salsa20 中更加分散,並為攻擊者提供了額外的靈活性,但使密碼分析更容易。另一方面,ChaCha 將所有攻擊者控制的字(nonce 和 counter,無論它們的大小,只要它們的總和為 128 位)都保留在輸入矩陣的底行。但是,對於標準輪數,對安全性的影響非常小。

如果我們使用常量位作為附加的關鍵位呢?

現在不是一個好主意。常數很重要,儘管具體值有些隨意。如果沒有常量,一個全為空的密鑰、隨機數和計數器將導致一個全為空的密鑰流塊。理論上,一個完全隨機的、均勻分佈的密鑰可以擴展為使用計數器位,它導致安全問題的可能性可以忽略不計,但這會違反密碼的安全屬性(畢竟,你有創建關於有效密鑰是什麼的限制!)。

AES加密怎麼樣?如果我們將 AES-128-Encrypt 視為從 256 位值到 128 位值的映射,我們能否在不削弱密鑰和 IV 的情況下使用我們想要的任何輸入位?

AES 與 Salsa20 完全不同。它是一個分組密碼,因此 IV(對於大多數分組模式,對於密碼本身而言,只不過是輸入消息而已)和密鑰是根本不同的。

引用自:https://crypto.stackexchange.com/questions/72885