[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Cfrg] existing KDFs and their uses



"Blumenthal, Uri" <uri at ll.mit.edu> writes:

> So having this many different KDF's - why do we need one more, and how is it more secure (and more "random") than those already standardized??? 

That is a reasonable question.  So far I haven't seen any answer to why
there is any need to make HKDF applicable to the medium-entropy password
scenario.  If I missed any argument in the recent flurry of e-mails,
please remind me.

/Simon

>
> ----- Original Message -----
> From: cfrg-bounces at irtf.org <cfrg-bounces at irtf.org>
> To: Peter Gutmann <pgut001 at cs.auckland.ac.nz>; Dan Brown <dbrown at certicom.com>; David Jacobson <dmjacobson at sbcglobal.net>
> Cc: Pasi.Eronen at nokia.com Eronen <Pasi.Eronen at nokia.com>; cfrg at irtf.org <cfrg at irtf.org>; Hugo Krawczyk <hugo at ee.technion.ac.il>
> Sent: Wed Oct 21 11:29:06 2009
> Subject: [Cfrg] existing KDFs and their uses
>
> Hi Peter, Dan, and David,
>
>> "Dan Brown" <dbrown at certicom.com> writes:
>>
>>> 2.  The menagerie of key derivation functions (i.e. DH-like shared  
>>> secret
>>> value to symmetric key, which unlike key generation are needed for
>>> interoperability) such as IEEE KDF1 and KDF2, ANSI X9.63 X9.42,  
>>> NIST SP
>>> 800-56A, TLS-PRF, and IKE, and now HKDF,
>>
>
> Peter Gutmann wrote:
>> You missed out the SSH one, and what S/MIME uses for its DH keying,  
>> and there
>> are probably several others as well used in lesser-known protocols.   
>> In fact
>> every protocol that I know of has invented its own KDF, incompatible  
>> with
>> every other KDF out there, thus my question about why we need yet  
>> another one.
>
> David Jacobson wrote:
>> NIST SP 800-90, which is actually about random number generation,  
>> specifies two extractors, which it calls Derivation Functions, in  
>> Section 10.4.1 and 10.4.2. These are hash based and block cipher  
>> based, respectively.  Both can deal with generating internal key  
>> material wider than a single block.  (I write "internal key  
>> material" because the data so generated is used to as input to the  
>> expansion function.)
>
> good points, and it looks like underestimated the number of KDFs used  
> to extract keys from DH in my note yesterday.   It would be valuable  
> to list and categorize all of these functions and their uses, to  
> better understand the situation.  Collecting text from all of our  
> emails, here is a start:
> Uses:
>   1. Generate one key from another. In this case, no extraction stage  
> is needed.
>   2. Generate a key from a DH shared secret.  In this case,  
> computational extraction seems to be needed, because statistical  
> extraction would be inefficient.
>
>   3. Generate key material from a non-uniform random source.  In this  
> case, either statistical or computational extraction could be used.
>
>    4. Generate a key from a passphrase.
>
> KDFs:
> P_SHA256 from Section 5 of RFC 5246, The Transport Layer Security  
> (TLS) Protocol, Version 1.2.  (HMAC in an OFB mode variant)   Uses #1  
> and #2.
> P_MD5 XOR P_SHA1 from Section 5 of RFC 4346, The Transport Layer  
> Security (TLS) Protocol Version 1.1.  (HMAC in an OFB mode variant,  
> XORed with MD5 in the same mode.)  Uses #1 and #2.
> AES-CMAC-PRF-128 from RFC 4615, The Advanced Encryption Standard- 
> Cipher-based Message Authentication Code-Pseudo-Random Function-128  
> (AES-CMAC-PRF-128) Algorithm for the Internet Key Exchange Protocol  
> (IKE).   Uses #1 and #2.
>
> PRF+ from Section 2.13 of RFC 4306, IKEv2.   (HMAC in counter mode.)   
> Uses #1 and #2.
>
> SSH-KDF, Section 7.2 of RFC4253, The Secure Shell (SSH) Transport  
> Layer Protocol.  (Hash function in counter mode.)  Uses #1 and #2.
>
> AES-CM-PRF, Section 4.3.3 of RFC3711, The Secure Real-time Transport  
> Protocol.
>
> S/MIME DH KDF.  Section 2.1.2 of RFC 2631.  (Hash function.)  (Is this  
> really the most up-to-date reference for SMIME DH?)   Uses #1 and #2.
> Krb5-KDF from RFC 4402 A Pseudo-Random Function (PRF) for the Kerberos  
> V Generic Security Service Application Program Interface (GSS-API)  
> Mechanism.  (Hash function in counter mode.)  Use #1.
>
> PBKDF1 (Hash function in OFB mode.) PBKDF2 (HMAC iterated, with all of  
> the iterates XORed together.) from RFC2898, PKCS #5: Password-Based  
> Cryptography Specification Version 2.0.   Use #4.
>
> IEEE KDF1 (Hash function.)   Uses #1 and #2.
>
> IEEE KDF2 (Hash function in counter mode.)   Uses #1 and #2.
>
> ANSI X9.42 (Hash function.)   Uses #1 and #2.
>
> ANSI X9.63 (Hash function in counter mode.)   Uses #1 and #2.
>
> NIST SP 800-56A Concatenation-KDF and ASN.1-KDF (Hash function in  
> counter mode.)   Uses #1 and #2.
>
> NIST SP 800-90, Section 10.4 defines two extractors (hash function in  
> counter mode, and a block cipher mode) and Sections 10.1, 10.2, and  
> 10.3 define some "expanders".   Use #3.
>
> Additions and corrections are welcome.  Also, pointers to security  
> analyses would be good to have, wherever they exist.
> For each of these functions, it would be good to know a) under what  
> conditions is it secure (e.g. what has to be assumed of the hash  
> function) b) where and how is it used, c) does the protocol using it  
> admit the replacement of its KDF, and if so, d) what is its interface  
> (does it take a "salt" input, for example).
> David