通常,我使用Argon2生成加密密钥,然后使用AES使用该密钥加密数据。我是否可以将散列大小设置为等于数据大小,将关联的数据设置为随机值,然后在Argon2输出上使用Xor对数据进行加密/解密?或者,是否有一些加密属性使得以这种方式使用它不安全?
发布于 2023-05-02 13:02:28
如果您查看Argon2的伪代码,您会发现它在函数末尾创建了“标记”:
return Hash(C, tagLength)标记本身只是一个散列。对于Argon2,这个Hash调用使用Blake2b创建一个具有可配置输出大小的哈希函数,正如上面的调用所暗示的那样。对于更大的输出,它使用初始的Blake2b哈希作为起点,然后通过重新散列材料来迭代地创建后续块。
显然,如果所有的块都被输出,那将是个问题,因为这意味着任何人都可以重建所有的比特,如果它们是新的第一个块。幸运的是,在为每个块生成的64个字节中,Argon2只输出32个字节,留下256个比特保持未知。这也意味着您需要对Blake2b进行两次调用,而不是一次,将预期的最大性能减半。显然这不是为了最大的速度而设计的。注意,digestSize --输出的长度--也包含在对Blake2b的初始调用中,这意味着您必须事先知道密钥流大小。
那么它安全吗?好吧,有约化圆Blake2 2的分辨器,但这些都不实用,量子计算机不太可能很快就破坏算法。在每个块中保留256位未知数似乎也不错。
所以是的,原则上你可以用它来加密使用异或。Argon2也有一个2^{32}字节的限制,所以不可能超过4 GiB。使用快速认证(流)密码肯定会更好。
https://crypto.stackexchange.com/questions/106363
复制相似问题