From: "Theodore Ts'o" <tytso@mit.edu>
To: Thomas Gleixner <tglx@linutronix.de>
Cc: Borislav Petkov <bp@alien8.de>, Ingo Molnar <mingo@kernel.org>,
Willy Tarreau <w@1wt.eu>,
Linus Torvalds <torvalds@linux-foundation.org>,
x86-ml <x86@kernel.org>, "Jason A. Donenfeld" <Jason@zx2c4.com>,
lkml <linux-kernel@vger.kernel.org>,
Peter Zijlstra <peterz@infradead.org>,
Nicholas Mc Guire <der.herr@hofr.at>
Subject: Re: early x86 unseeded randomness
Date: Tue, 15 Aug 2017 23:35:17 -0400 [thread overview]
Message-ID: <20170816033517.25pwmuleyrjrod26@thunk.org> (raw)
In-Reply-To: <alpine.DEB.2.20.1708151927520.2072@nanos>
On Tue, Aug 15, 2017 at 07:37:05PM +0200, Thomas Gleixner wrote:
> That exploits the fact that the CPU and caches run at a different non
> synchronized clock than the memory controller and therefore the execution
> time for both the wbinvd() and the memchr_inv() measured in TSC cycles is
> non constant and random enough for the early boot randomization.
Um, can we guarantee that is always true for all systems? Even, say,
for Silermont, Goldmont and Goldmont Plus (Intel's SOC designs) where
the memory may be located in the same chip package as the CPU/caches?
And even if this is true today, can we be sure that it will be true
for the forseeable future? Using multiple clocks takes more power, so
I would think that on a SOC there would be a strong pressure to use a
single oscillator for the whole package.
If we really want to do this, I'd much rather *not* have code calling
tsc_early_random(). We're better off having the code call
get_random_bytes() and/or get_random_u32(), and having these systems
use RDRAND if available, and if not, falling back to
tsc_early_random() and then mixing it with whatever unpredictability
we may have been able to gather so far if the CRNG hasn't been
initialized yet.
That way something like tsc_early_random() can help, but it can't make
things worse than what we have today (excepting the performance delay
caused by adding whatever random shite that we hope is enough to
introduce unpredictability to the TSC --- for which I still remain
very skeptical).
- Ted
P.S. As I recall hpa@ has talked to some Intel architects internally
about how much unpredictability we could really get, and how much of
it is just because there's complex state that we can't see (which if
we could see, might make it much more predictable), and as I recall
they didn't say anyhing definitively; but they were nervous. I'm
pretty sure that for Intel architects, the right answer from their
perspective is to use RDRAND, and not to play games with the TSC.
The other thing to note here is that because Intel has RDRAND, I'm
actually not that worried about Intel; all of the
drivers/char/random.c will mix in inputs from RDRAND or RDSEED if
available. I'm actually much more worried about architectures that
don't have a hardware random number generator (e.g., some ARM
subarchitectures and MIPS). So while you might be able to come up
with something that could work on x86, the real question is it safely
generalizable to other, non-x86 architectures. And that's where it
gets much more scary.
next prev parent reply other threads:[~2017-08-16 3:35 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-08-14 17:35 Borislav Petkov
2017-08-14 17:47 ` Linus Torvalds
2017-08-14 18:00 ` Borislav Petkov
2017-08-14 18:17 ` Linus Torvalds
2017-08-14 19:00 ` Borislav Petkov
2017-08-15 1:31 ` Theodore Ts'o
2017-08-15 6:44 ` Willy Tarreau
2017-08-15 7:42 ` Ingo Molnar
2017-08-15 8:01 ` Willy Tarreau
2017-08-15 8:05 ` Ingo Molnar
2017-08-15 12:09 ` Theodore Ts'o
2017-08-15 13:26 ` Willy Tarreau
2017-08-15 10:47 ` Thomas Gleixner
2017-08-15 13:45 ` Borislav Petkov
2017-08-15 13:48 ` Thomas Gleixner
2017-08-15 14:25 ` Theodore Ts'o
2017-08-15 14:42 ` Thomas Gleixner
2017-08-15 15:26 ` Borislav Petkov
2017-08-15 17:37 ` Thomas Gleixner
2017-08-16 3:35 ` Theodore Ts'o [this message]
2017-08-16 9:13 ` Thomas Gleixner
2017-08-16 9:56 ` Will Deacon
2017-08-16 3:21 ` Theodore Ts'o
2017-08-15 15:24 ` Borislav Petkov
2017-08-15 12:48 ` Michael Ellerman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170816033517.25pwmuleyrjrod26@thunk.org \
--to=tytso@mit.edu \
--cc=Jason@zx2c4.com \
--cc=bp@alien8.de \
--cc=der.herr@hofr.at \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=peterz@infradead.org \
--cc=tglx@linutronix.de \
--cc=torvalds@linux-foundation.org \
--cc=w@1wt.eu \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®