【问题标题】:Does the openssl command line do key strengthening?openssl 命令行是否做按键强化?
【发布时间】:2010-06-09 18:42:46
【问题描述】:

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

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

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

openssl enc -salt

【问题讨论】:

    标签: cryptography openssl


    【解决方案1】:

    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;
                }
    

    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)生成一个随机密钥。这个函数似乎是一个非标准算法,乍一看可能看起来还不错,但除此之外我无法证明它。

    源 sn-ps 和 cmets 均来自 OpenSSL 1.0.0 版本。

    【讨论】:

    • 谢谢!我想我现在完全理解了。我还在这里找到了该功能的文档:openssl.org/docs/crypto/EVP_BytesToKey.html
    • EVP_BytesToKey 非常接近 PBKDF1。
    • 请注意,关于 enc 命令,使用 -k 或 -kfile 进行加盐,使用 -K 不进行加盐。在源代码中,-k 和 -kfile 填充 str,而 -K 填充 hkey。
    猜你喜欢
    • 1970-01-01
    • 2010-10-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-28
    • 2012-09-04
    • 1970-01-01
    • 1970-01-01
    • 2011-07-05
    相关资源
    最近更新 更多