[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Cfrg] On using ROs for analyzing randomness extraction functions
On Oct 31, 2005, at 12:41 AM, D. J. Bernstein wrote:
Compressibility alert! I'm willing to bet quite a lot of money that
you
didn't produce this polynomial by flipping 256 coins and then testing
irreducibility.
You're right, I didn't. I chose the first irreducible polynomial of
degree 256, on the mistaken assumption that one member of the
universal hash family was as good as any other. I see now that some
members may be "weak", and that I should have chosen a member at
random. I'd be happy to use your choice of hash function, or one
based on digits of pi, or whatever . . .
I also see your point about related key attacks, so it seems we need
some sort of "public randomness", as suggested by Canetti.
I really wasn't trying to design anything new myself, I was just
trying to focus the discussion, to hash out some of the ideas that
had been suggested during discussion of the NIST HKDF.
It seems to me that during this discussion, two categories of KDFs
have been suggested: 1) NIST's "all-in-one" HKDF, and 2) a two-layer
"randomness extraction"/"key expansion" scheme. Adherents to the two-
layer philosophy seem to agree that a PRF should be used for key
expansion, but several suggestions for randomness extraction have
been made: 2.1) a cryptographic hash function, 2.2) a PRF keyed with
a public random nonce, and 2.3) a universal hash function selected
from a universal hash family using a public random nonce. If I
understand the suggestions correctly, they are, in compact notation:
1) K_i = H( i || SV || context )
2.1) K_i = PRF( H(SV), i || context )
2.2) K_i = PRF( PRF( R, SV ), i || context )
2.3) K_i = PRF( UH( R, SV ), i || context )
Where the first input to the PRF is always the key, and the second
input is the message; UH is a universal hash function family, where
the input R selects a specific hash function from the family, and the
second input is the message to be hashed; and R is a public random
nonce.
1 makes strong assumptions on the hash function H, but it is noted
that these assumptions have never been violated in practice. The
implementation is straightforward, and requires only a single
cryptographic primitive, with the ability to reuse H if it is already
present in the system.
2.1 makes weaker assumptions on H, it requires only one primitive if
the PRF is taken to be HMAC-H, and it can reuse H if present
elsewhere in the system.
2.2 makes a non-standard assumption about the PRF, namely, that it
has properties similar to universal hash families and that it retains
some security after the key is made public. It has the advantage of
requiring only a single cryptographic primitive, and can reuse either
a hash function or a block cipher, if either is already present in
the system. Additionally, it does not *require* public randomness R,
as this could be taken to be 0 if no R is available, reducing the
security guarantee, but probably retaining as much security as 2.1.
2.3 seems to be the only one that offers security in the standard
model, but it may be practically unacceptable in many applications,
since it requires two cryptographic primitives, a PRF and a universal
hash function family. A "lighter-weight" KDF is clearly needed for
some applications, even if some others might be better using 2.3.
-John
_______________________________________________
Cfrg mailing list
Cfrg at ietf.org
https://www1.ietf.org/mailman/listinfo/cfrg