On 2020-06-23, Why 42? The lists account. <li...@y42.org> wrote:
>
> Hi All,
>
> Has anyone ever tried the Infinite Noise TRNG hardware random number generator
> with OpenBSD?
>
> It's a USB stick that contains hardware to generate random numbers. See:
> https://github.com/13-37-org/infnoise
>
> I had a couple of these working with ArchLinux and would like to try using
> them with OpenBSD.
>
> Using either 6.6 or 6.7 the device is recognised at boot time:
>> uftdi0 at uhub0 port 2 configuration 1 interface 0 "13-37.org Infinite Noise
>> TRNG" rev 2.00/10.00 addr 3 ucom0 at uftdi0 portno 1
>
> With libftdi1-1.4p2 installed I was able to compile the associated software
> using the supplied "Makefile.freebsd". So a pretty easy start ...
>> make -f Makefile.freebsd
>> cc -Wall -Wextra -Werror -std=c99 -O3 -fPIC -I Keccak -I 
>> /usr/local/include/libftdi1  -DGIT_VERSION=\"\" -DGIT_COMMIT=\"\" 
>> -DGIT_DATE=\"\"  -c libinfnoise.c
>> cc -Wall -Wextra -Werror -std=c99 -O3 -fPIC -I Keccak -I 
>> /usr/local/include/libftdi1  -DGIT_VERSION=\"\" -DGIT_COMMIT=\"\" 
>> -DGIT_DATE=\"\"   -c healthcheck.c
>> cc -c -o KeccakF-1600-reference.o Keccak/KeccakF-1600-reference.c -Wall 
>> -Wextra -Werror -std=c99 -O3 -fPIC -I Keccak -I /usr/local/include/libftdi1  
>> -DGIT_VERSION=\"\" -DGIT_COMMIT=\"\" -DGIT_DATE=\"\" 
>> ar rcs libinfnoise.a libinfnoise.o healthcheck.o KeccakF-1600-reference.o
>> ranlib libinfnoise.a
>> cc -Wall -Wextra -Werror -std=c99 -O3 -fPIC -I Keccak -I 
>> /usr/local/include/libftdi1  -DGIT_VERSION=\"\" -DGIT_COMMIT=\"\" 
>> -DGIT_DATE=\"\"  -fvisibility=hidden -o libinfnoise.so libinfnoise.o 
>> healthcheck.o KeccakF-1600-reference.o  -L /usr/local/lib -Wl -lftdi1 -lm 
>> -shared 
>> cc -Wall -Wextra -Werror -std=c99 -O3 -fPIC -I Keccak -I 
>> /usr/local/include/libftdi1  -DGIT_VERSION=\"\" -DGIT_COMMIT=\"\" 
>> -DGIT_DATE=\"\"   -c infnoise.c
>> cc -Wall -Wextra -Werror -std=c99 -O3 -fPIC -I Keccak -I 
>> /usr/local/include/libftdi1  -DGIT_VERSION=\"\" -DGIT_COMMIT=\"\" 
>> -DGIT_DATE=\"\"   -c daemon.c
>> cc -Wall -Wextra -Werror -std=c99 -O3 -fPIC -I Keccak -I 
>> /usr/local/include/libftdi1  -DGIT_VERSION=\"\" -DGIT_COMMIT=\"\" 
>> -DGIT_DATE=\"\"  -o infnoise infnoise.o daemon.o libinfnoise.a -lftdi1 -lm 
>> -L. -L /usr/local/lib
>  
> This creates an executable "driver" called infnoise which can be run as a
> daemon e.g.
>> doas ./infnoise -h            
>> Usage: infnoise [options]
>> Options are:
>>     -D, --debug - turn on some debug output
>>     -R, --dev-random - write entropy to /dev/random instead of stdout
>>     -r, --raw - do not whiten the output
>>     -m, --multiplier <value> - write 256 bits * value for each 512 bits 
>> written to
>>       the Keccak sponge.  Default of 0 means write all the entropy.
>>     -n, --no-output - do not write random output data
>>     -p, --pidfile <file> - write process ID to file
>>     -d, --daemon - run in the background
>>     -s, --serial <serial> - use specified device
>>     -l, --list-devices - list available devices
>>     -v, --version - show version information
>>     -h, --help - this help output
>> ...
>
> The "list-devices" mode works nicely:
>> doas ./infnoise --list-devices
>> ...
>> ID: 0, Manufacturer: 13-37.org, Description: Infinite Noise TRNG, Serial: 
>> 1337-ECA4E8A6
>
> So far, so good ... But if I try getting actual random numbers, I get "read
> failed":
>> doas ./infnoise
>> ...
>> Error: USB read failed
>
> Any suggestions? Where am I going wrong? Maybe I shouldn't have taken that
> shortcut with the freebsd makefile? Or a security issue?
>
> Thanks in advance.
>
> Cheers,
> Robb.
>
>

Disable uftdi in your kernel config (boot -c, disable uftdi, quit) and
see if that works. The device is attaching as a serial port, but libftdi
probably wants it attaching to ugen. If that helps maybe we can add a
quirk to knock out just this device. Send usbdevs -v output.

The FreeBSD makefile shouldn't be a problem. Most of the code behind the
linux --dev-random support would work too but it will need some changes
(get rid of the RNDGETENTCNT ioctl.and just use a timer) or you could
run it periodically and feed stdout into /dev/random (infnoise | cut
-c1-512 > /dev/random or similar would probably do the trick).

Reply via email to