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 取得。