7

我正在编写一个旨在使用 AES 256 加密和解密文件的 Android 应用程序。我正在使用 AES-CBC 模式和 PBKDF2 从用户输入的密码中获取 AES 密钥。此外,我正在为每个文件的加密密钥生成一个安全的伪随机盐。我将 IV 和 salt 与加密文件一起存储,因此我可以稍后重新读取它们并重新生成密钥以便能够解密文件。

我的问题:将盐与加密文件一起存储是否会破坏安全性以及盐本身的任何含义?知道盐和IV的攻击者不能对加密文件进行离线暴力攻击以找出加密密钥吗?

4

2 回答 2

10

盐的主要目的不是保密,而是确保攻击者在尝试暴力破解密码时不能使用快捷方式,例如使用彩虹表(即一个现有表,或一个新表用于多个加密文件),或一次暴力破解多个收集的文件(应该有不同的盐)。

只要你的密码有足够的熵并且你的密钥推导函数的迭代次数足够高,用密文存储盐是没有问题的。单独的盐不允许任何人解密文件。

此外,如果你想对盐保密(它通常被称为“胡椒”而不是盐),你必须考虑一些机制来为合法进行解密的人提供正确的盐。

于 2012-06-09T16:19:52.137 回答
2

Salt用于单向功能,例如散列密码。

随机 IV 用于双向功能,例如加密以后可以解密的数据。

它们都是随机字节,用于防止同一条信息在被函数应用后产生相同的结果。因此,如果两个人选择相同的密码来存储他们的数据并存储相同的信息,那么加密的字节就会不同。

您可以将它们与加密文件一起存储。

还要对 PBKDF2 使用超过 1 次迭代,否则它相当没用。根据Wikipedia , iOS 3 使用了 2,000 次迭代,而 iOS 4 使用了 10,000 次。

于 2012-06-09T14:02:33.707 回答