EVP_KDF-PBKDF2(7SSL)

✨ EVP_KDF-PBKDF2 β€” the PBKDF2 glow-up ✨

okay so bestie, welcome to the EVP_KDF-PBKDF2(7SSL) page from the OpenSSL manual πŸ’– this is the one about turning your little password into a big strong cryptographic key, and honestly? she ate.


🌸 NAME 🌸

EVP_KDF-PBKDF2 β€” the PBKDF2 EVP_KDF implementation, no cap πŸ’…


πŸ¦‹ DESCRIPTION πŸ¦‹

So basically: this is support for computing the PBKDF2 password-based KDF through the EVP_KDF API. iconic behavior.

The EVP_KDF-PBKDF2 algorithm implements the PBKDF2 password-based key derivation function, exactly as described in SP800-132. She derives a key from a password using a salt and an iteration count. that's the whole vibe πŸ”₯

The output is considered to be a cryptographic key. not a vibe, an actual key. periodt.

πŸ’« Identity πŸ’«

"PBKDF2" is the name for this implementation β€” that's her government name. You can use it with the EVP_KDF_fetch() function. iykyk ✨

πŸŽ€ Supported parameters πŸŽ€

the supported parameters are, and buckle up because there's a list:

  • "pass" (OSSL_KDF_PARAM_PASSWORD) <octet string> β€” your password, as octets πŸ“
  • "salt" (OSSL_KDF_PARAM_SALT) <octet string> β€” your salt πŸ§‚
  • "iter" (OSSL_KDF_PARAM_ITER) <unsigned integer> β€” the iteration count. this parameter has a default value of 2048.
  • "properties" (OSSL_KDF_PARAM_PROPERTIES) <UTF8 string> β€” works as described in "PARAMETERS" in EVP_KDF(3).
  • "digest" (OSSL_KDF_PARAM_DIGEST) <UTF8 string> β€” also works as described in "PARAMETERS" in EVP_KDF(3).
🚨 note note note: PBKDF2 uses HMAC internally, and HMAC does not support eXtendable Output Function (XOF) digests such as SHAKE128 or SHAKE256. Attempting to use an XOF digest with PBKDF2 will result in an error. so don't do it bestie, she will simply not pass the vibe check 😭
  • "pkcs5" (OSSL_KDF_PARAM_PKCS5) <integer> β€” this parameter can be used to enable or disable SP800-132 compliance checks. Setting the mode to 0 enables the compliance checks. (yes, 0 = checks on, that's the way it is, don't shoot the messenger πŸ™ˆ)

the checks performed are:

  1. the iteration count is at least 1000.
  2. the salt length is at least 128 bits.
  3. the derived key length is at least 112 bits.
  4. the password length is at least minimum length.

the default minimum password length can be configured when OpenSSL is compiled by setting -DKDF_PBKDF2_MIN_PASSWORD_LEN=length. If not set then 1 is used for the default provider and 8 for the FIPS provider since 4.0.3... wait no, since 4.0.0. Please consult the security policy document of your FIPS provider from your vendor for further details, as implementation often vary by each vendor. (vendor-lore is real, ask your vendor πŸ‘‘)

The default provider uses a default mode of 1 for backwards compatibility, and the FIPS provider uses a default mode of 0.

πŸ’€ heads up: this option breaks FIPS compliance if it causes the approved "fips-indicator" to return 0.
  • "fips-indicator" (OSSL_KDF_PARAM_FIPS_APPROVED_INDICATOR) <integer> β€” this option is used by the OpenSSL FIPS provider.

A getter that returns 1 if the operation is FIPS approved, or 0 otherwise. This may be used after calling EVP_KDF_derive. It returns 0 if "pkcs5" is set to 1 and the password length, derived key length, salt length or iteration count test fails. so she's snitching, but politely πŸ’…


⭐ NOTES ⭐

A typical application of this algorithm is to derive keying material for an encryption algorithm from a password in the "pass", a salt in "salt", and an iteration count. classic.

Increasing the "iter" parameter slows down the algorithm which makes it harder for an attacker to perform a brute force attack using a large number of candidate passwords. yes bestie, slow is a feature, that's the main character energy πŸ’–

No assumption is made regarding the given password; it is simply treated as a byte sequence. she does not judge your password, she just hashes it. we love a non-judgmental queen 🫢


🌈 CONFORMING TO 🌈

SP800-132 β€” she follows the rules (when she wants to).


πŸ”₯ SEE ALSO πŸ”₯

go read the family, they're all icons ✨


πŸŽ€ HISTORY πŸŽ€

This functionality was added in OpenSSL 3.0. so she's not new new, but she's not ancient either. a millennial, if you will πŸ’…


Copyright 2018-2026 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>.


okay that's the whole page, you're officially PBKDF2-pilled 🧚 this was the EVP_KDF-PBKDF2(7SSL) manual page, version 4.0.3, dated 2026-09-29 β€” and yes she's still slaying, bye bestie πŸ’–βœ¨

πŸ“¦ where this page comes from