// COMPLETE THREAD

Project: a standard cell random number generator

9 expanded posts ยท every known parent and child

NODE cdfea0fdProject: a standard cell random number generator
Software-generated random numbers are likely to be of poor quality.
There just isn't that much true randomness visible to computers.
Several ways to build good hardware random number generators are
known.  But before hardware random number generators can be
incorporated into common desktop computers, someone will have to put
them into a small fraction of a chip.

Currently, random number generators are chips or larger circuits.
Nobody will pay to put these on a motherboard.  But if a random number
generating circuit occupied 1/1000th of a CPU chip or "multi-function
I/O" chip, cost would not be a reason to leave it out.

You probably can't build a hardware random number generator out of
existing "gate array" gates or "standard cell" cells, because all the
existing gates and cells are designed to behave completely
predictably!  It will take designing a new circuit structure.

Do we know any solid state physics / circuit design experts who think
this might be a fun thing to do?  I bet you could get a paper out of
it.  And probably improve the world a few years later, when companies
used your paper to close another hole in their computer security.

	John

PS: It's possible that NSA collusion with chip-makers could produce
bad pseudo-random-number generators in popular chips, giving NSA a
back-door into any algorithm that used them.  This would be harder to
detect than poor software random number generators, since it requires
prying the lid off the chip, getting out your microscope, and
reverse-engineering the circuit, instead of just disassembling the
software.  In this sense, NSA ought to be *encouraging* Intel and
IBM and Motorola to put "generate random bits" instructions into
their instruction sets...
NODE 11699c4bRe: Project: a standard cell random number generator
John Gilmore writes:
> In this sense, NSA ought to be *encouraging* Intel and
> IBM and Motorola to put "generate random bits" instructions into
> their instruction sets...

Does Tessera include any form of hardware RNG ?

-Futplex <futplex@pseudonym.com>
NODE 03d4aa16Re: Project: a standard cell random number generator
> futplex@pseudonym.com (Futplex) writes:
> John Gilmore writes:
> > In this sense, NSA ought to be *encouraging* Intel and
> > IBM and Motorola to put "generate random bits" instructions into
> > their instruction sets...

> Does Tessera include any form of hardware RNG ?

Yes.  Here's a released CAPSTONE spec sheet.  I don't expect an attack like
the one on Netscape to work there.

	Jim Gillogly
	Sterday, 1 Winterfilth S.R. 1995, 11:07

------- Forwarded Message

Date: Fri, 30 Apr 93 10:11:03 EDT
From: Clipper Chip Announcement <clipper@csrc.ncsl.nist.gov>
Organization: National Institute of Standards and Technology (NIST)
Posted-Date: Fri, 30 Apr 93 10:11:03 EDT
Subject: Capstone Chip technology information


                    CAPSTONE CHIP TECHNOLOGY


CAPSTONE is an NSA developed, hardware oriented, cryptographic
device that implements the same cryptographic algorithm as the
CLIPPER chip.  In addition, the CAPSTONE chip includes the
following functions:

     1.   The Digital Signature Algorithm (DSA) proposed by NIST
          as a Federal Information Processing Standard (FIPS);

     2.   The Secure Hashing Algorithm (SHA) recently approved as
          FIPS 180;

     3.   A Key Exchange Algorithm based on a public key
          exchange;

     4.   A general purpose exponentiation algorithm;

     5.   A general purpose, random number generator which uses a
          pure noise source.

The Key exchange Algorithm is programmable on the chip and uses
functions 1-2 and 4-5 above.

Prototypes of the CAPSTONE chip are due the last week in April. 
The chips are expected to sell for $85.00 each (programmed).

The first CAPSTONE chips are to be installed in PCMCIA electronic
boards and used for the PMSP program for the security of the
Defense Messaging System.

The CAPSTONE chip is big, complex and powerful.  Over 850
megabytes are required by the automated design system to define
the functions of the chip.  VLSI Technology is fabricating the
chip, and MYKOTRONX is designing and testing the chip.
                                

