<div dir="ltr"><br><br><div class="gmail_quote"><div dir="ltr">On Thu, Aug 9, 2018 at 9:23 AM Patrick Chkoreff <<a href="mailto:pc@fexl.com">pc@fexl.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Crowd Supply announces the availability of the Infinite Noise TRNG, for<br>
the low-low price of $35:<br>
<br>
<a href="https://www.crowdsupply.com/13-37/infinite-noise-trng" rel="noreferrer" target="_blank">https://www.crowdsupply.com/13-37/infinite-noise-trng</a><br>
<br>
(Includes slick video.)<br>
<br>
Someone's been listening to the Wayward Geek Bill Cox, who may soon be<br>
scoping out real estate in Deer Valley!<br></blockquote><div><br></div><div>This guy has my full support.  He did a great job on this hardware.  He even had it UL tested.  He sent me one for free, which is more that enough compensation for me :)  Anyone is welcome to freely clone any of my open-source projects (including open hardware), for fun and profit.  I also support OneRNG, but 1) this is better, and 2) more open-source TRNGs is a good thing.  Hopefully there will be enough folks out there buying both of these to encourage new versions in the future, as well as robust software support.</div><div><br></div><div>That said, here's a ridiculously simple TRNG architecture that you cant use, IIUC (highly unlikely: IANAL), due to a-holes patenting security:</div><div><br></div><div>Use a flawed ring-oscillator with an _even_ number of inverters (actually you want 4*n + 2 inverters).  Useless, right?  Now take two inverters at opposite sides of the ring, and turn them into 2-input NAND gates, which creates 2 enable inputs, which you tie together.  When enable is low, the ring is stable, with the other NAND-gate inputs being high.  When enable goes high, two edges chase each other around the ring until they collide and annihilate each other.  Count how many times an edge goes around the ring and wait for the counter to be stable.  The low bits of the counter are generally reasonably random.  The counter values form a Poisson distribution when noise in the ring is consistent, which your health-checker should verify before using the TRNG output.</div><div><br></div><div>The criteria I look for in a good TRNG architecture include:</div><div><br></div><div>- Freely available design (open-source), without IP ownership issues.</div><div>- Clean physical model, enabling good health-checking</div><div>- Continues working well over changes in process, temperature, voltage, age, etc</div><div>- Resistant to radio and supply voltage attacks</div><div>- Difficult to screw up</div><div>- Cheap, even if that makes it run slowly: we only need 256 bits of entropy to seed a CPRNG</div><div><br></div><div>This simple almost-ring-oscillator checks all the boxes, except the first and most important one.  One day, this architecture will be free for all to use, and at that time, I'll start recommending it.  Until then, at least for a USB form-factor, I recommend this guy's new Infinite Noise TRNG.  It checks all the boxes.</div><div><br></div><div>Bill</div></div></div>