PBKDF2 - 使用 SHA512 生成 1024 位密钥长度时会发生什么?
PBKDF2 - What happens when generating 1024 bits key length with SHA512?
我有这段代码可以用 PBKDF2 生成密钥。
SecretKeyFactory skf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA512");
PBEKeySpec spec = new PBEKeySpec(password.toCharArray(), salt.getBytes(), iterations, length);
SecretKey key = skf.generateSecret(spec);
byte[] res = key.getEncoded();
我想知道当密钥长度超过指定的 SHA 摘要算法类型时如何生成?
例如 - 当我将密钥长度设置为 1024 位并使用 PBKDF2WithHmacSHA512
算法时会发生什么情况? 512位是从哪里产生的?
每 PBKDF2
dkLen is the desired length of the derived key
DK is the generated derived key
派生密钥 DK
的每个 hLen
位块 Ti
计算如下:
DK = T1 || T2 || ... || Tdklen/hlen
导出的字节数组可以是任意长度,不基于哈希算法。
一般情况下,不建议要求超过哈希长度,因为每个块再次 运行 通过所有迭代:
根据维基百科(其格式比 PKCS#5 更具可读性):
DK = T1 || T2 || ... || Tdklen/hlen
Ti = F(Password, Salt, c, i)
这里c
顺便说一下迭代次数
问题在于 通常 大量键 material 仅在结果拆分为多个组件时使用。如果攻击者可以仅使用前 128 位来验证正确的密码猜测,那么攻击者所要做的工作要比算法的合法用户少。
解决这个问题的一种方法是使用 KBKDF 拆分 PBKDF2 的输出,例如 HKDF 使用不同的标签(也被散列的信息)。这样你就可以生成几乎无限数量的密钥 material 而无需 运行 对每 512 位进行所有迭代。
请注意,512 位足以用于两个 非常 安全的 AES-256 位密钥。所以这是对 PBKDF2 使用 SHA-512 的一个很好的理由。请注意,在 64 位计算机上,SHA-512 可能比 SHA-256 更快,同时提供更多输出 material 和安全性。
我有这段代码可以用 PBKDF2 生成密钥。
SecretKeyFactory skf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA512");
PBEKeySpec spec = new PBEKeySpec(password.toCharArray(), salt.getBytes(), iterations, length);
SecretKey key = skf.generateSecret(spec);
byte[] res = key.getEncoded();
我想知道当密钥长度超过指定的 SHA 摘要算法类型时如何生成?
例如 - 当我将密钥长度设置为 1024 位并使用 PBKDF2WithHmacSHA512
算法时会发生什么情况? 512位是从哪里产生的?
每 PBKDF2
dkLen is the desired length of the derived key
DK is the generated derived key
派生密钥 DK
的每个 hLen
位块 Ti
计算如下:
DK = T1 || T2 || ... || Tdklen/hlen
导出的字节数组可以是任意长度,不基于哈希算法。
一般情况下,不建议要求超过哈希长度,因为每个块再次 运行 通过所有迭代:
根据维基百科(其格式比 PKCS#5 更具可读性):
DK = T1 || T2 || ... || Tdklen/hlen Ti = F(Password, Salt, c, i)
这里c
顺便说一下迭代次数
问题在于 通常 大量键 material 仅在结果拆分为多个组件时使用。如果攻击者可以仅使用前 128 位来验证正确的密码猜测,那么攻击者所要做的工作要比算法的合法用户少。
解决这个问题的一种方法是使用 KBKDF 拆分 PBKDF2 的输出,例如 HKDF 使用不同的标签(也被散列的信息)。这样你就可以生成几乎无限数量的密钥 material 而无需 运行 对每 512 位进行所有迭代。
请注意,512 位足以用于两个 非常 安全的 AES-256 位密钥。所以这是对 PBKDF2 使用 SHA-512 的一个很好的理由。请注意,在 64 位计算机上,SHA-512 可能比 SHA-256 更快,同时提供更多输出 material 和安全性。