让我们假设我想使用一个大密钥大小的密码,比如支持8192位ogf密钥的艾萨克。
我可以使用sha-256或sha-512进行散列,并在达到键大小之前进行迭代,但是我不会获得8192位的安全性,因为这个散列函数的内部状态被限制为256或512位。
我可以使用XOF (eXtendable输出函数)进行散列,例如Skein、hash、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位安全性吗?
发布于 2021-12-11 10:55:15
Argon2中的绝大部分时间都用于在内存中填充向量(或向量)并对其进行迭代。输出是通过散列最后一个块来生成的。如果输出大于512位,则只执行Blake2b几次。与以前的步骤相比,这在时间上根本不重要。因此,你没有注意到任何时差。
我认为Argon2实际上无法实现8192位的安全性,只有Blake2b的512位。然而,这并没有真正的意义。目前,256位被认为是安全的,即使量子计算机出现。我认为这种情况在很长一段时间内不会改变。当512位安全不再足够时,我们谁也不会看到。
在密码的情况下,我们无论如何都不能应用通常的比特安全标准。除非密码被随机生成并使用一次,否则它们的比特安全性不能被明确地度量。
https://crypto.stackexchange.com/questions/96580
复制相似问题