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() 函数一起使用。
支持的参数
支持的参数为
- "properties" (**OSSL_KDF_PARAM_PROPERTIES**) <UTF8 字符串>
- "digest" (**OSSL_KDF_PARAM_DIGEST**) <UTF8 字符串>
-
这些参数的工作原理如 "PARAMETERS" in EVP_KDF(3) 中所述。
**OSSL_KDF_PARAM_DIGEST** 参数用于设置与 TLS PRF 关联的消息摘要。EVP_md5_sha1() 被视为一个特殊情况,它使用 PRF 算法,该算法使用 **MD5** 和 **SHA1** 作为 TLS 1.0 和 1.1 中使用的算法。
- "secret" (**OSSL_KDF_PARAM_SECRET**) <八位字节串>
-
此参数设置 TLS PRF 的秘密值。任何现有的秘密值都将被替换。
- "seed" (**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), "PARAMETERS" in EVP_KDF(3)
历史
此功能是在 OpenSSL 3.0 中添加的。
版权
版权所有 2018-2021 OpenSSL 项目作者。保留所有权利。
根据 Apache 许可证 2.0 版(“许可证”)许可。除符合许可证的规定外,您不得使用此文件。您可以在源代码分发中的 LICENSE 文件或 https://www.openssl.org/source/license.html 中获取副本。