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) 中的「參數」 中找到參數的完整清單。EVP_KDF_CTX_set_params() 使用的常見參數名稱為

key:string

將秘密金鑰指定為字母數字字串(僅當金鑰只包含可列印字元時使用)。字串長度必須符合 KDF 演算法的任何限制。必須為大多數 KDF 演算法指定金鑰。

hexkey:string

key: 選項的替代選項,其中秘密金鑰以十六進位形式指定(每個位元組兩個十六進位數字)。

pass:string

將密碼指定為字母數字字串(僅當密碼只包含可列印字元時使用)。必須為 PBKDF2 和 scrypt 指定密碼。

hexpass:string

替代 pass: 選項,其中密碼以十六進位形式指定(每個位元組兩個十六進位數字)。

salt:字串

指定非機密且唯一的密碼鹽,為字母數字字串(僅在包含可列印字元時使用)。長度必須符合 KDF 演算法的任何限制。多種 KDF 演算法需要 salt 參數,例如 EVP_KDF-PBKDF2(7)

hexsalt:字串

替代 salt: 選項,其中 salt 以十六進位形式指定(每個位元組兩個十六進位數字)。

info:字串

某些 KDF 實作,例如 EVP_KDF-HKDF(7),會採用「資訊」參數,將衍生的金鑰材料繫結到應用程式和特定於內容的資訊。指定資訊、固定資訊、其他資訊或共用資訊引數,為字母數字字串(僅在包含可列印字元時使用)。長度必須符合 KDF 演算法的任何限制。

hexinfo:字串

替代 info: 選項,其中資訊以十六進位形式指定(每個位元組兩個十六進位數字)。

digest:字串

此選項與 -digest 選項相同。

cipher:字串

此選項與 -cipher 選項相同。

mac:字串

此選項與 -mac 選項相同。

-provider 名稱
-provider-path 路徑
-propquery propq

請參閱 openssl(1) 中的「提供者選項」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 和資訊建立十六進位編碼的衍生金鑰

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

使用 SSKDF 搭配 KMAC 從機密金鑰、salt 和資訊建立十六進位編碼的衍生金鑰

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

使用 SSKDF 搭配 HMAC 從機密金鑰、salt 和資訊建立十六進位編碼的衍生金鑰

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

使用 SSKDF 搭配雜湊從機密金鑰、salt 和資訊建立十六進位編碼的衍生金鑰

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

使用 SSHKDF 從機密金鑰、雜湊和 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 新增

Copyright 2019-2023 The OpenSSL Project Authors. All Rights Reserved.

在 Apache License 2.0(「授權」)下授權。您只能在遵守授權的條件下使用此檔案。您可以在原始程式碼散佈中的 LICENSE 檔案中取得一份副本,或至 https://www.openssl.org/source/license.html 取得。