Hey Jonathan. :-) Thanks for the really detailed reply. I'll reply
inline.
On Fri Dec 31 15:04:17 2010, JAWNSY wrote:
Show quoted text> Anyway, I thought Bob's main idea here was to get users to provide the
> seed (and I suppose deal with repeating it or whatever else themselves
> if they so desire).
That's true. Of course, in this case, Math::Random::ISAAC and
Math::Random::ISAAC::XS are the parts that contain the array expansion
for the seed, so what we do with that is up to us.
Show quoted text> Personally, if using this for anything more serious,
> you should be seeding with as much truly random data as possible,
> hopefully so you don't need to repeat any part of your seed.
Actually, although that sounds simple and true at first, in fact it's
not. There is a limited amount of truly random data available from all
of the truly-random data sources on any given system (for example, on
all *nix-like systems, /dev/urandom or /dev/random). So if you continue
to read a lot of data from them, you actually decrease the amount of
randomness available in them and force them to fall back on their
internal PRNG, meaning that not only your application is less secure,
but so is every application on the system. In fact, what one should be
doing when seeding is reading a seed of a reasonable size to prevent
discovery by brute force (unless there are other considerations specific
to the algorithm you're using, which for ISAAC, there aren't).
Bob actually has a great little informative page on his site that
describes the amount of time required to brute force data of various
sizes:
http://burtleburtle.net/bob/crypto/magnitude.html#brute
Which demonstrates that a 256-bit key is probably good enough forever,
and if you take into account Moore's Law, then a 512-bit key is probably
good enough for the next 1000 years.
Show quoted text> I'm not a security expert by any means. Mostly I'm just curious why
Bob
Show quoted text> hasn't updated his reference implementation to incorporate these
> changes, or at least leave a note similar to the information he gave
you.
My understanding of Bob's viewpoint, from his emails and his website,
is that ISAAC is a published math paper, and the reference
implementation is the accompanying attachment to that published paper.
So it's not something that can change, for him. Also, the challenge on
his website depends on the reference implementation working exactly as
it does now, so he may not want to change that.
Show quoted text> I'll look into this; though given that this stuff "works" for now,
this
Show quoted text> doesn't seem like a very critical fix -- everything here works as one
> would expect it, given Bob's reference implementation. It's much more
> likely for me to integrate these changes if I get a patch of some sort
> against both of these (and of course the accompanying tests).
Yeah, I agree, it's not critical. Just thought it would be nice to
make the seed even more secure if possible. :-)
Show quoted text> My code is currently moved to Github, and I also plan to move all of
> these things to using Dist::Zilla at some point in the future.
Currently
Show quoted text> all of my commitments with Debian and $paid_work have been keeping me
> pretty busy though :-(
Ahh, okay. Well, if I have some time or some inclination to do it, I'd
be happy to convert the distros to Dist::Zilla and provide this patch,
although my C skills are a little rusty and would make updating the XS
part take longer than updating the Perl part. (I could still do it,
though.) Thanks for the github links! :-) I don't see a likely point in
the future at which I'd get to it, but perhaps we could leave this bug
open for anybody else who comes along and might want to do it, or one of
us if we get to it at some point.