如果我在 hmac 模式下运行 openssl 命令行(如下),用于 hmac 的 key 是直接使用还是在用作 key 之前对其进行哈希处理?
echo "foo" | openssl dgst -sha256 -binary -hmac "test" | openssl base64
类似地,当使用 openssl 加密文件时(如下所示)密码短语是否使用盐进行哈希处理? (如果是这样,它是如何完成的?指向正确源文件的指针会更好。)
openssl enc -salt
最佳答案
hmac 选项不使用加盐或散列;它只是直接使用密码作为 key 。请参阅源代码分发中的 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;
}
enc
命令似乎确实使用了某种形式的加盐,至少在某些情况下是这样。相关的源文件是 apps/enc.c
,但似乎有一些注意事项:
/* 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.
*/
然后它使用函数 EVP_BytesToKey
(在 crypto/evp/evp_key.c
中)生成一个随 secret 钥。这个函数似乎是一个非标准算法,乍一看似乎还不错,但除此之外我无法证明这一点。
源代码片段和注释均来自 OpenSSL 1.0.0 版本。
关于cryptography - openssl命令行是否做key加强?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3008821/