All of lore.kernel.org
 help / color / mirror / Atom feed
From: Steve Grubb <sgrubb@redhat.com>
To: Neil Horman <nhorman@redhat.com>
Cc: "Ted Ts'o" <tytso@mit.edu>, Jarod Wilson <jarod@redhat.com>,
	Sasha Levin <levinsasha928@gmail.com>,
	linux-crypto@vger.kernel.org, Matt Mackall <mpm@selenic.com>,
	Herbert Xu <herbert.xu@redhat.com>,
	Stephan Mueller <stephan.mueller@atsec.com>,
	lkml <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] random: add blocking facility to urandom
Date: Wed, 7 Sep 2011 16:48:57 -0400	[thread overview]
Message-ID: <201109071648.58015.sgrubb@redhat.com> (raw)
In-Reply-To: <20110907203305.GD24703@hmsreliant.think-freely.org>

On Wednesday, September 07, 2011 04:33:05 PM Neil Horman wrote:
> On Wed, Sep 07, 2011 at 04:02:24PM -0400, Steve Grubb wrote:
> > On Wednesday, September 07, 2011 03:27:37 PM Ted Ts'o wrote:
> > > On Wed, Sep 07, 2011 at 02:26:35PM -0400, Jarod Wilson wrote:
> > > > We're looking for a generic solution here that doesn't require
> > > > re-educating every single piece of userspace. And anything done in
> > > > userspace is going to be full of possible holes -- there needs to be
> > > > something in place that actually *enforces* the policy, and
> > > > centralized accounting/tracking, lest you wind up with multiple
> > > > processes racing to grab the entropy.
> > > 
> > > Yeah, but there are userspace programs that depend on urandom not
> > > blocking... so your proposed change would break them.
> > 
> > The only time this kicks in is when a system is under attack. If you have
> > set this and the system is running as normal, you will never notice it
> > even there. Almost all uses of urandom grab 4 bytes and seed openssl or
> > libgcrypt or nss. It then uses those libraries. There are the odd cases
> > where something uses urandom to generate a key or otherwise grab a chunk
> > of bytes, but these are still small reads in the scheme of
> 
> Theres no way you can guarantee that.  A quick lsof on my system here shows
> 27 unique pids that are holding /dev/urandom open, and while they may all
> be small reads, taken in aggregate, I can imagine that they could pull a
> significant amount of entropy out of /dev/urandom.

These are likely for reseeding purposes. Even openssl/libgcrypt/nss need reseeding.


> > things. Can you think of any legitimate use of urandom that grabs 100K or
> > 1M from urandom? Even those numbers still won't hit the sysctl on a
> > normally function system.
> 
> How can you be sure of that?  This seems to make assumptions about both the
> rate at which entropy is drained from /dev/urandom and the limit at which
> you will start blocking, neither of which you can be sure of.

You can try Jarod's patch for a day or two and see if it affects your system.

 
> > When a system is underattack, do you really want to be using a PRNG for
> > anything like
> 
> How can you be sure that this only happens when a system is under some sort
> of attack.  /dev/urandom is there for user space to use, and we can't make
> assumptions as to how it will get drawn from.  What if someone was running
> some monte-carlo based test program?  That could completely exhaust the
> entropy in /dev/urandom and would be perfectly legitimate.

I doubt a Monte-Carlo simulation will be done in a high security setting where they 
also depend entirely on a PRNG. 
 
> > seeding openssl? Because a PRNG is what urandom degrades into when its
> > attacked. If enough bytes are read that an attacker can guess the
> > internal state of the RNG, do you really want it seeding a openssh
> > session? At that point you really need it to stop momentarily until it
> > gets fresh entropy so the internal state is unknown. That's what this is
> > really about.
> 
> I never really want my ssh session to be be seeded with non-random data. 
> Of course, in my mind thats an argument for making ssh use /dev/random
> rather than /dev/urandom, but I'm willing to take the tradeoff in speed
> most of the time.

Bingo! You hit the problem. In some of our tests, it was shown that it takes 4 minutes 
to establish a connection when using random. So, if the system is under attack, the 
seeding of openssh will be based on the output of a RNG where the attacker might be 
able to guess the internal state. This is a problem we have right now. It not 
theoretical. The best solution is Jarod's patch because any other solution will 
require teaching all of user space about the new RNG and dressing it up for FIPS-140. 
At that point, what's the difference?

