On 11 December 2014 at 21:43, Theo de Raadt <dera...@cvs.openbsd.org> wrote:
>
> > On 12 Dec 2014, at 5:02, Theo de Raadt wrote:
> >
> > > In all of these code blocks are a well-known piece of information
> > > (same time on your machine as everywhere else) is being used to seed a
> > > deterministic number generator.
> > >
> > > At some later point, deterministic numbers are taken out using rand(),
> > > random(), drand48(), lrand48(), mrand48(), or srand48(), or some
> > > derivative function inside the program itself, and used for WHO KNOWS
> > > WHAT PURPOSE.
> > >
> > > I did not audit what the numbers are being used for.
> > >
> > > Quite likely some numbers are just used to help hashing.  Some could
> > > be used to print pretty pictures.  But in xulrunner?  In the zip
> > > password
> > > creator? In postgresql, or say in openldap (a network related thing)?
> > >
> > > It is doubtful they are all fine.
> > >
> > > For the benefit of other projects who haven't taken the same steps as
> > > OpenBSD, it would be nice if some people helped out these pieces of
> > > software.
> > >
> > > EMBOSS-6.0.1    srand((unsigned) time(&tm));
> > [...]
> >
> > What you say makes sense. Is there a best practice alternative you
> > suggest or did I miss that? Perhaps just some better initiation value,
> > preferably not all from the same place?
>
> These code sequences do not need deterministic values.  They actually
> want non-deterministic values.  Steps are like this:
>
>      1. Remove the srand(), srandom(), srand48(), seed48(),
>         lcong48() calls.
>
>      2. Replace all rand(), random(), lrand48(), mrand48() calls with
>         arc4random()
>
>      3. If the calls use %, consider using arcrandom_uniform() instead.
>
>      4. If it loops to fill a buffer, use arc4random_buf()
>
>      5. Replace drand48() with arc4random and some floating point, but
>         be careful.  drand48() is very rare.
>
> Now, talk to the upstream projects.  They will reject your changes
> because Linux lacks arc4random().
>
> Basically, only Linux and Solaris lack arc4random().  All the other
> platforms have it.
>
> There are libraries available which provide arc4random() on Linux, so
> maybe you find an upstream software provider who is willing to create
> a dependency on such a library on Linux.
>
> Lots of software is doing precisely that, so don't be afraid.
>
>
Thank you. Are there any specific good libraries you know of?


-- 
The best the little guy can do is what
the little guy does right

Reply via email to