EVP_KDF-KRB5KDF(7SSL)
π EVP_KDF-KRB5KDF(7SSL) β bestie edition
okay so β¨ this is the manpage for EVP_KDF-KRB5KDF (yes that's the whole name, it's giving Very Specific) and it's part of the OpenSSL crew. Strap in, we're deriving keys π
π NAME
EVP_KDF-KRB5KDF β the RFC3961 Krb5 KDF EVP_KDF implementation, i.e. the little guy that knows how to do the Krb5 key derivation thing π¦
β¨ DESCRIPTION
It's support for computing the KRB5KDF KDF through the EVP_KDF API. No cap.
The EVP_KDF-KRB5KDF algorithm implements the key derivation function defined in RFC 3961, section 5.1, and Krb5 uses it to derive session keys. To do the derivation you need three inputs, and bestie you cannot skip any of them:
- a cipher (for example
AES-128-CBC), - the initial key,
- and a constant.
πΈ Identity
"KRB5KDF" is the name for this implementation π it's what you hand to the EVP_KDF_fetch() function when you want it.
π«Ά Supported parameters
Here's the roster, the whole roster, nobody left out:
"properties"(OSSL_KDF_PARAM_PROPERTIES)<UTF8 string>"cipher"(OSSL_KDF_PARAM_CIPHER)<UTF8 string>"key"(OSSL_KDF_PARAM_KEY)<octet string>
These three literally just work as described in "PARAMETERS" in EVP_KDF(3). Go look there, they said it better, iykyk.
"constant"(OSSL_KDF_PARAM_CONSTANT)<octet string>β this one sets the constant value for the KDF. And heads up: if a value is already set, the contents get replaced. Not appended, not merged, replaced. periodt. π₯
π¦ NOTES
Wanna get yourself a context for KRB5KDF? You do it like this:
EVP_KDF *kdf = EVP_KDF_fetch(NULL, "KRB5KDF", NULL);
EVP_KDF_CTX *kctx = EVP_KDF_CTX_new(kdf);
The output length of the KRB5KDF derivation is specified via the keylen parameter to the EVP_KDF_derive(3) function, and it MUST match the key length for the chosen cipher or an error is returned. Like, MUST must. π
Also, the constant's length must not exceed the block size of the cipher. Respect the block size bestie.
And here's the sneaky part π since the KRB5KDF output length depends on the chosen cipher, calling EVP_KDF_CTX_get_kdf_size(3) to obtain the requisite length returns the correct length only after the cipher is set. Before that, it just returns EVP_MAX_KEY_LENGTH. So:
The caller must allocate a buffer of the correct length for the chosen cipher, and pass that buffer to the EVP_KDF_derive(3) function along with that length. β¨
π EXAMPLES
This example derives a key using the AES-128-CBC cipher β look at it go:
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);
π CONFORMING TO
RFC 3961 β she follows the rules, she's a good girl π
π SEE ALSO
EVP_KDF(3)EVP_KDF_CTX_free(3)EVP_KDF_CTX_get_kdf_size(3)EVP_KDF_derive(3)- "PARAMETERS" in
EVP_KDF(3)
β HISTORY
This functionality was added in OpenSSL 3.0. Glow up era. οΏ½οΏ½
π COPYRIGHT
Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the Apache License 2.0 (the "License"). You may not use this file except in compliance with the License. You can obtain a copy in the file LICENSE in the source distribution or at <https://www.openssl.org/source/license.html>.
and that's the whole vibe check, bestie π«Ά this was 4.0.3, dated 2026-09-29, straight from the OpenSSL girls β go derive something iconic πβ¨πΈ
π¦ where this page comes from
- ubuntu stonking: openssl 4.0.3-1ubuntu1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms