OpenSSL

密码学和 SSL/TLS 工具包

openssl-kdf

名称

openssl-kdf - 执行密钥导出函数操作

概要

openssl kdf [-help] [-cipher] [-digest] [-mac] [-kdfopt nm:v] [-keylen num] [-out filename] [-binary] [-provider name] [-provider-path path] [-propquery propq] kdf_name

描述

密钥导出函数从密钥或密码生成派生密钥。

选项

-help

打印使用信息。

-keylen num

派生密钥的输出大小。此字段是必需的。

-out filename

要输出到的文件名,默认情况下为标准输出。

-binary

以二进制形式输出派生密钥。如果没有指定,则使用十六进制文本格式。

-cipher name

指定 KDF 要使用的密码。并非所有 KDF 都需要密码,在这种情况下使用此选项是错误的。

-digest name

指定 KDF 要使用的摘要。并非所有 KDF 都需要摘要,在这种情况下使用此选项是错误的。要查看支持的摘要列表,请使用 openssl list -digest-commands

-mac name

指定 KDF 要使用的 MAC。并非所有 KDF 都需要 MAC,在这种情况下使用此选项是错误的。

-kdfopt nm:v

将选项传递给 KDF 算法。可以在 "EVP_KDF(3) 中的 PARAMETERS" 中找到参数的完整列表。EVP_KDF_CTX_set_params() 使用的常见参数名称是

key:string

将密钥指定为字母数字字符串(如果密钥仅包含可打印字符,请使用)。字符串长度必须符合 KDF 算法的任何限制。大多数 KDF 算法必须指定一个密钥。

hexkey:string

key: 选项的替代方案,其中密钥以十六进制形式指定(每字节两个十六进制数字)。

pass:string

将密码指定为字母数字字符串(如果密码仅包含可打印字符,请使用)。PBKDF2 和 scrypt 必须指定密码。

hexpass:string

pass: 选项的替代方案,其中密码以十六进制形式指定(每字节两个十六进制数字)。

salt:string

将非秘密唯一密码盐指定为字母数字字符串(如果它包含可打印字符,请使用)。长度必须符合 KDF 算法的任何限制。几个 KDF 算法(例如 EVP_KDF-PBKDF2(7))需要 salt 参数。

hexsalt:string

salt: 选项的替代方案,其中 salt 以十六进制形式指定(每字节两个十六进制数字)。

info:string

一些 KDF 实现(例如 EVP_KDF-HKDF(7))采用 'info' 参数来将派生密钥材料绑定到应用程序和上下文特定的信息。将 info、固定 info、其他 info 或共享 info 参数指定为字母数字字符串(如果它包含可打印字符,请使用)。长度必须符合 KDF 算法的任何限制。

hexinfo:string

info: 选项的替代方案,其中 info 以十六进制形式指定(每字节两个十六进制数字)。

digest:string

此选项与 -digest 选项相同。

cipher:string

此选项与 -cipher 选项相同。

mac:string

此选项与 -mac 选项相同。

-provider name
-provider-path path
-propquery propq

"openssl(1) 中的 Provider 选项"provider(7)property(7)

kdf_name

指定要使用的受支持 KDF 算法的名称。支持的算法名称包括 TLS1-PRF、HKDF、SSKDF、PBKDF2、SSHKDF、X942KDF-ASN1、X942KDF-CONCAT、X963KDF 和 SCRYPT。

示例

使用 TLS1-PRF 从密钥和种子创建十六进制编码的派生密钥

openssl kdf -keylen 16 -kdfopt digest:SHA2-256 -kdfopt key:secret \
            -kdfopt seed:seed TLS1-PRF

使用 HKDF 从密钥、salt 和 info 创建十六进制编码的派生密钥

openssl kdf -keylen 10 -kdfopt digest:SHA2-256 -kdfopt key:secret \
            -kdfopt salt:salt -kdfopt info:label HKDF

使用 KMAC 的 SSKDF 从密钥、salt 和 info 创建十六进制编码的派生密钥

openssl kdf -keylen 64 -kdfopt mac:KMAC-128 -kdfopt maclen:20 \
            -kdfopt hexkey:b74a149a161545 -kdfopt hexinfo:348a37a2 \
            -kdfopt hexsalt:3638271ccd68a2 SSKDF

使用 HMAC 的 SSKDF 从密钥、salt 和 info 创建十六进制编码的派生密钥

openssl kdf -keylen 16 -kdfopt mac:HMAC -kdfopt digest:SHA2-256 \
            -kdfopt hexkey:b74a149a -kdfopt hexinfo:348a37a2 \
            -kdfopt hexsalt:3638271c SSKDF

使用 Hash 的 SSKDF 从密钥、salt 和 info 创建十六进制编码的派生密钥

openssl kdf -keylen 14 -kdfopt digest:SHA2-256 \
            -kdfopt hexkey:6dbdc23f045488 \
            -kdfopt hexinfo:a1b2c3d4 SSKDF

使用 SSHKDF 从密钥、hash 和 session_id 创建十六进制编码的派生密钥

openssl kdf -keylen 16 -kdfopt digest:SHA2-256 \
            -kdfopt hexkey:0102030405 \
            -kdfopt hexxcghash:06090A \
            -kdfopt hexsession_id:01020304 \
            -kdfopt type:A SSHKDF

使用 PBKDF2 从密码和 salt 创建十六进制编码的派生密钥

openssl kdf -keylen 32 -kdfopt digest:SHA256 -kdfopt pass:password \
            -kdfopt salt:salt -kdfopt iter:2 PBKDF2

使用 scrypt 从密码和 salt 创建十六进制编码的派生密钥

openssl kdf -keylen 64 -kdfopt pass:password -kdfopt salt:NaCl \
            -kdfopt n:1024 -kdfopt r:8 -kdfopt p:16 \
            -kdfopt maxmem_bytes:10485760 SCRYPT

注意

可用的 KDF 机制将取决于构建 OpenSSL 时使用的选项。

参见

openssl(1)openssl-pkeyutl(1)EVP_KDF(3)EVP_KDF-SCRYPT(7)EVP_KDF-TLS1_PRF(7)EVP_KDF-PBKDF2(7)EVP_KDF-HKDF(7)EVP_KDF-SS(7)EVP_KDF-SSHKDF(7)EVP_KDF-X942-ASN1(7)EVP_KDF-X942-CONCAT(7)EVP_KDF-X963(7)

历史

在 OpenSSL 3.0 中添加

版权所有 2019-2023 OpenSSL 项目作者。保留所有权利。

根据 Apache 许可证 2.0 版(“许可证”)许可。除非符合许可证,否则您不得使用此文件。您可以在源代码分发中的 LICENSE 文件或 https://www.openssl.org/source/license.html 中获取副本。