(Anyone else, is there a module that already does this?)
That misses two things: random data is not unique and random data is
scarce.
The thread started where someone else wanted a cheap way to generate
difficult to guess and unique session ids. It went on around how using a
random function doesn't provide uniqueness and eventually ended up where
we're at now (verified sequential IDs). Part of the issue is that the
output from a digest (SHA1, MD5) or random data is not unique and cannot
ever be expected to be. So if you want uniqueness, you should use
something that produces values without looping - like simple iteration.
You could use some other number series but that's just pointless since you
don't need to keep your session IDs secret and it will just confuse the
next person to look at the code. You also run out of numbers faster if you
{in|de}crement by more than 1.
A lot of other smarter people can tell you why random data is scarce. Just
accept it. /dev/urandom is not an infinite font of quality entropy. If you
use too much then you fall back to simpler algorithms that will enter into
loops which are highly non-random.
So what I said was keep some random data secret for a bit, use it for the
hashes and after a while get new random data. A malicious attacker can
attempt to brute-force your secret during the period that the secret is
still valid. Once the secret is invalidated then the attacker has to start
the key-space over again. This is like asking distributed.net to start
over every few minutes. While distributed.net would eventually make it's
way through vast keyspaces for a single secret, it can't keep up with
volataile secrets.
Josh
Simon Oliver <[EMAIL PROTECTED]>
05/07/2002 10:53 AM
To: [EMAIL PROTECTED]
cc: [EMAIL PROTECTED], [EMAIL PROTECTED]
Subject: Re: Cheap and unique
> [EMAIL PROTECTED] wrote:
> >digest source might be able to locate the bits just by trying a lot of
> >them. I would expire them after a while just to prevent that from
> >happening by stating that if there is a 15 minute session, new random
bits
> >are generated each five minutes.
I missed the start of this thread, but how about generating a new id (or
random bits) on every vists: on first connect client is assigned a session
id, on subsequent connects, previous id is verified and a new id is
generated and returned. This makes it even harder to crack.
--
Simon Oliver