盐与 IV 用于PKCS5_PBKDF2_HMAC
salt vs. iv for PKCS5_PBKDF2_HMAC
理解PKCS5_PBKDF2_HMAC()
需要盐并返回派生密钥
并且该GCM<AES>::Encryption.SetKeyWithIV()
需要一个 iv(以及派生密钥)
对盐(PKCS5_PBKDF2_HMAC()
)和iv(GCM<AES>::Encryption.SetKeyWithIV()
)使用相同的值是否安全 - 或者它们应该不同?
对盐(在PKCS5_PBKDF2_HMAC()中)和IV(在GCM::Encryption.SetKeyWithIV()中)使用相同的值是否安全 - 或者它们应该不同?
是和不是。是的 - 您可以使用 PKCS5_PBKDF2_HMAC
的输出来生成盐、iv 或键。不 - 您不应该重复使用这样的参数。
通常,您会执行以下操作。它使用唯一的标签,因此派生参数不能相同。
string password = "super secret password;
string label = "Key derivation with IV";
size_t length = password.length() + label.length();
unsigned int count = 5000;
SecByteBlock key(32 /*Key*/ + 16 /*IV*/);
PKCS5_PBKDF2_HMAC<SHA1> pbkdf2;
pbkdf2.DeriveKey(key, key.size(), 0, (unsigned char*)(password + label).data(), length,
NULL /*salt*/, 0 /*salt length*/, count);
GCM<AES>::Encryption encryptor;
encryptor.SetKeyWithIV(key, 32, key+32, 16);
上面的标签有助于使派生独一无二。
如果您提取盐,则您的标签可能是"Salt derivation for X"
。在这种情况下,您将从 KDF 获得不同的值。
在上面,可以应用 KDF 两次。首先,不加盐地涂抹以产生盐(使用独特的标签)。其次,使用盐派生密钥和iv(使用先前生成的盐和唯一的标签)。
相关文章:
- 如何用c语言翻译openssl命令pbkdf2
- 使用crypto++的HMAC解密植物文本
- C++ PBKDF2 Issue
- 将const指针(EVP_MD)保存到变量中,以将其重新使用为类方法(HMAC)
- 使用OpenSSL的SHA 512 HMAC消息身份验证的问题
- SHA256 HMAC使用OpenSL 1.1不编译
- C++ OPEN SSL 库 HMAC 功能返回值每次运行时都不相同
- 自行编写的 HMAC 函数,无法正常工作
- 是否有可能使用wincrypt进行HMAC
- 使用加密API C/C++的HMAC
- HMAC在Java和C++中消化不同
- 未定义的引用EVP_sha1、HMAC、Id 返回 1 个退出状态
- Arduino SHA1-HMAC 和 base64 编码与 Python 之间的问题
- 如何在HMAC-SHA1 Crypto++实现中使用自定义密钥
- QCA-OSSL 插件未加载.显示错误:不支持 HMAC(SHA1)
- HMAC on Mountain lion OSX 10.8.3 EXC_CRASH
- Java Mac HMAC vs C++ OpenSSL hmac
- HMAC SHA256 in C++ (DynamoDB)
- 我的代码中的HMAC-SHA512错误
- HMAC-SHA1不返回期望的哈希值