使用 Chaskey 作為流密碼
Chaskey ( https://eprint.iacr.org/2014/386.pdf ) 是一款用於嵌入式系統的安全、緊湊和高效的 MAC,並贏得了許多基準測試。它是使用 Even-Mansour 分組密碼建構的。該分組密碼將明文與密鑰進行異或,應用公共置換函式,然後將結果與相同的密鑰進行異或以創建密文。不幸的是,這篇論文只討論了 MAC 案例,而不是加密案例。然而,該網站(https://mouha.be/chaskey/)也提到了其他案例:
- 一個輕量級的 PRF。
- 可用於加密確保消息完整性(作為 MAC)。
- 對使用者進行身份驗證(在質詢-響應協議中)。
- 生成隨機數(在計數器模式下)。
我想知道它是否也可以以安全的方式用於加密,即在計數器模式下使用它來創建流密碼。這意味著我們可以創建一個僅使用 Chaskey 作為原語的 Encrypt-then-MAC 算法,這對於嵌入式系統非常有效(當然與每個消息的 nonce 結合使用)。
由於它可以用作 PRF 並在計數器模式下生成隨機數,看起來這確實應該是可行的。
CTR 模式最初是為 PRF 設計的。
- Privacy and Authentication: An Introduction to Cryptography as an Introduction to Cryptography as an Introduction to Cryptography as an Introduction to Proceedings of the IEEE, 67 (1979), pp. 397–427。
任何 PRF *都可以通過 CTR 模式轉換為流密碼。但是,最好不要使用為 MAC 建構的重型函式用作流密碼。將 ChaCha 用於從 PRF 構造的流密碼或使用像 Trivium 這樣的直接流密碼。
如果您真的想使用,請使用輸入作為$$ F_k(\text{nonce_block}\mathbin|\text{counter_block}) $$作為 CTR 模式並加密為
$$ c_i = m_i \oplus F_k(\text{nonce_block}\mathbin|\text{counter_i}) $$
確保
- $ \text{counter_i} $ 永遠不要超過 $ \text{counter_block} $ ,
- 如果計數器達到最大值,則永遠不會返回初始狀態 $ 2^{\text{counter_block_size}}-1 $
- 恢復計數器以進行另一次加密並不復雜。
- 在上面,較新的讓一個 $ (IV,key) $ 再次出現在哪裡 $ IV = (\text{nonce_block}\mathbin|\text{counter_i}) $
*實際上,對於密碼學來說,any 是不夠的,密鑰大小和輸入輸出大小很重要。今天我們更喜歡 xChaCha20,因為它啟用 192 位 nonce 以避免在同一密鑰下的 nonce 衝突,並且具有 512 位輸入/輸出大小。Chaskey 的 128 位安全性對於輕量級密碼學來說已經足夠了,但是,對於其他用途,它還不夠安全。