Keys

問題:Argon2,它的內部狀態和生成大於 256/512 位的密鑰時的安全性

  • December 11, 2021

假設我想使用密鑰大小較大的密碼,例如支持 8192 位 ogf 密鑰的 ISAAC。

我可以使用 sha-256 或 sha-512 進行散列並迭代直到達到密鑰大小,但我不會獲得 8192 位的安全性,因為此散列函式的內部狀態上限為 256 或 512 位。

我可以使用 XOF(可擴展輸出函式)如 Skein、SHAKE、KangarooTwelve、Blake3 或 Blake2x 進行散列,但問題是內部狀態很小且基於壓縮函式中的迭代,它們提供的安全性不超過256/512 位,即使輸出是任意選擇的。

也許可以使用專門的 KDF 函式,例如 Argon2 或 Scrypt。

我的問題是關於 Argon2 的。

它的文件說它接受消息、鹽的大量輸入,並且可以任意選擇其摘要大小。

我編譯了一個 argon2 執行時程序來對終端中的文件(例如照片)進行雜湊處理,當輸出大小變小或變大時,我看不到時間上的差異。

$ time cat ~/some_file | argon2-static 00000000 -d -t 2000000 -m 3 -p 1 -r -l 32 &>/dev/null

real    0m6.334s
user    0m6.329s
sys 0m0.004s

$ time cat ~/some_file | argon2-static 00000000 -d -t 2000000 -m 3 -p 1 -r -l 1024 &>/dev/null

real    0m6.455s
user    0m6.443s
sys 0m0.008s

使用 Argon2 進行散列時,32 字節(256 位)和 1024(8192 位)輸出大小的時序幾乎相同。

這讓我產生了疑問。

Argon2 的內部狀態是否與輸出大小相同?或者也許它對散列函式的唯一迭代?

我問這個是因為 Argon2 使用 Blake2b 作為雜湊函式,它有 512 位的內部狀態,而不是我想要的 8192。

如果在 Argon2 中將一些高熵輸入(等於或大於輸出)處理為這個輸出大小,我是否會有 8192 位的安全性?

Argon2 中的絕大多數時間都花在了在記憶體中填充向量(或多個向量)並對其進行迭代。輸出是通過散列最終塊生成的。如果輸出長於 512 位,則只執行 Blake2b 幾次。與前面的步驟相比,這在時間方面根本不重要。因此,您不會注意到任何時差。

我會說 Argon2 實際上無法實現 8192 位的安全性,只有 Blake2b 的 512 位。但是,這並不重要。目前,即使出現量子電腦,256 位也被認為是安全的。我認為這在很長一段時間內都不會改變。512 位安全性不再足夠的時代是我們誰都不會看到的。

在密碼的情況下,無論如何我們都不能應用通常的位安全標準。除非密碼是隨機生成並使用一次,否則它們的位安全性無法明確衡量。

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