The True-Random Number Generator schematic

A project log for True-Random Number Generator

Modern security and cryptography call for a source of true-random numbers. This design creates them from thermal noise in a resistor.

Tom AndersonTom Anderson 04/10/2017 at 20:040 Comments

I have been learning EAGLE while drawing the schematic. I just bought a subscription using a 50% discount from being a (free) registered user. $50 a year. Not bad, worth a try.

Here is what I have been working on from the point of view of the analog design. The reference designators correspond to the schematic in the project description.

In my next iteration (coming soon!) the values for R16 and R17 are 100k. The noise from R16 and R17 is amplified by U1A and U1D. These two amplified signals are then subtracted from each other by U1C. This subtraction operation cancels out any external interference that might be picked up by R16 and R17. After subtraction, there is another gain stage, and then a comparator to make a bitstream. For more detail, the patent explains every component, if I recall correctly.

The op amps U1A and U1D need to be low-noise in order to prevent the op amp noise from overwhelming the resistor noise. I am using the OPA4134, which I have used before. The resistors are 0.1% thin film 0805 25ppm/degC. Good resistors are important for good cancellation. They also have nearly the same noise as an ideal resistor. This is unlike thick-film resistors, which have more noise than that.

This is an instrument-grade design that is not optimized for cost. The idea is to have a well-controlled circuit that is easy to measure. The goal is to be easy to show that the source of numbers is truly random thermal noise from the resistors. If I were to make a lot of these, perhaps there will be a reduced-cost version.

I have a spreadsheet with all the component value calculations and signal levels, and I will post something about that after I clean it up. I might turn it into a Python program or something.

The changes I am working on will enable the circuit to run off of a USB supply. At some point I will provide a USB interface to send the output to a computer. I could do this with an Arduino, but I might use something else.

The power supply design is coming out a little weird, because it turns out that people don't seem to use negative supplies very much these days. Negative-voltage low-dropout voltage regulators are expensive and uncommon. I am changing the design to use all positive supplies. Analog circuits without negative supplies are much harder to understand. No wonder EEs have trouble learning analog these days! I think I have figured out a way to draw the schematic so that it looks as simple as a bipolar design, but uses all positive supplies.

This has been a good way to learn EAGLE, because I am spending a lot of time editing the schematic and learning how things work. I am quite particular about both schematics and layout. They are finished when I can't find anything more that can be done to improve them, either electrically or otherwise. The main problem with EAGLE is that I think the libraries are ugly. The file format is beautiful XML, though, so I might port a better-looking library to it. Would that be procrastination? I you don't hear from me for a while, that would be 'yes!'