You don't even need to modify e_os.h.  You can just pass in a new value
for DEVRANDOM using the gcc -D compiler option.  For instance, maybe you
have a hardware device mapped to a Linux device file called
/dev/entropy1.  You can override DEVRANDOM to use this device without
modifying any OpenSSL code.




On 03/12/2015 12:06 PM, Alberto Roman Linacero wrote:
> Well... I'm just trying, for the test, to do something like:
>
> debian:~/openssl# strace -xe trace=file,read,write,close
> /usr/local/ssl/bin/openssl rand 10
> [...]
> open("/dev/urandom", O_RDONLY|O_NOCTTY|O_NONBLOCK) = 3
> read(3, 
> "\xa9\xea\xf3\x6e\x08\x14\xe7\xeb\x11\x9c\x72\x64\x69\x54\x0d\x96\x43\x34\x68\x25\xe3\x45\x8b\xe8\xe6\x36\xde\x9b\x33\x3a\x6a\xe2",
> 32) = 32
> close(3)                                = 0
>
> I know that it will have poor performance, and in fact I don't want to
> do this... but we're going to pass SP800 56b and they are asking us to
> use blocking to be sure that the entropy generated before the openssl
> seed is enough (256 entropy bits).
>
> My understanding of how OpenSSL seeds DRBGs is as follows:
>
> When initialization function is called, first the non-approved
> hash-based DRBG that is part of the baseline library is seeded. This
> DRBG is seeded according to library's settings (in e_os.h DEVRANDOM),
> and it defaults to /dev/urandom. After that approved FIPS-mode DRBG
> with 256-bit AES-CTR is seeded by calling the bytes() method. This
> way, output of the first non-approved DRBG is used to seed FIPS-mode
> DRBG. This is why module settings (e_os.h DEVRANDOM) are ignored.
>
> So, I'm not sure if I'm thinking it fine, or if I could change e_os.h
> to do that and still being FIPS certified, or...
>
> Alberto.
>
>
> 2015-03-11 21:10 GMT+01:00 Tom Francis <thomas.francis...@pobox.com>:
>>> On Mar 11, 2015, at 11:40 AM, Alberto Roman Linacero 
>>> <aro...@alienvault.com> wrote:
>>>
>>> Dear all, I'm doing an strace to the FIPS validated version of
>>> openssl, and I'm seeing that is uses /dev/urandom. I thought that the
>>> FIPS validated module always use /dev/random, isn't this the case, or
>>> am I doing something wrong?.
>>>
>>> If it uses /dev/urandom, is it possible/advisable to change it to
>>> /dev/random (how?), and still the module being FIPS validated?
>> It would depend on what code is reading from /dev/urandom.  If it’s the FIPS 
>> Object Module that’s doing the reading, then no, absolutely not.  If it’s 
>> the FIPS-capable OpenSSL that reads from /dev/urandom, you can probably 
>> change it.  But I’m curious as to why you would want to do this.  Most 
>> systems with /dev/random and /dev/urandom are similar to Linux, in that 
>> /dev/urandom is the preferred source for “random data”, including when 
>> seeding a PRNG (which is how it’s used by OpenSSL).  And because /dev/random 
>> can block, you might have ridiculously poor performance (and worse, it’ll be 
>> unpredictably poor performance, i.e. sometimes it’ll work great, and other 
>> times it’ll be horrible, and you never which you’ll get).  This page, 
>> http://www.2uo.de/myths-about-urandom/ , is specific to Linux, but at a 
>> high-level, It’s also true for AIX, HP-UX, Solaris, FreeBSD, and NetBSD 
>> (OpenBSD is more complex).  I’m not about other UNIX-like systems, as I 
>> stopped using those before any of them ever provided such devices. :)
>>
>> TOM
>>
>>> Thanks for your help in advance and best regards,
>>> Alberto.
>>> _______________________________________________
>>> openssl-users mailing list
>>> To unsubscribe: https://mta.openssl.org/mailman/listinfo/openssl-users
>>>
>> _______________________________________________
>> openssl-users mailing list
>> To unsubscribe: https://mta.openssl.org/mailman/listinfo/openssl-users
>
>


_______________________________________________
openssl-users mailing list
To unsubscribe: https://mta.openssl.org/mailman/listinfo/openssl-users

Reply via email to