-Steve

  reply	other threads:[~2011-09-07 20:49 UTC|newest]

Thread overview: 62+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-09-02 14:37 [PATCH] random: add blocking facility to urandom Jarod Wilson
2011-09-05  2:36 ` Sandy Harris
2011-09-06 14:09   ` Stephan Mueller
2011-09-07 17:38 ` Jarod Wilson
2011-09-07 18:12   ` Sasha Levin
2011-09-07 18:26     ` Jarod Wilson
2011-09-07 19:05       ` Sasha Levin
2011-09-07 19:30         ` Jarod Wilson
2011-09-07 20:00           ` Sasha Levin
2011-09-07 19:35         ` Neil Horman
2011-09-07 19:27       ` Ted Ts'o
2011-09-07 19:36         ` Jarod Wilson
2011-09-07 19:36           ` Jarod Wilson
2011-09-08  2:43           ` Sandy Harris
2011-09-07 19:49         ` David Miller
2011-09-07 20:02         ` Steve Grubb
2011-09-07 20:23           ` Sasha Levin
2011-09-07 20:30             ` Steve Grubb
2011-09-07 20:37               ` Sasha Levin
2011-09-07 20:56                 ` Steve Grubb
2011-09-07 21:10                   ` Sasha Levin
2011-09-07 21:28                     ` Steve Grubb
2011-09-07 21:38                       ` Sasha Levin
2011-09-07 21:35                     ` Jarod Wilson
2011-09-07 21:43                       ` Steve Grubb
2011-09-07 22:46                         ` Sven-Haegar Koch
2011-09-08  7:21                         ` Sasha Levin
2011-09-07 23:57                   ` Neil Horman
2011-09-08  6:41                     ` Tomas Mraz
2011-09-08 12:52                       ` Neil Horman
2011-09-08 13:11                         ` Steve Grubb
2011-09-08 13:49                           ` Neil Horman
2011-09-09  2:21                           ` Sandy Harris
2011-09-09 13:04                             ` Steve Grubb
2011-09-09 16:25                               ` Ted Ts'o
2011-09-09 21:27                               ` Thomas Gleixner
2011-09-12 13:56                                 ` Jarod Wilson
2011-09-13 10:58                                   ` Peter Zijlstra
2011-09-13 12:18                                     ` Jarod Wilson
2011-09-11  2:05                             ` Valdis.Kletnieks
2011-09-12 13:55                               ` Jarod Wilson
2011-09-12 16:58                                 ` Valdis.Kletnieks
2011-09-12 18:26                                   ` Jarod Wilson
2011-09-07 20:33           ` Neil Horman
2011-09-07 20:48             ` Steve Grubb [this message]
2011-09-07 21:18           ` Ted Ts'o
2011-09-07 21:27             ` Stephan Mueller
2011-09-07 21:27               ` Stephan Mueller
2011-09-07 21:38               ` Ted Ts'o
2011-09-08  8:44               ` Christoph Hellwig
2011-09-08 11:48                 ` Steve Grubb
2011-09-08 16:13                   ` David Miller
2011-09-09 19:08                     ` Eric Paris
2011-09-09 19:12                       ` Neil Horman
2011-09-08  8:42             ` Christoph Hellwig
2011-09-08  8:42               ` Christoph Hellwig
2011-09-07 21:20           ` Nikos Mavrogiannopoulos
2011-09-08  8:41           ` Christoph Hellwig
2011-09-12 14:02         ` Jarod Wilson
2011-09-12 14:02           ` Jarod Wilson
2011-09-12 14:58           ` Neil Horman
2011-09-12 17:06           ` Mark Brown

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=201109071648.58015.sgrubb@redhat.com \
    --to=sgrubb@redhat.com \
    --cc=herbert.xu@redhat.com \
    --cc=jarod@redhat.com \
    --cc=levinsasha928@gmail.com \
    --cc=linux-crypto@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mpm@selenic.com \
    --cc=nhorman@redhat.com \
    --cc=stephan.mueller@atsec.com \
    --cc=tytso@mit.edu \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.