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 演算法,同時使用 MD5 和 SHA1,就像 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 取得副本。