openssl命令行是否进行密钥加强?

时间:2010-06-09 18:42:47

标签: cryptography openssl

如果我以hmac模式运行openssl命令行(如下所示),是否使用了直接使用的hmac的密钥,还是在将其用作密钥之前进行了哈希?

echo "foo" | openssl dgst -sha256 -binary -hmac "test" | openssl base64

同样,使用openssl加密文件(如下所示)是使用盐进行哈希的密码短语? (如果是这样,它是如何完成的?指向正确源文件的指针会更好。)

openssl enc -salt

1 个答案:

答案 0 :(得分:2)

hmac选项不使用salting或散列;它只是直接使用密码作为密钥。请参阅源代码分发中的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中)生成随机密钥。这个函数似乎是一个非标准的算法,看起来似乎很简单,但我无法证明这一点。

源代码片段和评论都来自OpenSSL 1.0.0版本。