EVP_KDF-KRB5KDF
名稱
EVP_KDF-KRB5KDF - RFC3961 Krb5 KDF EVP_KDF 實作
描述
透過 EVP_KDF API 支援計算 KRB5KDF KDF。
EVP_KDF-KRB5KDF 演算法實作 RFC 3961 第 5.1 節中定義的密鑰衍生函數,Krb5 使用此函數衍生會話金鑰。執行密鑰衍生需要三個輸入:一個密碼 (例如 AES-128-CBC)、初始金鑰和一個常數。
身分
「KRB5KDF」是此實作的名稱;可搭配 EVP_KDF_fetch() 函數使用。
支援的參數
支援的參數為
- 「屬性」 (OSSL_KDF_PARAM_PROPERTIES) <UTF8 字串>
- 「密碼」 (OSSL_KDF_PARAM_CIPHER) <UTF8 字串>
- 「金鑰」 (OSSL_KDF_PARAM_KEY) <八位元組字串>
-
這些參數的運作方式如 EVP_KDF(3) 中的「參數」 所述。
- 「常數」 (OSSL_KDF_PARAM_CONSTANT) <八位元組字串>
-
此參數設定 KDF 的常數值。如果已設定值,則會取代內容。
注意事項
可透過呼叫取得 KRB5KDF 的內容
EVP_KDF *kdf = EVP_KDF_fetch(NULL, "KRB5KDF", NULL);
EVP_KDF_CTX *kctx = EVP_KDF_CTX_new(kdf);
KRB5KDF 衍生的輸出長度透過 keylen 參數指定給 EVP_KDF_derive(3) 函數,且必須與所選密碼的密鑰長度相符,否則會傳回錯誤。此外,常數的長度不可超過密碼的區塊大小。由於 KRB5KDF 輸出長度取決於所選密碼,因此呼叫 EVP_KDF_CTX_get_kdf_size(3) 以取得必要長度,僅在設定密碼後才會傳回正確長度。在此之前會傳回 EVP_MAX_KEY_LENGTH。呼叫者必須為所選密碼配置正確長度的緩衝區,並將該緩衝區連同長度傳遞給 EVP_KDF_derive(3) 函數。
範例
此範例使用 AES-128-CBC 密碼衍生金鑰
EVP_KDF *kdf;
EVP_KDF_CTX *kctx;
unsigned char key[16] = "01234...";
unsigned char constant[] = "I'm a constant";
unsigned char out[16];
size_t outlen = sizeof(out);
OSSL_PARAM params[4], *p = params;
kdf = EVP_KDF_fetch(NULL, "KRB5KDF", NULL);
kctx = EVP_KDF_CTX_new(kdf);
EVP_KDF_free(kdf);
*p++ = OSSL_PARAM_construct_utf8_string(OSSL_KDF_PARAM_CIPHER,
SN_aes_128_cbc,
strlen(SN_aes_128_cbc));
*p++ = OSSL_PARAM_construct_octet_string(OSSL_KDF_PARAM_KEY,
key, (size_t)16);
*p++ = OSSL_PARAM_construct_octet_string(OSSL_KDF_PARAM_CONSTANT,
constant, strlen(constant));
*p = OSSL_PARAM_construct_end();
if (EVP_KDF_derive(kctx, out, outlen, params) <= 0)
/* Error */
EVP_KDF_CTX_free(kctx);
遵循
RFC 3961
另請參閱
EVP_KDF(3)、EVP_KDF_CTX_free(3)、EVP_KDF_CTX_get_kdf_size(3)、EVP_KDF_derive(3)、EVP_KDF(3) 中的「PARAMETERS」
歷程
此功能已新增至 OpenSSL 3.0。
版權
Copyright 2016-2021 The OpenSSL Project Authors。保留所有權利。
根據 Apache License 2.0(「本授權」)授權。您只能在遵守本授權的情況下使用此檔案。您可以在原始程式碼散佈中的 LICENSE 檔案中取得一份副本,或至 https://www.openssl.org/source/license.html 取得。