1.   What are the power requirements of the CAPSTONE chip?  Will
     they fit the power requirements of battery-operated, hand
     held devices?

     The CAPSTONE chip requires a 5 volt DC voltage source. 
     Power ratings are currently estimated at 3.5 milliamps per
     MHz, i.e. at 10 Mhz and 5 volt DC, power consumed is 175
     milliwatts.  These estimates will be refined as data are
     taken into the actual chips.  In comparison, the CLIPPER
     chip consumes approximately 150 milliwatts at 5 volts DC and
     10 MHz.  As you can see, both chips fall within the power
     requirements of hand held, battery-operated devices.

2.   Will the CAPSTONE chip incorporate the key escrow features
     of the CLIPPER chip?

     Yes, it will.

3.   When will CAPSTONE be announced and available?

     Prototypes of the CAPSTONE chip are due the end of this
     month.  We ask that you contact the manufacturer, Mykotronx
     Inc., for further information concerning the timetable for
     availability of CAPSTONE.

4.   Is the Department of Defense working now to incorporate
     CAPSTONE in the Pre-message Security Protocol?

     Yes

5.   Will CAPSTONE meet the design requirements of a PCMCIA card
     that combines voice and/or data communications with
     encryption capabilities?

     Yes

6.   Will CAPSTONE use the Digital Signature Standard?  What kind
     of key management scheme will be employed in the CAPSTONE
     chip?  Will CAPSTONE allow the use of RSA public-key
     encryption in conjunction with, or as an alternative to, the
     DSS?  If RSA is implemented on the CAPSTONE chip, will the
     key escrow feature function?

     CAPSTONE implements the Digital Signature Algorithm (DSA),
     proposed by NIST as a Federal Information Processing
     Standard (FIPS), to perform the digital signature functions. 
     Key management is handled by an algorithm based on a public-
     key exchange technique.  The CAPSTONE chip does not
     implement RSA.


4/30/93



------- End of Forwarded Message
NODE 7d1623e8Re: Project: a standard cell random number generator
Jim Gillogly writes:
> > futplex@pseudonym.com (Futplex) writes:
> > Does Tessera include any form of hardware RNG ?
> 
> Yes.  Here's a released CAPSTONE spec sheet.

That probably means that this sort of thing *can* be made cost
effective on ordinary chips. Now we have to get Tim to lobby Intel to
put RNGs on the P7 chip :-)

Perry
NODE 35210734Re: Project: a standard cell random number generator
On this same track, I suggest that "/dev/random" devices for unix are
an excellent idea. Ted Tso did one for Linux that steals all the bits
of semi-random timing information it can. Such a driver has the
feature that it can be plugged into either a software pseudodriver or
a hardware device if one is available.

John Gilmore writes:
> Do we know any solid state physics / circuit design experts who think
> this might be a fun thing to do?  I bet you could get a paper out of
> it.  And probably improve the world a few years later, when companies
> used your paper to close another hole in their computer security.

There are companies that sell hardware RNGs -- Newbridge, for instance
-- but they charge an arm and a leg for them.

There is also a company that I got literature from that sells RS232
interfaceable radiation detectors, which I have thought about using
for this purpose, but they are also way too expensive.

As you say, what one really needs is something that fits in a small
section of a chip. Unfortunately, this stuff is very delicate analog
-- not the usual thing you find in standard cell -- and very easy to
screw up.

> PS: It's possible that NSA collusion with chip-makers could produce
> bad pseudo-random-number generators in popular chips, giving NSA a
> back-door into any algorithm that used them.  This would be harder to
> detect than poor software random number generators, since it requires
> prying the lid off the chip, getting out your microscope, and
> reverse-engineering the circuit, instead of just disassembling the
> software.  In this sense, NSA ought to be *encouraging* Intel and
> IBM and Motorola to put "generate random bits" instructions into
> their instruction sets...

An interesting concept!

Perry
NODE f752c7d9/dev/random for Linux
> 
> 
> On this same track, I suggest that "/dev/random" devices for unix are
> an excellent idea. Ted Tso did one for Linux that steals all the bits
> of semi-random timing information it can.
> 
Anyone know where I can find more information on this wonderful device?

