Re: [PATCH 0/6] crypto: DRBG - improve 'nopr' reseeding

From: Stephan Müller
Date: Tue Oct 26 2021 - 04:36:11 EST


Am Montag, 25. Oktober 2021, 11:25:19 CEST schrieb Nicolai Stange:

Hi Nicolai,

> Hi all,
>
> this patchset aims at (hopefully) improving the DRBG code related to
> reseeding from get_random_bytes() a bit:

Thanks for sharing your patches.

> - Replace the asynchronous random_ready_callback based DRBG reseeding
> logic with a synchronous solution leveraging rng_is_initialized().

Could you please help me why replacing an async method with a sync method is
helpful? Which problems do you see with the async method that are alleviated
with the swtich to the sync method? In general, an async method is more
powerful, though it requires a bit more code.

> This
> move simplifies the code IMO and, as a side-effect, would enable DRBG
> users to rely on wait_for_random_bytes() to sync properly with
> drbg_generate(), if desired. Implemented by patches 1-5/6.
> - Make the 'nopr' DRBGs to reseed themselves every 5min from
> get_random_bytes(). This achieves at least kind of a partial prediction
> resistance over the time domain at almost no extra cost. Implemented
> by patch 6/6, the preceding patches in this series are a prerequisite
> for this.

Just as a side note not against your ideas and patches, but in general: IMHO
it is a failure of all of us that the quite sensitive (re)seeding of RNGs and
entropy management is handled in multiple places in the kernel - and each case
only handles a subset of considerations around that topic. Note, (re)seeding
may be needed in other occasions than the elapse of a timer or the reaching of
maximum number of generate operations. Seeding belongs to a central place
where it is done right once and usable for differnent RNGs as proposed with my
LRNG patch set and the published todo list to get rid of the entire seeding
logic in the DRBG code base.

That said, your patch of adding the timer-based reseeding seems appropriate
and thus should be considered for the current code base.

Ciao
Stephan