我对密码很陌生。
我有我的用户的密码,例如&&38:while:HAVE:havana:60&&
我想用AES加密10页的几个文档。
现在我什么时候运行我的salt,KDF和init向量函数?
尽可能频繁,例如每一页?(这就是我现在所做的,但它变得太慢了。我用加密的页面存储salt和初始化向量。)
还是KDF在登录时(所以我对所有加密的文档使用相同的派生密钥)和每个页面的不同的salt和初始化向量?
发布于 2019-03-04 12:45:43
PBKDF2是故意慢的(通过更多的迭代,它会变得更慢、更安全,所以您希望尽可能地让它变得更慢)。因此,您通常应该避免运行超过绝对需要的次数。
对每个加密的文档使用相同的密钥和不同的IV确实是可以的--这就是IV存在的目的。大多数加密方案都对使用一个密钥可以安全加密多少数据和/或多少不同的消息有限制,您应该检查所使用的方案的文档,以确保您不会有超过这些限制的风险。但是通常情况下,它们相当慷慨,如果您将自己限制为,例如,每个密钥的2^{32}不同的文档,最多每个2^{32}密码块,您可能会没事。(实际上,您可能需要更多地担心消息长度限制,而不是消息计数限制,这取决于您使用的加密模式,特别是如果您正在加密的一些文档可能大于64 GB。)
或者,如果您希望对每个文档使用不同的键,则可以通过(至少)两种方式有效地实现这一点。第一种方法是首先使用PBKDF2 (具有较高的迭代次数)从密码中派生单个主密钥,然后使用更快的KDF (如香港发展基金-扩展 )从主键派生文档密钥,并为每个文档提供一个不同的salt/info值。另一种方法是为每个文档生成一个随机密钥,使用主密钥加密该密钥(与第一种方法一样,该密钥来自使用PBKDF2的密码),并将其存储在加密文档的旁边。
Ps。你的问题对我来说似乎很熟悉,所以我检查了一下,看看我以前是否回答过类似的问题。虽然我没有找到您问题的确切副本,但我确实找到了一些您可能认为有用的相关问题,如下所示:
https://crypto.stackexchange.com/questions/67760
复制相似问题