Re: [Cryptography] [RFC] random: add new pseudorandom number generator

Jon Callas <[email protected]> Sat, 2 Oct 2021 17:08:03 -0700
Newsgroups gmane.linux.kernel.cryptoapi,gmane.comp.encryption.general
Message-ID <[email protected]>

> On Sep 16, 2021, at 20:18, Sandy Harris <[email protected]> =
wrote:
>=20
> I have a PRNG that I want to use within the Linux random(4) driver. It
> looks remarkably strong to me, but analysis from others is needed.

A good block cipher in counter mode makes a pretty-okay PRNG. I say =
pretty-okay only because I would like my PRNG not to be invertible. =
Iterated hash functions are better. However, they are slower, and a =
property you want in a PRNG is that it's fast. I did a system PRNG that =
was intentionally faster than arc4random() and close to =
linear-congruential because then there's no excuse for not using it. A =
mildly evil person would replace both of those with a fast real PRNG. =
(Mildly evil because if some user knew the internals and was counting on =
it acting the way the internals specified, they might be disappointed.)

XTEA is an okay block cipher. Not great, okay. Probably good enough for =
a PRNG. But -- why wouldn't you use AES? An obvious answer is that you =
don't have it in hardware and see previous 'graph commentary about =
speed. Note that XTEA is a 64-bit block, so if you compare to AES, take =
that in mind.

The NIST AES_CTR_DRBG is mostly-okay. It's got a few issues (see =
<https://eprint.iacr.org/2020/619.pdf>), but you can get around them. I =
don't like that it takes a simple concept (a good block cipher is a good =
PRP/PRF) and throws enough scaffolding around it to make it hard to =
understand. I understand the reasons (they are essentially the same as =
your rekey protection and some more), it just bugs me.

So why not just use your CPU's AES (assuming you have one), or further =
wrap XTEA in the DRBG stuff for the added misuse protection? Or even =
iterate MD5, or, ummm, you knew this was coming, didn't you, use the =
PRNG mode of Skein-512 (which is about twice as fast as software AES on =
a 64-bit CPU)? Yeah, I know, driver. So we're back to why not AES? =
What's the design consideration?

	Jon