Page MenuHomeFreeBSD

arc4random(9): Integrate with RANDOM_FENESTRASX push-reseed
ClosedPublic

Authored by cem on Dec 16 2019, 7:32 PM.
Tags
None
Referenced Files
Unknown Object (File)
Thu, Nov 7, 5:21 AM
Unknown Object (File)
Wed, Nov 6, 4:25 PM
Unknown Object (File)
Thu, Oct 24, 2:51 AM
Unknown Object (File)
Sat, Oct 19, 10:22 AM
Unknown Object (File)
Tue, Oct 15, 11:05 PM
Unknown Object (File)
Tue, Oct 15, 10:55 AM
Unknown Object (File)
Oct 11 2024, 7:55 PM
Unknown Object (File)
Oct 7 2024, 9:39 AM
Subscribers

Details

Summary

In the fenestrasX model, when the root CSPRNG is reseeded from pools due to
an (infrequent) timer, child CSPRNGs can cheaply detect this condition and
reseed. To do so, they just need to track an additional 64-bit value in the
associated state, and check the __read_mostly root seed version (generation)
on random reads.

This revision integrates arc4random(9) into that model without changing the
design or implementation of arc4random(9) much. The motivation is that
arc4random(9) is immediately reseeded when the backing random(4)
implementation has additional entropy. This is arguably most important
during boot, when fenestrasX is reseeding at 1, 3, 9, 27, etc., second
intervals, but arc4random(9) has a hardcoded 300 second reseed window.
Without this mechanism, if arc4random(9) gets weak entropy during initial
seed (and arc4random(9) is used early in boot, so this is quite possible),
it may continue to emit poorly seeded output for 5 minutes. This scheme
corrects arc4random(9) as soon as possible.

Diff Detail

Repository
rS FreeBSD src repository - subversion
Lint
Lint Not Applicable
Unit
Tests Not Applicable

Event Timeline

I would like to land this. With the RANDOM_FENESTRASX option off (default), it should be no functional change. Any objection?

markm added a subscriber: markm.

I'm happy to see this landed in disabled form.

This revision is now accepted and ready to land.Oct 7 2020, 5:58 PM