将salt与encryption的文件中断安全性一起存储吗?

我正在编写一个旨在使用AES 256encryption和解密文件的Android应用程序。我正在使用AES-CBC模式和PBKDF2从用户input的密码派生AES密钥。 另外,我正在为每个文件的encryption密钥生成一个安全的伪随机。 我使用encryption的文件存储IV和salt,所以我可以重新读取它们并稍后重新生成密钥,以便能够解密文件。

我的问题:存储盐与encryption文件中断安全性和盐本身的任何含义? 攻击者不知道salt和IV是否会对encryption文件进行离线蛮力攻击以找出encryption密钥?

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

只要你的密码有足够的熵,并且你的密钥导出函数的迭代次数足够高,把密文存储起来也不成问题。 单独的盐不会允许任何人解密文件。

此外,如果你想保持盐的秘密(通常被称为“胡椒”而不是盐),你将不得不考虑一些机制,以合法的方式获得合适的解密信息。

Salt用于单向函数,如散列密码。

随机IV用于双向函数,例如encryption稍后可以解密的数据。

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

您可以将它们存储在encryption文件的旁边。

也使用PBKDF2多于一个迭代,否则它是相当无用的。 根据维基百科, iOS 3使用2000次迭代,iOS 4使用10,000次。