Re: [PATCH v25 10/12] LRNG - add TRNG support
From: Andy Lutomirski <luto@kernel.org>
Date: 2019-11-19 10:07:56
Also in:
linux-crypto, lkml
On Sun, Nov 17, 2019 at 3:11 AM Stephan Müller [off-list ref] wrote:
Am Samstag, 16. November 2019, 17:09:09 CET schrieb Andy Lutomirski: Hi Andy,quoted
quoted
On Nov 16, 2019, at 1:40 AM, Stephan Müller [off-list ref] wrote: The True Random Number Generator (TRNG) provides a random number generator with prediction resistance (SP800-90A terminology) or an NTG.1 (AIS 31 terminology)....quoted
The secondary DRNGs seed from the TRNG if it is present. In addition, the /dev/random device accesses the TRNG. If the TRNG is disabled, the secondary DRNGs seed from the entropy pool and /dev/random behaves like getrandom(2).As mentioned before, I don’t like this API. An application that, for some reason, needs a TRNG, should have an API by which it either gets a TRNG or an error. Similarly, an application that wants cryptographically secure random numbers efficiently should have an API that does that. With your design, /dev/random tries to cater to both use cases, but one of the use cases fails depending on kernel config. I think /dev/random should wait for enough entropy to initialize the system but should not block after that. A TRNG should have an entirely new API that is better than /dev/random.I apologize for the misunderstanding. I assumed we would introduce such /dev/ true_random at a later stage. If you agree, I can certainly add /dev/true_random right now that links with the TRNG and make /dev/random behave as discussed, i.e. behave exactly like getrandom(..., 0);
Given that your series is already a decently large ABI change, I think it would be polite to users to make all the anticipated changes all at once to reduce the amount of churn everyone needs to deal with.
As this would introduce a new device file now, is there a special process that
I need to follow or do I need to copy? Which major/minor number should I use?
Looking into static const struct memdev devlist[] I see
[8] = { "random", 0666, &random_fops, 0 },
[9] = { "urandom", 0666, &urandom_fops, 0 },
Shall a true_random be added here with [10]?I am not at all an expert on chardevs, but this sounds generally reasonable. gregkh is probably the real authority here.