[Daniel Shahaf]
> Something tells me that when a cryptographic protocol calls for
> random numbers then a quasiconstant or known value wouldn't do
> instead.  It might still provide some security guarantees but I
> wouldn't assume it would provide all guarantees of the
> correctly-executed protocol.

It doesn't call for random numbers.  It calls for a nonce.  The nonce
is not secret - it is passed in plaintext to the client - it just has
to be different every time, to prevent replay.  Given the nature of
cryptographic hashes, it doesn't even have to be _very_ different to be
useless to an attacker.  To attack the challenge in CRAM, you have to
attack _two_ checksums, outer and then inner.  Even one bit of entropy
scrambles the inner checksum, and _that_ scrambles the outer.

apr_time_now() has microsecond resolution.  There's no way a single
svnserve process will handle two connections in the same microsecond.
(I note that even at gigabit speeds, two adjacent network packets will
be about a microsecond apart.)

That leaves multiple processes calling apr_time_now in the same
microsecond.  So I think I'll add a getpid() in there somewhere.
(The Debian patch, I mean.  Probably not useful here.)

> > Would some other simple fix (e.g., calling
> > "lrand48") make sense and be generally useful?

Well, rand() and friends have to be seeded _somehow_, usually from time
of day, so that doesn't seem much better than apr_time_now().

> No objection here, but doesn't APR already use lrand48() if it's available?

If that's true, we shouldn't even be having this conversation at all.
The problem is that /dev/random was being exhausted.
-- 
Peter Samuelson | org-tld!p12n!peter | http://p12n.org/

Reply via email to