我使用PBKDF2生成一个ED448签名密钥,并试图为SHA-3确定最佳的salt大小。我记得在PBKDF2中,我读过一条建议使用相当于PRF内部状态块大小的盐分大小。我的理解是,Keccak/SHA-3不像SHA/MD散列那样使用块。那么,如何根据Keccak参数来选择或计算盐的长度呢?既然Keccak比SHA2快,那么迭代应该增加吗?
当前代码:
const uint32_t SaltLen = 64; // what to pick here?
const uint32_t PBKDFIterations = 10000;
uint8_t Salt[SaltLen];
uint8_t SigningKeyBytes[ED448_KEYLEN];
RAND_bytes(Salt, sizeof(Salt));
PKCS5_PBKDF2_HMAC(Password, PasswordLength, Salt, SaltLen, PBKDFIterations, EVP_sha3_512(), sizeof(SigningKeyBytes), SigningKeyBytes);我已经看到了2015年以来关于在PBKDF2中使用SHA-3的现有问题,但是这个问题已经有将近7年的历史了,我希望从那以后建议已经改变了。
发布于 2021-12-19 02:29:28
为了本文的目的,让我们将迭代散列函数的块大小定义为:
当输入到哈希算法时,将导致调用迭代函数( MD的压缩函数和Sponge的置换)的数据量。
考虑到这一点,SHA-3和抖动-*的块大小将是它们的“速率”参数。
现在回到盐上。通常128位(16字节)盐就足够了(以阻止计算前的攻击,如彩虹桌攻击),256位就足够了。关于StackOverflow的相关文章
https://crypto.stackexchange.com/questions/97715
复制相似问题