OpenSSL

密碼學和 SSL/TLS 工具組

EVP_KDF-TLS1_PRF

名稱

EVP_KDF-TLS1_PRF - TLS1 PRF EVP_KDF 實作

說明

支援透過 EVP_KDF API 計算 TLS1 PRF。

EVP_KDF-TLS1_PRF 演算法實作 TLS 版本(包括 TLS 1.2)所使用的 PRF。

識別

「TLS1-PRF」是此實作的名稱;它可搭配 EVP_KDF_fetch() 函式使用。

支援的參數

支援的參數為

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

這些參數會依照 EVP_KDF(3) 中的「參數」 所述運作。

OSSL_KDF_PARAM_DIGEST 參數用於設定與 TLS PRF 關聯的訊息摘要。EVP_md5_sha1() 被視為特殊情況,它使用 PRF 演算法,同時使用 MD5SHA1,就像 TLS 1.0 和 1.1 中所用。

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

此參數設定 TLS PRF 的機密值。任何現有的機密值都會被取代。

「種子」 (OSSL_KDF_PARAM_SEED) <八位元組字串>

此參數設定內容種子。內容種子的長度不得超過 1024 位元組;這對於 TLS PRF 的任何正常使用都已綽綽有餘。

備註

可透過呼叫取得 TLS PRF 的內容

EVP_KDF *kdf = EVP_KDF_fetch(NULL, "TLS1-PRF", NULL);
EVP_KDF_CTX *kctx = EVP_KDF_CTX_new(kdf);

必須在衍生金鑰之前設定摘要、機密值和種子,否則會發生錯誤。

PRF 的輸出長度由 EVP_KDF_derive() 函式的 keylen 參數指定。

範例

此範例使用 SHA-256、機密金鑰「secret」和種子值「seed」衍生 10 個位元組

EVP_KDF *kdf;
EVP_KDF_CTX *kctx;
unsigned char out[10];
OSSL_PARAM params[4], *p = params;

kdf = EVP_KDF_fetch(NULL, "TLS1-PRF", NULL);
kctx = EVP_KDF_CTX_new(kdf);
EVP_KDF_free(kdf);

*p++ = OSSL_PARAM_construct_utf8_string(OSSL_KDF_PARAM_DIGEST,
                                        SN_sha256, strlen(SN_sha256));
*p++ = OSSL_PARAM_construct_octet_string(OSSL_KDF_PARAM_SECRET,
                                         "secret", (size_t)6);
*p++ = OSSL_PARAM_construct_octet_string(OSSL_KDF_PARAM_SEED,
                                         "seed", (size_t)4);
*p = OSSL_PARAM_construct_end();
if (EVP_KDF_derive(kctx, out, sizeof(out), params) <= 0) {
    error("EVP_KDF_derive");
}
EVP_KDF_CTX_free(kctx);

遵循

RFC 2246、RFC 5246 和 NIST SP 800-135 r1

另請參閱

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

歷程

此功能已新增至 OpenSSL 3.0。

版權所有 2018-2021 The OpenSSL Project Authors。保留所有權利。

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