開放SSL

密碼編譯和 SSL/TLS 工具包

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