PBEKeySpec 迭代计数和键长度参数会影响什么?

2022-09-01 10:44:58

深入研究java加密和哈希世界,我看到类的构造函数示例,其中包含各种参数值。似乎没有任何东西可以解释这些参数的影响或含义。PBEKeySpeciterationCountkeyLength

我假设这是密钥的长度,因此32位加密的密钥长度将取值32,但这种假设感觉是错误的。我的猜测是每个字符被加密的次数,同样也没有感觉到这种假设的爱。keyLengthiterationCount

欢迎链接到信息或解释。


答案 1

迭代计数是在派生对称密钥期间对密码进行哈希处理的次数。数字越大,验证密码猜测然后派生出正确的密钥就越困难。它与盐一起使用,用于防止使用彩虹表的攻击。迭代计数应尽可能高,而不会使您自己的系统速度过慢。迭代计数的更通用术语是工作因子

密钥长度是派生的对称密钥的长度(以位为单位)。DESede 密钥的长度可以是 128 位或 192 位,包括奇偶校验位。AES 密钥的长度可以是 128、192 或 256 位。问题在于API没有指定哪个密钥长度(位/字节,带奇偶校验或不带奇偶校验)的含义;因为密钥大小为位,包括本节中所示的奇偶校验位。PBEKeySpec

密钥派生函数通常只输出“足够”的随机位,因此您仍然可以指定所需的密钥大小。


笔记:

  • 欲了解更多信息,请看一下标准,PKCS标准往往相对容易阅读。
  • 盐只需要是独一无二的;通常,这是通过使用安全的随机数生成器(对于Java表示使用和)创建64到256位完全随机盐来实现的。盐可以是公共的,并与密文或密码哈希一起存储。new SecureRandom()nextBytes(int amount)
  • 为密钥大小指定任何大于哈希输出大小的值(默认情况下,这是 SHA-1,160 位输出大小)可能会失败(对于 PBKDF1)或导致额外的减速(对于 PBKDF2)。不推荐;只需在算法规范中使用SHA-256,SHA-512等哈希函数即可。
  • SHA-1(有时简称为SHA,因为从未使用过SHA-0)甚至MD5对于这种功能仍然完全安全(因为它不依赖于抗碰撞性),但您仍然应该选择更安全的选项,例如SHA-256或SHA-512用于新协议。

答案 2

推荐