開啟SSL

密碼學和 SSL/TLS 工具組

EVP_KDF-X942-ASN1

名稱

EVP_KDF-X942-ASN1 - X9.42-2003 asn1 EVP_KDF 實作

說明

EVP_KDF-X942-ASN1 演算法實作 X942KDF-ASN1 鍵導引函數。它由 DH KeyAgreement 使用,以使用共用密鑰和其他資訊等輸入導引鍵。其他資訊是 DER 編碼資料,其中包含 32 位元計數器,以及「partyu-info」、「partyv-info」、「supp-pubinfo」和「supp-privinfo」的選用欄位。此 kdf 由密碼學訊息語法 (CMS) 使用。

身分

「X942KDF-ASN1」或「X942KDF」是此實作的名稱;它可用於 EVP_KDF_fetch() 函數。

支援的參數

支援的參數為

「屬性」(OSSL_KDF_PARAM_PROPERTIES) <UTF8 字串>
「摘要」(OSSL_KDF_PARAM_DIGEST) <UTF8 字串>

這些參數的運作方式如 「EVP_KDF(3) 中的參數」 所述。

「密碼」(OSSL_KDF_PARAM_SECRET) <八位元組字串>

用於鍵導引的共用密碼。此參數設定密碼。

「acvp-info」(OSSL_KDF_PARAM_X942_ACVPINFO) <八位元組字串>

此值不應在生產環境中使用,且僅應使用於 ACVP 測試。它是一個選用的八位元組字串,其中包含與「partyu-info」、「partyv-info」、「supp-pubinfo」和「supp-privinfo」相關的任何選用欄位的 DER 編碼 blob。如果指定此值,則不應使用這些其他欄位。

「partyu-info」(OSSL_KDF_PARAM_X942_PARTYUINFO) <八位元組字串>

一個選用的八位元組字串,其中包含由發起者提供的公開資訊。

「ukm」(OSSL_KDF_PARAM_UKM) <八位元組字串>

「partyu-info」的別名。在 CMS 中,這是使用者金鑰材料。

「partyv-info」(OSSL_KDF_PARAM_X942_PARTYVINFO) <八位元組字串>

一個選用的八位元組字串,其中包含由回應者提供的公開資訊。

「supp-pubinfo」(OSSL_KDF_PARAM_X942_SUPP_PUBINFO) <八位元組字串>

一個選用的八位元組字串,其中包含一些額外的、共同已知的公開資訊。設定此值也會將「use-keybits」設定為 0。

「use-keybits」(OSSL_KDF_PARAM_X942_USE_KEYBITS) <整數>

預設值 1 會使用 KEK 金鑰長度(以位元為單位)作為「supp-pubinfo」。值 0 會停用設定「supp-pubinfo」。

「supp-privinfo」(OSSL_KDF_PARAM_X942_SUPP_PRIVINFO)<八位元組字串>

包含一些額外、彼此已知的私人資訊的選用八位元組字串。

「cekalg」(OSSL_KDF_PARAM_CEK_ALG)<UTF8 字串>

此參數設定 CEK 封裝演算法名稱。有效值為「AES-128-WRAP」、「AES-192-WRAP」、「AES-256-WRAP」和「DES3-WRAP」。

附註

可透過呼叫取得 X942KDF 的內容

EVP_KDF *kdf = EVP_KDF_fetch(NULL, "X942KDF", NULL);
EVP_KDF_CTX *kctx = EVP_KDF_CTX_new(kdf);

X942KDF 的輸出長度透過 keylen 參數指定給 EVP_KDF_derive(3) 函數。

範例

此範例衍生 24 個位元組,使用機密金鑰「secret」和隨機使用者金鑰素材

EVP_KDF_CTX *kctx;
EVP_KDF_CTX *kctx;
unsigned char out[192/8];
unsignred char ukm[64];
OSSL_PARAM params[5], *p = params;

if (RAND_bytes(ukm, sizeof(ukm)) <= 0)
    error("RAND_bytes");

kdf = EVP_KDF_fetch(NULL, "X942KDF", NULL);
if (kctx == NULL)
    error("EVP_KDF_fetch");
kctx = EVP_KDF_CTX_new(kdf);
EVP_KDF_free(kdf);
if (kctx == NULL)
    error("EVP_KDF_CTX_new");

*p++ = OSSL_PARAM_construct_utf8_string(OSSL_KDF_PARAM_DIGEST, "SHA256", 0);
*p++ = OSSL_PARAM_construct_octet_string(OSSL_KDF_PARAM_SECRET,
                                         "secret", (size_t)6);
*p++ = OSSL_PARAM_construct_octet_string(OSSL_KDF_PARAM_UKM, ukm, sizeof(ukm));
*p++ = OSSL_PARAM_construct_utf8_string(OSSL_KDF_PARAM_CEK_ALG, "AES-256-WRAP, 0);
*p = OSSL_PARAM_construct_end();
if (EVP_KDF_derive(kctx, out, sizeof(out), params) <= 0)
    error("EVP_KDF_derive");

EVP_KDF_CTX_free(kctx);

符合

ANS1 X9.42-2003 RFC 2631

另請參閱

EVP_KDF(3)EVP_KDF_CTX_new(3)EVP_KDF_CTX_free(3)EVP_KDF_CTX_set_params(3)EVP_KDF_CTX_get_kdf_size(3)EVP_KDF_derive(3)EVP_KDF(3) 中的「參數」

歷程

此功能已新增至 OpenSSL 3.0。

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

根據 Apache License 2.0(「授權」)授權。您不得使用此檔案,除非符合授權。您可以在原始程式碼散佈中的 LICENSE 檔案中取得副本,或至 https://www.openssl.org/source/license.html 取得。