Re: Lightweight support for instruction RNGs
Thor Lancelot Simon <[email protected]> Sun, 20 Dec 2015 19:19:44 -0500
| Newsgroups | gmane.os.netbsd.ports.x86-64,gmane.os.netbsd.devel.kernel,gmane.os.netbsd.devel.crypto,gmane.os.netbsd.ports.i386,gmane.os.netbsd.devel.security |
|---|---|
| Message-ID | <[email protected]> |
On Mon, Dec 21, 2015 at 12:06:38AM +0000, Taylor R Campbell wrote: > > This is an API concern. It sounds like the operative difference of > the cpu_rng API from the rndsource API is that the cpu_rng API is > optimized for callback-only entropy sources which never sleep for I/O > or require any inter-CPU communication. E.g., it sounds like > bcmrng(4) would satisfy this contract too. Looked at from that point of view, the Octeon RNG (which just reads an I/O register that's actually local to the CPU) is close enough too. I do not think you will ever encounter a CPU that has more than one onboard entropy source (RDRAND and RDSEED are just two different ways to read from the same source); so I do think that a simple, MI cpu_rng wrapper is a good abstraction to have. If you're going to slim down and speed up the rndsource implementation, we can probably use a single, clean, little driver to hook any port's cpu_rng up to it, and all done. Does that make sense to you? Keccak would be a lot better than the current rndpool mess, and per-CPU pools better than one global pool, so long as we avoid some of the pain Linux bought that way. Thor