[PATCH 0/6] General Key Derivation Function Support

Stephan Müller
2019-01-11T19:13:58Z

Hi Herbert, Eric,

key derivation functions behave like a random number generator requiring
a seed and can generate arbitrarily-sized bit sequences. As KDFs wrap
ciphers, the first patch adds template support for the RNG part of the
kernel crypto API. This allows the KDFs to be implemented as templates.

The patches two through five add different KDFs. The immediate use in
the kernel are:

- SP800-108: security/keys/dh.c

- HKDF: As Eric Biggers outlined, he wants to use HKDF for Ext4 FBE

Other areas of the kernel implement KDFs which should be migrated to the
common code base offered with this patch.

The last patch adds the KDF invocation to tcrypt to allow an immediate
test invocation of the KDFs which is at least needed for FIPS 140-2
compliance where the tcrypt module is insmod'ed during boot time to
trigger the self tests.

Eric, considering your request for supporting parallel use of HKDF, I
instantiate the HMAC twice: once for the extract and once for the expand
phase. The idea is that an extract operation does not collide too much
with the expand operation (when using one instance of HMAC, the extract
phase would invoke setkey with the salt and thus affect the expand phase).
Though, the final extract phase setkey call with the PRK is non-atomic (at
least in the software HMAC implementation). Thus, the caller would need
to guarantee to invoke the extract phase while no expand phase operation
is performed. So, maintaining two HMAC instances is not really required
after all. What is your take on that?

Stephan Mueller (6):
crypto: add template handling for RNGs
crypto: kdf - SP800-108 Key Derivation Function
crypto: kdf - add known answer tests
crypto: hkdf - RFC5869 Key Derivation Function
crypto: hkdf - add known answer tests
crypto: tcrypt - add KDF test invocation

crypto/Kconfig | 13 +
crypto/Makefile | 2 +
crypto/hkdf.c | 290 ++++++++++++++++++++
crypto/kdf.c | 492 ++++++++++++++++++++++++++++++++++
crypto/rng.c | 44 +++
crypto/tcrypt.c | 8 +
crypto/testmgr.c | 258 ++++++++++++++++++
crypto/testmgr.h | 225 ++++++++++++++++
include/crypto/internal/rng.h | 26 ++
9 files changed, 1358 insertions(+)
create mode 100644 crypto/hkdf.c
create mode 100644 crypto/kdf.c

--
2.20.1