OpenSSL

密码学和 SSL/TLS 工具包

EVP_KDF-X963

名称

EVP_KDF-X963 - X9.63-2001 EVP_KDF 实现

描述

EVP_KDF-X963 算法实现了密钥导出函数 (X963KDF)。X963KDF 用于密码消息语法 (CMS) 的 EC 密钥协商,使用共享密钥和共享信息等输入来导出密钥。

标识

"X963KDF" 是此实现的名称;它可以与 EVP_KDF_fetch() 函数一起使用。

支持的参数

支持的参数是

"properties" (OSSL_KDF_PARAM_PROPERTIES) <UTF8 字符串>
"digest" (OSSL_KDF_PARAM_DIGEST) <UTF8 字符串>

这些参数的工作原理如 "PARAMETERS" in EVP_KDF(3) 中所述。

"key" (OSSL_KDF_PARAM_KEY) <字节串>

用于密钥导出的共享密钥。此参数设置密钥。

"info" (OSSL_KDF_PARAM_INFO) <字节串>

此参数指定共享信息的可选值。

注意

X963KDF 与使用摘要作为辅助函数的 SSKDF 非常相似,X963KDF 将计数器追加到密钥,而 SSKDF 将计数器置于密钥之前。

可以通过调用以下方法获取 X963KDF 的上下文

EVP_KDF *kdf = EVP_KDF_fetch(NULL, "X963KDF", NULL);
EVP_KDF_CTX *kctx = EVP_KDF_CTX_new(kdf);

X963KDF 的输出长度通过 EVP_KDF_derive(3) 函数的 keylen 参数指定。

示例

此示例使用密钥“secret”和共享信息值“label”导出 10 个字节。

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

kdf = EVP_KDF_fetch(NULL, "X963KDF", 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_INFO,
                                         "label", (size_t)5);
*p = OSSL_PARAM_construct_end();
if (EVP_KDF_derive(kctx, out, sizeof(out), params) <= 0) {
    error("EVP_KDF_derive");
}

EVP_KDF_CTX_free(kctx);

符合

"SEC 1: 椭圆曲线密码学"

另请参阅

EVP_KDF(3), EVP_KDF_CTX_new(3), EVP_KDF_CTX_free(3), EVP_KDF_CTX_set_params(3), EVP_KDF_CTX_get_kdf_size(3), EVP_KDF_derive(3), "PARAMETERS" in EVP_KDF(3)

历史

此功能是在 OpenSSL 3.0 中添加的。

版权所有 2019-2021 OpenSSL 项目作者。保留所有权利。

根据 Apache 许可证 2.0 版(“许可证”)授权使用。除非符合许可证,否则您不得使用此文件。您可以在源代码发行版的 LICENSE 文件或 https://www.openssl.org/source/license.html 中获取副本。