Thread (154 messages) 154 messages, 11 authors, 2020-01-20

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.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help