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() 函数一起使用。
支持的参数
支持的参数为
- "properties" (OSSL_KDF_PARAM_PROPERTIES) <UTF8 字符串>
- "cipher" (OSSL_KDF_PARAM_CIPHER) <UTF8 字符串>
- "key" (OSSL_KDF_PARAM_KEY) <八位字节字符串>
-
这些参数的工作方式如 "PARAMETERS" in EVP_KDF(3) 中所述。
- "constant" (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), "PARAMETERS" in EVP_KDF(3)
历史记录
此功能在 OpenSSL 3.0 中添加。
版权
版权所有 2016-2021 OpenSSL 项目作者。保留所有权利。
根据 Apache 许可证 2.0 版(“许可证”)许可。除非符合许可证,否则您不得使用此文件。您可以在源代码发行版中的 LICENSE 文件或 https://www.openssl.org/source/license.html 中获取副本。