linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Re: TPMs and random numbers
@ 2013-09-11 17:22 David Safford
  2013-09-11 17:49 ` Andy Lutomirski
  0 siblings, 1 reply; 20+ messages in thread
From: David Safford @ 2013-09-11 17:22 UTC (permalink / raw)
  To: Andy Lutomirski
  Cc: H. Peter Anvin, Leonidas Da Silva Barbosa, Ashley Lai,
	Rajiv Andrade, Marcel Selhorst, Sirrix AG,
	Linux Kernel Mailing List, Jeff Garzik, Ted Ts'o, Kent Yoder,
	David Safford, Mimi Zohar, Johnston, DJ

>On 09/09/2013 02:11 PM, H. Peter Anvin wrote:
>> It recently came to my attention that there are no standards whatsoever
>> for random number generated by TPMs.  In fact, there *are* TPMs where
>> random numbers are generated by an encrypted nonvolatile counter (I do
>> not know which ones); this is apparently considered acceptable for the
>> uses of random numbers that TPMs produce.

The TPM specifications have extensive RNG requirements, and most 
major vendors do certify their RNG implementations to FIPS 140-2.
The current 1.2 spec has three pages of detailed RNG requirements. 
Even the earliest spec (1.1b from 2002) required FIPS 140-1 
compliant power-on self tests of the RNG, and since 2006 the specs 
have required full FIPS 140-2 RNG compliance for FIPS mode.

Back when TPMs were first added to Thinkpads, I did extensive 
testing of TPM RNG outputs, including start up entropy, and found
them to be an excellent source. There may well be bad TPMs out 
there (I've heard rumors too), but I haven't run into one.

>> There are two issues with this from a Linux point of view.  One, we
>> harvest supposed entropy from the TPM for /dev/*random use via
>> /dev/hwrng and rngd.  This was something I originally proposed because
>> on a lot of platforms it is the only available entropy source with any
>> significant bandwidth.  However, in light of the above it is
>> questionable at best, at least with entropy being credited.
>
>Presumably the "entropy" should be mixed in but not credited to the
>available entropy.
>
>> The other issue is that we use tpm_get_random() *directly* in
>> security/keys/trusted.c.
>
>I don't know whether this makes sense, but all but one call seem to be
>related to TPM transactions -- breaking the TPM's RNG won't have any
>effects beyond, say, breaking the TPM's SRK.
>
>The one that looks dangerous is the one just under case Opt_new: it's
>using tpm_get_random to create an encryption key *that's used by the
>kernel for software crypto*.  That's IMO bogus.
>
>--Andy

Conversely, other /dev/random sources can be slow to build entropy,
particularly in embedded systems (see
https://www.usenix.org/system/files/conference/usenixsecurity12/sec12-final228.pdf)

As author of trusted.c, I think that there are advantages and
disadvantages to the different random sources. Trusted keys
already depend on the quality of TPM private keys generated
from the TPM RNG, so trusting the same RNG for symmetric key
generation seems reasonable. Several embedded systems I have 
looked at are _really_ bad at gathering entropy, so the TPM, 
seems a reasonably safe and convenient default. 

dave


^ permalink raw reply	[flat|nested] 20+ messages in thread
* TPMs and random numbers
@ 2013-09-09 21:11 H. Peter Anvin
  2013-09-11  1:50 ` Andy Lutomirski
  0 siblings, 1 reply; 20+ messages in thread
From: H. Peter Anvin @ 2013-09-09 21:11 UTC (permalink / raw)
  To: Leonidas Da Silva Barbosa, Ashley Lai, Rajiv Andrade,
	Marcel Selhorst, Sirrix AG, Linux Kernel Mailing List,
	Jeff Garzik, Ted Ts'o, Kent Yoder, David Safford, Mimi Zohar,
	Johnston, DJ

It recently came to my attention that there are no standards whatsoever
for random number generated by TPMs.  In fact, there *are* TPMs where
random numbers are generated by an encrypted nonvolatile counter (I do
not know which ones); this is apparently considered acceptable for the
uses of random numbers that TPMs produce.

There are two issues with this from a Linux point of view.  One, we
harvest supposed entropy from the TPM for /dev/*random use via
/dev/hwrng and rngd.  This was something I originally proposed because
on a lot of platforms it is the only available entropy source with any
significant bandwidth.  However, in light of the above it is
questionable at best, at least with entropy being credited.

The other issue is that we use tpm_get_random() *directly* in
security/keys/trusted.c.

I don't know what the policy ought to be, but I suspect we should ask
the question.

	-hpa

^ permalink raw reply	[flat|nested] 20+ messages in thread

end of thread, other threads:[~2013-09-13  3:57 UTC | newest]

Thread overview: 20+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-09-11 17:22 TPMs and random numbers David Safford
2013-09-11 17:49 ` Andy Lutomirski
2013-09-11 18:45   ` Theodore Ts'o
2013-09-11 19:06     ` Jeff Garzik
2013-09-11 19:08       ` Andy Lutomirski
2013-09-11 19:25         ` H. Peter Anvin
2013-09-11 20:28           ` Theodore Ts'o
2013-09-11 20:44             ` H. Peter Anvin
2013-09-11 18:47   ` David Safford
2013-09-12 21:57     ` Jörn Engel
2013-09-12 23:38       ` Andy Lutomirski
2013-09-12 23:39       ` Jeff Garzik
2013-09-12 22:13         ` Jörn Engel
2013-09-12 23:51           ` Andy Lutomirski
2013-09-12 22:23             ` Jörn Engel
2013-09-13  2:13               ` Theodore Ts'o
2013-09-13  2:22                 ` Jörn Engel
2013-09-11 22:08   ` Johnston, DJ
  -- strict thread matches above, loose matches on Subject: below --
2013-09-09 21:11 H. Peter Anvin
2013-09-11  1:50 ` Andy Lutomirski

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).