Cryptography openssl命令行是否执行密钥增强?
如果我在hmac模式下运行openssl命令行(如下所示),是直接使用hmac的密钥,还是在将其用作密钥之前对其进行哈希处理Cryptography openssl命令行是否执行密钥增强?,cryptography,openssl,Cryptography,Openssl,如果我在hmac模式下运行openssl命令行(如下所示),是直接使用hmac的密钥,还是在将其用作密钥之前对其进行哈希处理 echo "foo" | openssl dgst -sha256 -binary -hmac "test" | openssl base64 类似地,当使用openssl(如下所示)加密文件时,密码短语是否用salt散列?(如果是这样的话,是如何做到的?一个指向正确源文件的指针会更好。) hmac选项不使用盐析或散列;它只是直接使用密码短语作为密钥。请参见源代码分发中
echo "foo" | openssl dgst -sha256 -binary -hmac "test" | openssl base64
类似地,当使用openssl(如下所示)加密文件时,密码短语是否用salt散列?(如果是这样的话,是如何做到的?一个指向正确源文件的指针会更好。)
hmac选项不使用盐析或散列;它只是直接使用密码短语作为密钥。请参见源代码分发中的
apps/dgst.c
:
else if (!strcmp(*argv,"-hmac"))
{
if (--argc < 1)
break;
hmac_key=*++argv;
}
...
if (hmac_key)
{
sigkey = EVP_PKEY_new_mac_key(EVP_PKEY_HMAC, e,
(unsigned char *)hmac_key, -1);
if (!sigkey)
goto end;
}
然后,它使用函数EVP_BytesToKey
(在crypto/EVP/EVP_key.c
中)生成一个随机密钥。这个函数似乎是一个非标准的算法,简单看一眼,它看起来似乎还行,但除此之外,我无法证明它
源代码片段和注释都来自OpenSSL 1.0.0版本。谢谢!我想我现在完全明白了。我在这里还找到了该函数的doc:EVP_BytesToKey与PBKDF1非常接近。注意,对于enc命令,使用-k或-kfile进行盐析,使用-k不进行盐析。在源代码中,-k和-kfile填充str,而-k填充hkey。
else if (!strcmp(*argv,"-hmac"))
{
if (--argc < 1)
break;
hmac_key=*++argv;
}
...
if (hmac_key)
{
sigkey = EVP_PKEY_new_mac_key(EVP_PKEY_HMAC, e,
(unsigned char *)hmac_key, -1);
if (!sigkey)
goto end;
}
/* Note that str is NULL if a key was passed on the command
* line, so we get no salt in that case. Is this a bug?
*/
if (str != NULL)
{
/* Salt handling: if encrypting generate a salt and
* write to output BIO. If decrypting read salt from
* input BIO.
*/