|
Revision tags: perseant-exfatfs-base-20250801 netbsd-11-base
|
| #
1.44 |
|
28-Aug-2024 |
riastradh |
Bump dates on man pages recently updated to mention VM clones.
PR kern/58632: getentropy(2) and arc4random(3) do not reseed on VM fork
|
| #
1.43 |
|
27-Aug-2024 |
uwe |
rnd(4): tweak markup a bit, consistently use .Li for sysctl vars
|
| #
1.42 |
|
27-Aug-2024 |
riastradh |
rnd(4): Document kern.entropy.epoch is unprivileged and elaborate.
Cross-reference acpivmgenid(4).
PR kern/58632: getentropy(2) and arc4random(3) do not reseed on VM fork
|
|
Revision tags: perseant-exfatfs-base-20240630 perseant-exfatfs-base
|
| #
1.41 |
|
07-Aug-2023 |
riastradh |
branches: 1.41.2; rnd(4): Document `entropy: best effort' in random(4).
|
|
Revision tags: netbsd-10-base
|
| #
1.40 |
|
20-Mar-2022 |
riastradh |
branches: 1.40.2; entropy(9): Improve entropy warning messages and documentation.
- For the main warning message, use less jargon, say `security', and cite the entropy(7) man page for further reading. Document this in rnd(4) and entropy(7).
- For the debug-only warning message, say `entropy' only once and omit it from the rnd(4) man page -- it's not very important unless you're debugging the kernel in which case you probably know what you're doing enough to not need the text explained in the man page.
|
|
Revision tags: cjep_sun2x-base1 cjep_sun2x-base cjep_staticlib_x-base1 cjep_staticlib_x-base
|
| #
1.39 |
|
06-Apr-2021 |
riastradh |
Remove sentence that has not been true since netbsd-6.
ioctl(RNDADDDATA) is not the only way to raise the entropy estimate; privileged writes to /dev/random have the same effect.
|
| #
1.38 |
|
12-Feb-2021 |
riastradh |
rnd(4): Consistently call it the `global pool'.
The `ready pool' is a term I used in a draft that I never committed.
|
| #
1.37 |
|
15-Jan-2021 |
riastradh |
rnd(4): Fix formatting of authors paragraph with `.An -nosplit'.
|
| #
1.36 |
|
10-Jan-2021 |
riastradh |
Various entropy integration improvements.
- New /etc/security check for entropy in daily security report.
- New /etc/rc.d/entropy script runs (after random_seed and rndctl) to check for entropy at boot -- in rc.conf, you can:
. set `entropy=check' to halt multiuser boot and enter single-user mode if not enough entropy
. set `entropy=wait' to make multiuser boot wait until enough entropy
Default is to always boot without waiting -- and rely on other channels like security report to alert the operator if there's a problem.
- New man page entropy(7) discussing the higher-level concepts and system integration with cross-references.
- New paragraph in afterboot(8) about entropy citing entropy(7) for more details.
This change addresses many of the issues discussed in security/55659. This is a first draft; happy to take improvements to the man pages and scripted messages to improve clarity.
I considered changing motd to include an entropy warning with a reference to the entropy(7) man page, but it's a little trickier: - Not sure it's appropriate for all users to see at login rather than users who have power to affect the entropy estimate (maybe it is, just haven't decided). - We only have a mechanism for changing once at boot; the message would remain until next boot even if an operator adds enough entropy. - The mechanism isn't really conducive to making a message appear conditionally from boot to boot.
|
| #
1.35 |
|
06-May-2020 |
riastradh |
Update to reflect change to message.
|
| #
1.34 |
|
04-May-2020 |
wiz |
Break line after macro arguments end. Use \- for minus.
|
| #
1.33 |
|
01-May-2020 |
riastradh |
Combine some related paragraphs.
|
| #
1.32 |
|
01-May-2020 |
riastradh |
Tighten language so it fits in one paragraph again.
This way the first two paragraphs have parallel structure:
- _Applications_ should read from /dev/urandom or sysctl kern.arandom... - _Systems_ should be engineered to read once from /dev/random...
|
| #
1.31 |
|
01-May-2020 |
nia |
rnd.4: Bump dates.
|
| #
1.30 |
|
01-May-2020 |
nia |
rnd.4: Explain why libraries should use kern.arandom over /dev/urandom
|
| #
1.29 |
|
30-Apr-2020 |
riastradh |
Rewrite entropy subsystem.
Primary goals:
1. Use cryptography primitives designed and vetted by cryptographers. 2. Be honest about entropy estimation. 3. Propagate full entropy as soon as possible. 4. Simplify the APIs. 5. Reduce overhead of rnd_add_data and cprng_strong. 6. Reduce side channels of HWRNG data and human input sources. 7. Improve visibility of operation with sysctl and event counters.
Caveat: rngtest is no longer used generically for RND_TYPE_RNG rndsources. Hardware RNG devices should have hardware-specific health tests. For example, checking for two repeated 256-bit outputs works to detect AMD's 2019 RDRAND bug. Not all hardware RNGs are necessarily designed to produce exactly uniform output.
ENTROPY POOL
- A Keccak sponge, with test vectors, replaces the old LFSR/SHA-1 kludge as the cryptographic primitive.
- `Entropy depletion' is available for testing purposes with a sysctl knob kern.entropy.depletion; otherwise it is disabled, and once the system reaches full entropy it is assumed to stay there as far as modern cryptography is concerned.
- No `entropy estimation' based on sample values. Such `entropy estimation' is a contradiction in terms, dishonest to users, and a potential source of side channels. It is the responsibility of the driver author to study the entropy of the process that generates the samples.
- Per-CPU gathering pools avoid contention on a global queue.
- Entropy is occasionally consolidated into global pool -- as soon as it's ready, if we've never reached full entropy, and with a rate limit afterward. Operators can force consolidation now by running sysctl -w kern.entropy.consolidate=1.
- rndsink(9) API has been replaced by an epoch counter which changes whenever entropy is consolidated into the global pool. . Usage: Cache entropy_epoch() when you seed. If entropy_epoch() has changed when you're about to use whatever you seeded, reseed. . Epoch is never zero, so initialize cache to 0 if you want to reseed on first use. . Epoch is -1 iff we have never reached full entropy -- in other words, the old rnd_initial_entropy is (entropy_epoch() != -1) -- but it is better if you check for changes rather than for -1, so that if the system estimated its own entropy incorrectly, entropy consolidation has the opportunity to prevent future compromise.
- Sysctls and event counters provide operator visibility into what's happening: . kern.entropy.needed - bits of entropy short of full entropy . kern.entropy.pending - bits known to be pending in per-CPU pools, can be consolidated with sysctl -w kern.entropy.consolidate=1 . kern.entropy.epoch - number of times consolidation has happened, never 0, and -1 iff we have never reached full entropy
CPRNG_STRONG
- A cprng_strong instance is now a collection of per-CPU NIST Hash_DRBGs. There are only two in the system: user_cprng for /dev/urandom and sysctl kern.?random, and kern_cprng for kernel users which may need to operate in interrupt context up to IPL_VM.
(Calling cprng_strong in interrupt context does not strike me as a particularly good idea, so I added an event counter to see whether anything actually does.)
- Event counters provide operator visibility into when reseeding happens.
INTEL RDRAND/RDSEED, VIA C3 RNG (CPU_RNG)
- Unwired for now; will be rewired in a subsequent commit.
|
|
Revision tags: phil-wifi-20200421 phil-wifi-20200411 is-mlppp-base phil-wifi-20200406 phil-wifi-20191119
|
| #
1.28 |
|
04-Sep-2019 |
wiz |
New sentence, new line. Use \(em.
|
| #
1.27 |
|
04-Sep-2019 |
riastradh |
Update NIST SP800-90A reference.
|
| #
1.26 |
|
04-Sep-2019 |
riastradh |
Replace slightly wrong rant by shorter and slightly less long rant.
(If X and Y in Z/2Z are independent, then so are X and X+Y. What was I thinking.)
|
| #
1.25 |
|
04-Sep-2019 |
riastradh |
Update man page to reflect switch from CTR_DRBG to Hash_DRBG.
|
|
Revision tags: netbsd-9-0-RC1 netbsd-9-base phil-wifi-20190609 netbsd-8-1-RELEASE netbsd-8-1-RC1 pgoyette-compat-merge-20190127 pgoyette-compat-20190127 pgoyette-compat-20190118 pgoyette-compat-1226 pgoyette-compat-1126 pgoyette-compat-1020 pgoyette-compat-0930 pgoyette-compat-0906 pgoyette-compat-0728 netbsd-8-0-RELEASE phil-wifi-base pgoyette-compat-0625 netbsd-8-0-RC2 pgoyette-compat-0521 pgoyette-compat-0502 pgoyette-compat-0422 netbsd-8-0-RC1 pgoyette-compat-0415 pgoyette-compat-0407 pgoyette-compat-0330 pgoyette-compat-0322 pgoyette-compat-0315 pgoyette-compat-base matt-nb8-mediatek-base perseant-stdc-iso10646-base netbsd-8-base prg-localcount2-base3 prg-localcount2-base2 prg-localcount2-base1 prg-localcount2-base pgoyette-localcount-20170426 bouyer-socketcan-base1 pgoyette-localcount-20170320
|
| #
1.24 |
|
18-Jan-2017 |
abhinav |
branches: 1.24.4; 1.24.12; 1.24.14; Fix couple of typos: s/intractible/intractable s/contiuously/continuously
|
|
Revision tags: bouyer-socketcan-base pgoyette-localcount-20170107 pgoyette-localcount-20161104 localcount-20160914 pgoyette-localcount-20160806 pgoyette-localcount-20160726 pgoyette-localcount-base
|
| #
1.23 |
|
06-May-2016 |
riastradh |
branches: 1.23.2; 1.23.4; Correct rc.conf variable for random seed.
Note that it is enabled by default.
|
| #
1.22 |
|
13-Apr-2015 |
riastradh |
Update header file references in rnd man pages.
|
| #
1.21 |
|
07-Jan-2015 |
riastradh |
Rewrite /dev/random man page.
- Describe application usage up front. - State the security model. - Explain entropy. - Describe current implementation strategy near the bottom.
|
|
Revision tags: netbsd-7-base yamt-pagecache-base9 tls-earlyentropy-base riastradh-xf86-video-intel-2-7-1-pre-2-21-15 riastradh-drm2-base3 riastradh-drm2-base2 riastradh-drm2-base1 riastradh-drm2-base agc-symver-base yamt-pagecache-base8 yamt-pagecache-base7 yamt-pagecache-base6 tls-maxphys-base yamt-pagecache-base5
|
| #
1.20 |
|
17-Apr-2012 |
wiz |
branches: 1.20.10; New sentence, new line. Sort type descriptions. Bump date for previous.
|
| #
1.19 |
|
17-Apr-2012 |
tls |
Address multiple problems with rnd(4)/cprng(9):
1) Add a per-cpu CPRNG to handle short reads from /dev/urandom so that programs like perl don't drain the entropy pool dry by repeatedly opening, reading 4 bytes, closing.
2) Really fix the locking around reseeds and destroys.
3) Fix the opportunistic-reseed strategy so it actually works, reseeding existing RNGs once each (as they are used, so idle RNGs don't get reseeded) until the pool is half empty or newly full again.
|
|
Revision tags: yamt-pagecache-base4 netbsd-6-base
|
| #
1.18 |
|
17-Dec-2011 |
wiz |
branches: 1.18.2; New sentence, new line. Bump date for previous.
|
| #
1.17 |
|
17-Dec-2011 |
tls |
Separate /dev/random pseudodevice implemenation from kernel entropy pool implementation. Rewrite pseudodevice code to use cprng_strong(9).
The new pseudodevice is cloning, so each caller gets bits from a stream generated with its own key. Users of /dev/urandom get their generators keyed on a "best effort" basis -- the kernel will rekey generators whenever the entropy pool hits the high water mark -- while users of /dev/random get their generators rekeyed every time key-length bits are output.
The underlying cprng_strong API can use AES-256 or AES-128, but we use AES-128 because of concerns about related-key attacks on AES-256. This improves performance (and reduces entropy pool depletion) significantly for users of /dev/urandom but does cause users of /dev/random to rekey twice as often.
Also fixes various bugs (including some missing locking and a reseed-counter overflow in the CTR_DRBG code) found while testing this.
For long reads, this generator is approximately 20 times as fast as the old generator (dd with bs=64K yields 53MB/sec on 2Ghz Core2 instead of 2.5MB/sec) and also uses a separate mutex per instance so concurrency is greatly improved. For reads of typical key sizes for modern cryptosystems (16-32 bytes) performance is about the same as the old code: a little better for 32 bytes, a little worse for 16 bytes.
|
|
Revision tags: yamt-pagecache-base3 yamt-pagecache-base2 yamt-pagecache-base cherry-xenmp-base uebayasi-xip-base7 bouyer-quota2-nbase bouyer-quota2-base matt-mips64-premerge-20101231 uebayasi-xip-base6 uebayasi-xip-base5 uebayasi-xip-base4 uebayasi-xip-base3 uebayasi-xip-base2 uebayasi-xip-base1
|
| #
1.16 |
|
22-Mar-2010 |
joerg |
branches: 1.16.2; 1.16.8; Use .In instead of .Aq Pa for header files.
|
|
Revision tags: matt-premerge-20091211 jym-xensuspend-nbase jym-xensuspend-base
|
| #
1.15 |
|
15-Mar-2009 |
joerg |
Fix markup.
|
| #
1.14 |
|
22-Feb-2009 |
wiz |
New sentence, new line. Remove trailing whitespace.
|
| #
1.13 |
|
22-Feb-2009 |
plunky |
document the RNDGETPOOLSTAT ioctl.
|
|
Revision tags: netbsd-5-2-3-RELEASE netbsd-5-1-5-RELEASE netbsd-5-2-2-RELEASE netbsd-5-1-4-RELEASE netbsd-5-2-1-RELEASE netbsd-5-1-3-RELEASE netbsd-5-2-RELEASE netbsd-5-2-RC1 netbsd-5-1-2-RELEASE netbsd-5-1-1-RELEASE matt-nb5-mips64-premerge-20101231 matt-nb5-pq3-base netbsd-5-1-RELEASE netbsd-5-1-RC4 matt-nb5-mips64-k15 netbsd-5-1-RC3 netbsd-5-1-RC2 netbsd-5-1-RC1 netbsd-5-0-2-RELEASE matt-nb5-mips64-premerge-20091211 matt-nb5-mips64-u2-k2-k4-k7-k8-k9 matt-nb4-mips64-k7-u2a-k9b matt-nb5-mips64-u1-k1-k5 netbsd-5-0-1-RELEASE netbsd-5-0-RELEASE netbsd-5-0-RC4 netbsd-5-0-RC3 netbsd-5-0-RC2 netbsd-5-0-RC1 netbsd-5-base matt-mips64-base2 netbsd-4-0-1-RELEASE wrstuden-revivesa-base-3 wrstuden-revivesa-base-2 wrstuden-fixsa-newbase wrstuden-revivesa-base-1 yamt-pf42-base4 yamt-pf42-base3 hpcarm-cleanup-nbase yamt-pf42-baseX yamt-pf42-base2 wrstuden-revivesa-base yamt-pf42-base mjf-devfs2-base keiichi-mipv6-nbase keiichi-mipv6-base matt-armv6-nbase matt-armv6-prevmlocking wrstuden-fixsa-base-1 netbsd-4-0-RELEASE cube-autoconf-base netbsd-4-0-RC5 netbsd-4-0-RC4 netbsd-4-0-RC3 netbsd-4-0-RC2 netbsd-4-0-RC1 matt-armv6-base matt-mips64-base hpcarm-cleanup-base wrstuden-fixsa-base abandoned-netbsd-4-base netbsd-4-base chap-midi-nbase chap-midi-base
|
| #
1.12 |
|
26-Dec-2005 |
perry |
branches: 1.12.30; u_intN_t -> uintN_t
|
|
Revision tags: netbsd-3-1-1-RELEASE netbsd-3-0-3-RELEASE netbsd-3-1-RELEASE netbsd-3-0-2-RELEASE netbsd-3-1-RC4 netbsd-3-1-RC3 netbsd-3-1-RC2 netbsd-3-1-RC1 netbsd-3-0-1-RELEASE netbsd-3-0-RELEASE netbsd-3-0-RC6 netbsd-3-0-RC5 netbsd-3-0-RC4 netbsd-3-0-RC3 netbsd-3-0-RC2 netbsd-3-0-RC1 netbsd-2-0-3-RELEASE netbsd-2-1-RELEASE netbsd-2-1-RC6 netbsd-2-1-RC5 netbsd-2-1-RC4 netbsd-2-1-RC3 netbsd-2-1-RC2 netbsd-2-1-RC1 netbsd-2-0-2-RELEASE netbsd-3-base netbsd-2-0-1-RELEASE netbsd-2-base netbsd-2-0-RELEASE netbsd-2-0-RC5 netbsd-2-0-RC4 netbsd-2-0-RC3 netbsd-2-0-RC2 netbsd-2-0-RC1 netbsd-2-0-base fvdl_fs64_base
|
| #
1.11 |
|
20-Aug-2002 |
enami |
Mention RND_TYPE_RNG.
|
|
Revision tags: netbsd-1-6-PATCH002-RELEASE netbsd-1-6-PATCH002 netbsd-1-6-PATCH002-RC4 netbsd-1-6-PATCH002-RC3 netbsd-1-6-PATCH002-RC2 netbsd-1-6-PATCH002-RC1 netbsd-1-6-PATCH001 netbsd-1-6-PATCH001-RELEASE netbsd-1-6-PATCH001-RC3 netbsd-1-6-PATCH001-RC2 netbsd-1-6-PATCH001-RC1 netbsd-1-6-RELEASE netbsd-1-6-RC3 netbsd-1-6-RC2 netbsd-1-6-RC1 netbsd-1-6-base
|
| #
1.10 |
|
13-Feb-2002 |
ross |
Generate <>& symbolically. I'm avoiding .../dist/... directories for now.
|
| #
1.9 |
|
22-Sep-2001 |
wiz |
Sort SEE ALSO, and paragraph fixes.
|
| #
1.8 |
|
11-Sep-2001 |
wiz |
Use standard section headers; uppercase .Sh argument; remove quotes in .Sh arguments.
|
| #
1.7 |
|
11-Jun-2001 |
wiz |
Typos and whitespace fixes.
|
| #
1.6 |
|
05-Jul-2000 |
msaitoh |
remove extra period in SEE ALL section
|
|
Revision tags: netbsd-1-5-PATCH003 netbsd-1-5-PATCH002 netbsd-1-5-PATCH001 netbsd-1-5-RELEASE netbsd-1-5-BETA2 netbsd-1-5-BETA netbsd-1-4-PATCH003 netbsd-1-5-ALPHA2 netbsd-1-5-base minoura-xpg4dl-base netbsd-1-4-PATCH002 wrstuden-devbsize-19991221 wrstuden-devbsize-base comdex-fall-1999-base netbsd-1-4-PATCH001 netbsd-1-4-RELEASE netbsd-1-4-base
|
| #
1.5 |
|
16-Mar-1999 |
garbled |
More and more of .Os cleanups. .Os is defined in the tmac.doc-common file, so we shouldn't override it with versions in the manpages. Many more to come.
|
| #
1.4 |
|
28-Feb-1999 |
explorer |
Update to slightly altered rnd_attach_source() api
|
| #
1.3 |
|
04-Nov-1997 |
explorer |
add experimental warning
|
|
Revision tags: netbsd-1-3-base
|
| #
1.2 |
|
15-Oct-1997 |
is |
branches: 1.2.2; fix permissions
|
| #
1.1 |
|
15-Oct-1997 |
explorer |
add a man page for user-level code and a little about the random internals
|