-- 
Jeff Simmons                           jsimmons@goblin.punk.net
NODE 9e9763cbRe: /dev/random for Linux
Jeff Simmons writes:
> > On this same track, I suggest that "/dev/random" devices for unix are
> > an excellent idea. Ted Tso did one for Linux that steals all the bits
> > of semi-random timing information it can.
>
> Anyone know where I can find more information on this wonderful device?

I'd ask him. tytso@mit.edu. I've cc'ed him on the mail.

Perry
NODE 6d4a12faRe: /dev/random for Linux
> > On this same track, I suggest that "/dev/random" devices for unix are
   > > an excellent idea. Ted Tso did one for Linux that steals all the bits
   > > of semi-random timing information it can.
   >
   > Anyone know where I can find more information on this wonderful device?

I've just sent patches (versus the Linux 1.3.28 kernel) off to Linus.
There's a fairly long exposition at the beginning of
drivers/char/random.c which explain its theory of operation.

There are some things that I had wanted to do to make it better; for
example, not use MD5 in the inner bucket-mixing, but use a CRC-based
mixing algorithm that Colin had suggested; this should be much faster,
and since I'm using MD5 on the output side of the random number
generator, it should be good enough.  Also, at some point I want to add
code so that it can sample the Pentium instruction cycle clock register,
which will give us a much finer granularity clock with which to measure
events.

However, given the current interest in random number generators ---
thank you Netscape for providing such a wonderful object lession!  :-) ---
and keeping in mind the saying that the best is often the enemy of the
good, I've decided to make what I have available now, and worry about
improving it later.

In any case, here it is.  With any luck, it'll be included in the 1.3.29
Linux kernel; the idea is that application programs running under Linux
should be able to assume that /dev/random exists and that they can rely
on it.  Perhaps if enough free OS's do this, commercial OS vendors will
get shamed into providing /dev/random on their Unix systems.  Or better
yet, perhaps hardware vendors will decide it's worth including the $10
(if that) worth of parts necessary to have a real, hardware-based random
number generator in their machines.

If there are any representatives from such computer manufacturers,
please consider this a hint.  :-)

						- Ted

begin 644 patches.random.gz
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
/HJ\Z$-C_ %)CF>/=:P  
 
end
NODE 92690c14Random Number State
Some some ramblings on the RNG seeding issue, comments welcome.

I'm sort of in the position of Netscape in that I have an SSL library 
that needs good random numbers for both RSA key generation (soon DH)
and SSL sessions.
While most of the discussions have been how to generate random data, one 
solution I will probably follow is that when any 'semi-random' data is 
generated, make sure to save this for seed data the next time the
application starts.  I have faith in the RNG capabilites of my RNG (based 
on MD5) and my RAND_seed() routine only 'adds' to the RNG state (about 
1k's worth is kept).  I can continue to 'mix' the RNG state at any point in 
time.  My RND_seed() xors into the existing state, it does not overwrite.

Because my SSL/encryption library contains 'everything', I have the
ability to put calls to my RNG_seed() routine in places like when I 
decrypt a private key.  I can pass both the password (if the key was 
encrypted) and the private key 
into the RNG state (making sure any data that goes into the RNG state 
can not be determinied if a 'core' file is generated).
I will probably also put the time() into the RNG state whenever an 
SSL_connect or SSL_accept is made (I think I do already).  I may also put in 
select data that has been read from the remote host
While most of this data can be determined by watching 
network activity, if it is just a delta to the initial random 
state it is somewhat more useful.

The first time use 'x' runs the application they are made to 'generate' 
some reasonable random data.  For all subsequent executions of the 
program, any more semi (psuedo?) random data generated can be mixed in 
with the initial random data.  The profile of the usage of the 
application would end up determining the random data to use.

I feel it is a bit much to try to generate good random data every time 
an application is run.

I believe this is the type of aproach PGP uses (I have not looked at the 
code).

eric
PS  I also do some 'evil' things in that I load 'garbage' bytes from the 
    stack into my RNG state whenever the RNG is called.  It may not be 
    random, but I bet it is hard to determine from the outside the 
    running program :-)  It can only help :-).
--
Eric Young                  | Signature removed since it was generating
AARNet: eay@mincom.oz.au    | more followups than the message contents :-)