Argon2 允許輸入的密鑰長度很大,但它真的提供了所提供密鑰的安全性嗎?
我閱讀了Argon2 規範。
它在 3.1(第 5 頁)中說:
秘密值 K(必要時用作密鑰,但我們不假設預設使用任何密鑰)可以具有任意長度 $ 0 $ 至 $ 2^{32}\text{-}1 $ 字節。
假設我想將 Argon2 轉換為塊加密,我提供一個 8192 位密鑰(1024 字節)並為每個生成的塊提供一個計數器,因此,對密文中的散列塊進行異或。
根據密鑰長度,這種加密方案是否具有安全性?我會有 8192 位的加密強度嗎?
我問這個是因為 Argon2 使用 Blake2b,它有 512 位的狀態大小,並且它的安全性被限制在這個限制內。
根據密鑰長度,這種加密方案是否具有安全性?我會有 8192 位的加密強度嗎?
不,安全性受限於
$$ security = min{\text{Argon2 input_size};, ;\text{Hash digest size}} $$在您使用 BLAKE2-512 的情況下,它是 512 位安全性而不是 8192。
原因很清楚。Argon2 返回
return Hash(C, tagLength)
(變長雜湊函式)或參見Argon2 論文第 6 頁 *如果使用 BLAKE2,那麼前 64 個字節是 BLAKE2 的輸出。如果輸出要求大於 64 字節,則剩餘字節來自先前 BLAKE2 呼叫的輸出。
V1 ← Blake2b(digestSize ∥ FinalBlock, 64); Subsequent blocks are generated from previous blocks for i ← 2 to r do Vi ← Blake2b(Vi-1, 64) Lower 32 bytes of Vi is returned.
因此,安全性不能大於散列摘要大小,這對於即使是後量子對手來說也應該足夠了。
而且,256 位安全性對每個人來說都足夠了。Argon2 專為密碼散列而設計,雖然可以將其用於 CTR 模式,但仍然更喜歡 xChaCha20-Poly1305 以獲得機密性、完整性和身份驗證。這比 Argon2 加密要快得多。xChaCha20 是 ChaCha20 的擴展,具有 192 位 nonce,可實現隨機 nonce,而無需擔心 CTR 模式的 nonce 重用問題。
*預設輸出只輸出單個雜湊。這使得客戶端獨立更新是密碼散列競爭的功能要求。