Some of the newer chipsets from Intel and AMD have built-in hardware RNGs. IIRC, AMD's newest chips are getting them built into the CPU itself.

If you don't have one of those, it's quite easy to build one yourself. You need a resistor and some way to precisely measure its resistance and send the values into a serial or parrellel port. The method of choosing a resistor get's stood on its head from normal practices--older resistors with high tolerance values are better (more entropy), provided it still conducts electricity.

In the program that reads the data from the RNG, you want to throw away the first couple of decimal places (maybe down the the ten-thousandth place, maybe more, depending on your level of paranoia). Gather a few thousand bits (again, adjust for your level of paranoia, as more bits == higher entropy) and run it through an SHA1 sum. You now have 160 bits of high-quality random numbers.

You should be able to accomplish this in a user-space driver. On *nix systems, it would be preferable to put it right in the kernel in order to feed the bits into /dev/random.

----
I wanted to explore how Perl's closures can be manipulated, and ended up creating an object system by accident.
-- Schemer

Note: All code is untested, unless otherwise stated


In reply to Re: Cryptographic Random Numbers by hardburn
in thread Cryptographic Random Numbers by John M. Dlugosz

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.