<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Mon, Sep 29, 2014 at 4:43 PM, Paul Campbell <span dir="ltr"><<a href="mailto:paul@taniwha.com" target="_blank">paul@taniwha.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">I guess my main argument here was mostly practical - I'm not sure how you can<br>
spice this if you are depending on  'spice-noise' as your random source -<br>
that's sort of the place in spice where you throw your hands in the air<br>
knowing it's not real :-)  ... </blockquote><div><br></div><div>Actually, I trust my Python and C simulations rather than spice to confirm he concept, and these simulations worked out nicely, though the code is still hackish.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">really I think you need to breadboard it and<br>
get some samples working (you may already have, I just couldn't see it in your<br>
web pages) - </blockquote><div><br></div><div>I've been trying to bread-board it.  The freaking surface mount parts are holding me back at the moment.  I've got a $100 purchase of Digikey parts mounted on Proto Advantage adapters, but it's expensive and slow!<br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">if you need help finding cheap and easy ways to build prototype<br>
boards I can help point you at cheap stuff in China - or we could spin a<br>
version of my board with your RNG on it as a proof-of-concept.<br></blockquote><div><br></div><div>I would love to know how to get stuff built cheaply!  Please let me know.  I was about to start Googling Arduino projects to see if I could find out what's the best way now days.<br><br></div><div>I built a zener-noise TRNG back in 1998, with reverse Vbe breakdown of a 2N2222, and fed it into a 40MHz 8-bit A/D converter, and used a Lattice FPGA to whiten the output.  The A/D converter was my first ever experience with surface mount parts, and I've mostly given up on prototyping since.<br><br></div><div>I would be very happy to work with you on a proof-of-concept built on your board.  That would be awesome.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
BTW: as a sometime logic designer (I'm a verilog monkey,  used to build CPUs<br>
and graphics engines, I'm not really a gate designer) I'm also a bit leery of<br>
your 'cmos' implementation - basically analog in a cmos process is usually a<br>
bad idea - you're likely to get supply rail noise from  partly turned on gates<br>
dominating your shot noise. where are your caps? externally? if so you<br>
probably need to also model pin inductance ....<br></blockquote><div><br></div><div>This was designed for Triad Semiconductor's 0.35u mixed signal ASICs.  They have capacitor arrays and transistor arrays, and the whole thing is configured with one via layer.  I think the mixed-signal ASIC guys in general would disagree that analog in CMOS is a bad idea... however, it is in an analog process.<br></div><div><br></div><div>Noise is good.  Power supply noise, shot noise, 1/f noise, thermal noise, and even Mallory's external RF signal injection are all welcome!  They all get mashed together and add to entropy, rather than overriding it.  That's what happens when we amplify with modular multiplication rather than saturating multiplication.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
Over and above that the cost of providing a fast USB interface kind of<br>
dominates everything else - we're building a dual RNG system based on a cheap<br>
TI USB-zigbee chip that gives us RF noise (LSBs of data sniffed from a random<br>
freq hopping RF source) and an avalanche source - the RF source is more random<br>
than the avalanche source, largely because the analog avalanche source is<br>
being sampled in the analog domain and getting a perfect sample means choosing<br>
a sampling point and that likely means hand tweaking resistors in the<br>
manufacturing process - instead we just accept that we get 7.5 bits of<br>
entropy/byte and 'whiten' it through a CRC.<br></blockquote><div><br></div><div>That's the right approach, IMO.  Just feed unpredictable state into your entropy pool and generate as much data from it as you need.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
You can't get around having an RF shield here, even if you have a design<br>
that's immune to external signals you don't want other people to be able to<br>
sniff your data (one downside of your initial design BTW is that the sampling<br>
clock is visible - if you're sampling random analog data inside a chip  and<br>
encouraging a little bit of metastability in the process I think you're better<br>
off).<br></blockquote><div><br></div><div>Hmm... I hadn't thought of using an RF shield to keep my noise *in*.  Good point.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Besides that these designs are not ones one normally builds, after years<br>
of building stuff to discourage noise actually making it on purpose, and then<br>
trying to contain it means that you are by definition going to have FCC issues<br>
- I think you need an RF shield no matter what you do.<br></blockquote></div><br></div><div class="gmail_extra">I agree.  I'll need to keep the EMI where it belongs - on the inside of the USB stick.  By the way, while I may need to tweak the design after playing with real hardware, the architecture will work.  Here's the unfinished list of parts with their cost that I have so far:<br><br>



        
        
        
        
        
        



<table border="0" cellspacing="0">
        <colgroup width="165"></colgroup>
        <colgroup span="4" width="85"></colgroup>
        <tbody><tr>
                <td align="left" height="17">Quad analog switch</td>
                <td align="right">1.3566</td>
                <td align="right">1000</td>
                <td align="right">1</td>
                <td align="right">1.3566</td>
        </tr>
        <tr>
                <td align="left" height="17">Quad op-amp</td>
                <td align="right">1.8</td>
                <td align="right">1000</td>
                <td align="right">1</td>
                <td align="right">1.8</td>
        </tr>
        <tr>
                <td align="left" height="17">384-LUT FPGA</td>
                <td align="right">$1.31</td>
                <td align="right">1000</td>
                <td align="right">1</td>
                <td align="right">$1.31</td>
        </tr>
        <tr>
                <td align="left" height="17">USB interface IC</td>
                <td align="right">$1.58</td>
                <td align="right">1000</td>
                <td align="right">1</td>
                <td align="right">$1.58</td>
        </tr>
        <tr>
                <td align="left" height="17">.1uF bypass cap</td>
                <td align="right">0.0405</td>
                <td align="right">1000</td>
                <td align="right">1</td>
                <td align="right">0.0405</td>
        </tr>
        <tr>
                <td align="left" height="17">100pF chip cap</td>
                <td align="right">0.022</td>
                <td align="right">1000</td>
                <td align="right">2</td>
                <td align="right">0.044</td>
        </tr>
        <tr>
                <td align="left" height="17">120 Ohm 5% resistor</td>
                <td align="right">0.01566</td>
                <td align="right">1000</td>
                <td align="right">2</td>
                <td align="right">0.03132</td>
        </tr>
        <tr>
                <td align="left" height="17">Quad 8.2K 5% resistors</td>
                <td align="right">0.01568</td>
                <td align="right">1000</td>
                <td align="right">1</td>
                <td align="right">0.01568</td>
        </tr>
        <tr>
                <td align="left" height="17">Quad 10K 5% resistors</td>
                <td align="right">0.01568</td>
                <td align="right">1000</td>
                <td align="right">1</td>
                <td align="right">0.01568</td>
        </tr>
        <tr>
                <td align="left" height="17"><br></td>
                <td align="left"><br></td>
                <td align="left"><br></td>
                <td align="left"><br></td>
                <td align="right">6.18878</td>
        </tr>
</tbody></table>



<br>I'm checking this file and an infnoise.parlist file under git on github, so it's all available if you want to check it out.  I just found a nice quad op-amp from TI for this project this morning, so it's quite early in the process.  These are Digikey prices in 1,000 unit volumes.  This is all in the infnoise.partlist file.  I still need a connector, some more cheap passives and fuse for the USB interface, housing with shielding, and I have no idea what PCB and assembly cost are now days.  I also don't know if I'm shooting myself in the foot trying to use 4-resistor chips vs having place/route flexibility going with singles.  I'm really more of an IC guy than a board-level guy.<br></div><div class="gmail_extra"><br></div><div class="gmail_extra">Bill<br></div></div>