Looking to buy a FG? Contact me.
FG is a joy to use. I can not think of an easier piece of hardware to install and use -- be it a keyboard or a hard drive. Granted, I had to recompile a kernel to get the USB TTY adapter to show up, but that is arguably not a strike against FG itself. The thing just works. Plug it in and right away see data flow forth. I used it to create two files over the course of about four days, and ran them through the recommended tests.
peninnah ~ # du -h fg.bin 1.4G fg.bin peninnah ~ # ent fg.bin Entropy = 8.000000 bits per byte. Optimum compression would reduce the size of this 1465266688 byte file by 0 percent. Chi square distribution for 1465266688 samples is 261.00, and randomly would exceed this value 38.48 percent of the times. Arithmetic mean value of data bytes is 127.5008 (127.5 = random). Monte Carlo value for Pi is 3.141552305 (error 0.00 percent). Serial correlation coefficient is -0.000011 (totally uncorrelated = 0.0). peninnah ~ # dieharder -a -g 201 -f fg.bin #=============================================================================# # dieharder version 3.31.1 Copyright 2003 Robert G. Brown # #=============================================================================# rng_name | filename |rands/second| file_input_raw| fg.bin| 1.55e+07 | #=============================================================================# test_name |ntup| tsamples |psamples| p-value |Assessment #=============================================================================# diehard_birthdays| 0| 100| 100|0.87587112| PASSED diehard_operm5| 0| 1000000| 100|0.96015925| PASSED diehard_rank_32x32| 0| 40000| 100|0.63388649| PASSED diehard_rank_6x8| 0| 100000| 100|0.42921798| PASSED diehard_bitstream| 0| 2097152| 100|0.66727620| PASSED # The file file_input_raw was rewound 1 times diehard_opso| 0| 2097152| 100|0.78465705| PASSED # The file file_input_raw was rewound 1 times diehard_oqso| 0| 2097152| 100|0.74785318| PASSED # The file file_input_raw was rewound 2 times diehard_dna| 0| 2097152| 100|0.29367572| PASSED # The file file_input_raw was rewound 2 times diehard_count_1s_str| 0| 256000| 100|0.99999624| WEAK # The file file_input_raw was rewound 2 times diehard_count_1s_byt| 0| 256000| 100|0.17355435| PASSED # The file file_input_raw was rewound 2 times diehard_parking_lot| 0| 12000| 100|0.79600924| PASSED # The file file_input_raw was rewound 2 times diehard_2dsphere| 2| 8000| 100|0.21990710| PASSED # The file file_input_raw was rewound 2 times diehard_3dsphere| 3| 4000| 100|0.19449387| PASSED # The file file_input_raw was rewound 3 times diehard_squeeze| 0| 100000| 100|0.74343805| PASSED # The file file_input_raw was rewound 3 times diehard_sums| 0| 100| 100|0.62449613| PASSED # The file file_input_raw was rewound 3 times diehard_runs| 0| 100000| 100|0.64815009| PASSED diehard_runs| 0| 100000| 100|0.65768515| PASSED # The file file_input_raw was rewound 3 times diehard_craps| 0| 200000| 100|0.59858631| PASSED diehard_craps| 0| 200000| 100|0.69964834| PASSED # The file file_input_raw was rewound 8 times marsaglia_tsang_gcd| 0| 10000000| 100|0.48645093| PASSED marsaglia_tsang_gcd| 0| 10000000| 100|0.92449907| PASSED # The file file_input_raw was rewound 8 times sts_monobit| 1| 100000| 100|0.14747070| PASSED # The file file_input_raw was rewound 8 times sts_runs| 2| 100000| 100|0.43752663| PASSED # The file file_input_raw was rewound 8 times sts_serial| 1| 100000| 100|0.49942085| PASSED sts_serial| 2| 100000| 100|0.79110527| PASSED sts_serial| 3| 100000| 100|0.13521837| PASSED sts_serial| 3| 100000| 100|0.75936926| PASSED sts_serial| 4| 100000| 100|0.71378645| PASSED sts_serial| 4| 100000| 100|0.82458666| PASSED sts_serial| 5| 100000| 100|0.91349881| PASSED sts_serial| 5| 100000| 100|0.77236497| PASSED sts_serial| 6| 100000| 100|0.83690635| PASSED sts_serial| 6| 100000| 100|0.11520241| PASSED sts_serial| 7| 100000| 100|0.59018155| PASSED sts_serial| 7| 100000| 100|0.71582962| PASSED sts_serial| 8| 100000| 100|0.94832462| PASSED sts_serial| 8| 100000| 100|0.79664845| PASSED sts_serial| 9| 100000| 100|0.61190018| PASSED sts_serial| 9| 100000| 100|0.46706842| PASSED sts_serial| 10| 100000| 100|0.59175209| PASSED sts_serial| 10| 100000| 100|0.43626668| PASSED sts_serial| 11| 100000| 100|0.07062130| PASSED sts_serial| 11| 100000| 100|0.06074906| PASSED sts_serial| 12| 100000| 100|0.33158937| PASSED sts_serial| 12| 100000| 100|0.39439959| PASSED sts_serial| 13| 100000| 100|0.46472363| PASSED sts_serial| 13| 100000| 100|0.51269561| PASSED sts_serial| 14| 100000| 100|0.07918865| PASSED sts_serial| 14| 100000| 100|0.16238744| PASSED sts_serial| 15| 100000| 100|0.15625993| PASSED sts_serial| 15| 100000| 100|0.97190190| PASSED sts_serial| 16| 100000| 100|0.07682345| PASSED sts_serial| 16| 100000| 100|0.58495694| PASSED # The file file_input_raw was rewound 9 times rgb_bitdist| 1| 100000| 100|0.91212650| PASSED # The file file_input_raw was rewound 9 times rgb_bitdist| 2| 100000| 100|0.68566372| PASSED # The file file_input_raw was rewound 9 times rgb_bitdist| 3| 100000| 100|0.24740597| PASSED # The file file_input_raw was rewound 9 times rgb_bitdist| 4| 100000| 100|0.92670153| PASSED # The file file_input_raw was rewound 9 times rgb_bitdist| 5| 100000| 100|0.58055076| PASSED # The file file_input_raw was rewound 10 times rgb_bitdist| 6| 100000| 100|0.24329557| PASSED # The file file_input_raw was rewound 10 times rgb_bitdist| 7| 100000| 100|0.28990384| PASSED # The file file_input_raw was rewound 10 times rgb_bitdist| 8| 100000| 100|0.06298846| PASSED # The file file_input_raw was rewound 11 times rgb_bitdist| 9| 100000| 100|0.55779701| PASSED # The file file_input_raw was rewound 11 times rgb_bitdist| 10| 100000| 100|0.10205715| PASSED # The file file_input_raw was rewound 12 times rgb_bitdist| 11| 100000| 100|0.43845244| PASSED # The file file_input_raw was rewound 13 times rgb_bitdist| 12| 100000| 100|0.81873239| PASSED # The file file_input_raw was rewound 13 times rgb_minimum_distance| 2| 10000| 1000|0.86683062| PASSED # The file file_input_raw was rewound 13 times rgb_minimum_distance| 3| 10000| 1000|0.95287146| PASSED # The file file_input_raw was rewound 13 times rgb_minimum_distance| 4| 10000| 1000|0.15691677| PASSED # The file file_input_raw was rewound 13 times rgb_minimum_distance| 5| 10000| 1000|0.87747412| PASSED # The file file_input_raw was rewound 13 times rgb_permutations| 2| 100000| 100|0.47847209| PASSED # The file file_input_raw was rewound 13 times rgb_permutations| 3| 100000| 100|0.82402816| PASSED # The file file_input_raw was rewound 13 times rgb_permutations| 4| 100000| 100|0.17345085| PASSED # The file file_input_raw was rewound 13 times rgb_permutations| 5| 100000| 100|0.96936326| PASSED # The file file_input_raw was rewound 14 times rgb_lagged_sum| 0| 1000000| 100|0.34427016| PASSED # The file file_input_raw was rewound 14 times rgb_lagged_sum| 1| 1000000| 100|0.40381806| PASSED # The file file_input_raw was rewound 15 times rgb_lagged_sum| 2| 1000000| 100|0.19408856| PASSED # The file file_input_raw was rewound 16 times rgb_lagged_sum| 3| 1000000| 100|0.92897681| PASSED # The file file_input_raw was rewound 18 times rgb_lagged_sum| 4| 1000000| 100|0.16649980| PASSED # The file file_input_raw was rewound 19 times rgb_lagged_sum| 5| 1000000| 100|0.61412624| PASSED # The file file_input_raw was rewound 21 times rgb_lagged_sum| 6| 1000000| 100|0.42159442| PASSED # The file file_input_raw was rewound 23 times rgb_lagged_sum| 7| 1000000| 100|0.48185104| PASSED # The file file_input_raw was rewound 26 times rgb_lagged_sum| 8| 1000000| 100|0.75025588| PASSED # The file file_input_raw was rewound 29 times rgb_lagged_sum| 9| 1000000| 100|0.49625842| PASSED # The file file_input_raw was rewound 32 times rgb_lagged_sum| 10| 1000000| 100|0.74186420| PASSED # The file file_input_raw was rewound 35 times rgb_lagged_sum| 11| 1000000| 100|0.95075159| PASSED # The file file_input_raw was rewound 38 times rgb_lagged_sum| 12| 1000000| 100|0.20457436| PASSED # The file file_input_raw was rewound 42 times rgb_lagged_sum| 13| 1000000| 100|0.38380392| PASSED # The file file_input_raw was rewound 46 times rgb_lagged_sum| 14| 1000000| 100|0.36071578| PASSED # The file file_input_raw was rewound 51 times rgb_lagged_sum| 15| 1000000| 100|0.00829390| PASSED # The file file_input_raw was rewound 55 times rgb_lagged_sum| 16| 1000000| 100|0.57666395| PASSED # The file file_input_raw was rewound 60 times rgb_lagged_sum| 17| 1000000| 100|0.76473173| PASSED # The file file_input_raw was rewound 65 times rgb_lagged_sum| 18| 1000000| 100|0.41578459| PASSED # The file file_input_raw was rewound 71 times rgb_lagged_sum| 19| 1000000| 100|0.99159799| PASSED # The file file_input_raw was rewound 77 times rgb_lagged_sum| 20| 1000000| 100|0.32769294| PASSED # The file file_input_raw was rewound 83 times rgb_lagged_sum| 21| 1000000| 100|0.93908723| PASSED # The file file_input_raw was rewound 89 times rgb_lagged_sum| 22| 1000000| 100|0.21834900| PASSED # The file file_input_raw was rewound 95 times rgb_lagged_sum| 23| 1000000| 100|0.77669306| PASSED # The file file_input_raw was rewound 102 times rgb_lagged_sum| 24| 1000000| 100|0.67332002| PASSED # The file file_input_raw was rewound 109 times rgb_lagged_sum| 25| 1000000| 100|0.38258605| PASSED # The file file_input_raw was rewound 117 times rgb_lagged_sum| 26| 1000000| 100|0.04205557| PASSED # The file file_input_raw was rewound 124 times rgb_lagged_sum| 27| 1000000| 100|0.97791293| PASSED # The file file_input_raw was rewound 132 times rgb_lagged_sum| 28| 1000000| 100|0.65316434| PASSED # The file file_input_raw was rewound 140 times rgb_lagged_sum| 29| 1000000| 100|0.80146132| PASSED # The file file_input_raw was rewound 149 times rgb_lagged_sum| 30| 1000000| 100|0.37987553| PASSED # The file file_input_raw was rewound 158 times rgb_lagged_sum| 31| 1000000| 100|0.00162210| WEAK # The file file_input_raw was rewound 167 times rgb_lagged_sum| 32| 1000000| 100|0.63803843| PASSED # The file file_input_raw was rewound 167 times rgb_kstest_test| 0| 10000| 1000|0.96115995| PASSED # The file file_input_raw was rewound 167 times dab_bytedistrib| 0| 51200000| 1|0.31793136| PASSED # The file file_input_raw was rewound 167 times dab_dct| 256| 50000| 1|0.45562880| PASSED Preparing to run test 207. ntuple = 0 # The file file_input_raw was rewound 167 times dab_filltree| 32| 15000000| 1|0.79566020| PASSED dab_filltree| 32| 15000000| 1|0.01492029| PASSED Preparing to run test 208. ntuple = 0 # The file file_input_raw was rewound 168 times dab_filltree2| 0| 5000000| 1|0.88946088| PASSED dab_filltree2| 1| 5000000| 1|0.66182840| PASSED Preparing to run test 209. ntuple = 0 # The file file_input_raw was rewound 168 times dab_monobit2| 12| 65000000| 1|0.42576186| PASSED peninnah ~ # du -h fg2.bin 1.3G fg2.bin peninnah ~ # ent fg2.bin Entropy = 8.000000 bits per byte. Optimum compression would reduce the size of this 1303843328 byte file by 0 percent. Chi square distribution for 1303843328 samples is 284.35, and randomly would exceed this value 9.99 percent of the times. Arithmetic mean value of data bytes is 127.4954 (127.5 = random). Monte Carlo value for Pi is 3.141632114 (error 0.00 percent). Serial correlation coefficient is -0.000032 (totally uncorrelated = 0.0). peninnah ~ # dieharder -a -g 201 -f fg2.bin #=============================================================================# # dieharder version 3.31.1 Copyright 2003 Robert G. Brown # #=============================================================================# rng_name | filename |rands/second| file_input_raw| fg2.bin| 2.25e+07 | #=============================================================================# test_name |ntup| tsamples |psamples| p-value |Assessment #=============================================================================# diehard_birthdays| 0| 100| 100|0.51690876| PASSED diehard_operm5| 0| 1000000| 100|0.40346765| PASSED diehard_rank_32x32| 0| 40000| 100|0.93217934| PASSED diehard_rank_6x8| 0| 100000| 100|0.43367847| PASSED diehard_bitstream| 0| 2097152| 100|0.66720249| PASSED diehard_opso| 0| 2097152| 100|0.86010573| PASSED diehard_oqso| 0| 2097152| 100|0.24593153| PASSED diehard_dna| 0| 2097152| 100|0.06138150| PASSED diehard_count_1s_str| 0| 256000| 100|0.43683325| PASSED diehard_count_1s_byt| 0| 256000| 100|0.35921097| PASSED diehard_parking_lot| 0| 12000| 100|0.66609484| PASSED diehard_2dsphere| 2| 8000| 100|0.89297189| PASSED diehard_3dsphere| 3| 4000| 100|0.96687561| PASSED diehard_squeeze| 0| 100000| 100|0.72926845| PASSED diehard_sums| 0| 100| 100|0.00070732| WEAK diehard_runs| 0| 100000| 100|0.58813360| PASSED diehard_runs| 0| 100000| 100|0.85788145| PASSED diehard_craps| 0| 200000| 100|0.72997672| PASSED diehard_craps| 0| 200000| 100|0.78468205| PASSED marsaglia_tsang_gcd| 0| 10000000| 100|0.00004506| WEAK marsaglia_tsang_gcd| 0| 10000000| 100|0.55156943| PASSED sts_monobit| 1| 100000| 100|0.45774566| PASSED sts_runs| 2| 100000| 100|0.96042269| PASSED sts_serial| 1| 100000| 100|0.99443515| PASSED sts_serial| 2| 100000| 100|0.10639532| PASSED sts_serial| 3| 100000| 100|0.75641448| PASSED sts_serial| 3| 100000| 100|0.90420108| PASSED sts_serial| 4| 100000| 100|0.75016342| PASSED sts_serial| 4| 100000| 100|0.08575288| PASSED sts_serial| 5| 100000| 100|0.03281594| PASSED sts_serial| 5| 100000| 100|0.19524235| PASSED sts_serial| 6| 100000| 100|0.25109686| PASSED sts_serial| 6| 100000| 100|0.58659811| PASSED sts_serial| 7| 100000| 100|0.43221129| PASSED sts_serial| 7| 100000| 100|0.81175508| PASSED sts_serial| 8| 100000| 100|0.63456658| PASSED sts_serial| 8| 100000| 100|0.65063391| PASSED sts_serial| 9| 100000| 100|0.58288735| PASSED sts_serial| 9| 100000| 100|0.71193409| PASSED sts_serial| 10| 100000| 100|0.62519797| PASSED sts_serial| 10| 100000| 100|0.55146077| PASSED sts_serial| 11| 100000| 100|0.76770489| PASSED sts_serial| 11| 100000| 100|0.59139324| PASSED sts_serial| 12| 100000| 100|0.94453984| PASSED sts_serial| 12| 100000| 100|0.94841134| PASSED sts_serial| 13| 100000| 100|0.31653993| PASSED sts_serial| 13| 100000| 100|0.14829483| PASSED sts_serial| 14| 100000| 100|0.42320056| PASSED sts_serial| 14| 100000| 100|0.10925685| PASSED sts_serial| 15| 100000| 100|0.83878977| PASSED sts_serial| 15| 100000| 100|0.25782489| PASSED sts_serial| 16| 100000| 100|0.66793322| PASSED sts_serial| 16| 100000| 100|0.55162347| PASSED rgb_bitdist| 1| 100000| 100|0.89591957| PASSED rgb_bitdist| 2| 100000| 100|0.98614161| PASSED rgb_bitdist| 3| 100000| 100|0.80316018| PASSED rgb_bitdist| 4| 100000| 100|0.89736784| PASSED rgb_bitdist| 5| 100000| 100|0.29428507| PASSED rgb_bitdist| 6| 100000| 100|0.95422575| PASSED rgb_bitdist| 7| 100000| 100|0.39659444| PASSED rgb_bitdist| 8| 100000| 100|0.46010761| PASSED rgb_bitdist| 9| 100000| 100|0.76510075| PASSED rgb_bitdist| 10| 100000| 100|0.95714334| PASSED rgb_bitdist| 11| 100000| 100|0.35646381| PASSED rgb_bitdist| 12| 100000| 100|0.98517330| PASSED rgb_minimum_distance| 2| 10000| 1000|0.34562317| PASSED rgb_minimum_distance| 3| 10000| 1000|0.00929810| PASSED rgb_minimum_distance| 4| 10000| 1000|0.75795839| PASSED rgb_minimum_distance| 5| 10000| 1000|0.00873640| PASSED rgb_permutations| 2| 100000| 100|0.49694367| PASSED rgb_permutations| 3| 100000| 100|0.65402344| PASSED rgb_permutations| 4| 100000| 100|0.79788641| PASSED rgb_permutations| 5| 100000| 100|0.58529553| PASSED rgb_lagged_sum| 0| 1000000| 100|0.52287218| PASSED rgb_lagged_sum| 1| 1000000| 100|0.22764333| PASSED rgb_lagged_sum| 2| 1000000| 100|0.17172871| PASSED rgb_lagged_sum| 3| 1000000| 100|0.05124946| PASSED rgb_lagged_sum| 4| 1000000| 100|0.49713592| PASSED rgb_lagged_sum| 5| 1000000| 100|0.45635542| PASSED rgb_lagged_sum| 6| 1000000| 100|0.96830965| PASSED rgb_lagged_sum| 7| 1000000| 100|0.53419506| PASSED rgb_lagged_sum| 8| 1000000| 100|0.86494381| PASSED rgb_lagged_sum| 9| 1000000| 100|0.72881545| PASSED rgb_lagged_sum| 10| 1000000| 100|0.56544878| PASSED rgb_lagged_sum| 11| 1000000| 100|0.43609672| PASSED rgb_lagged_sum| 12| 1000000| 100|0.91400206| PASSED rgb_lagged_sum| 13| 1000000| 100|0.60227275| PASSED rgb_lagged_sum| 14| 1000000| 100|0.56538826| PASSED rgb_lagged_sum| 15| 1000000| 100|0.06302978| PASSED rgb_lagged_sum| 16| 1000000| 100|0.16808054| PASSED rgb_lagged_sum| 17| 1000000| 100|0.55036083| PASSED rgb_lagged_sum| 18| 1000000| 100|0.93720548| PASSED rgb_lagged_sum| 19| 1000000| 100|0.37353185| PASSED rgb_lagged_sum| 20| 1000000| 100|0.13472207| PASSED rgb_lagged_sum| 21| 1000000| 100|0.44509225| PASSED rgb_lagged_sum| 22| 1000000| 100|0.76205513| PASSED rgb_lagged_sum| 23| 1000000| 100|0.62304135| PASSED rgb_lagged_sum| 24| 1000000| 100|0.39094558| PASSED rgb_lagged_sum| 25| 1000000| 100|0.50961722| PASSED rgb_lagged_sum| 26| 1000000| 100|0.15803949| PASSED rgb_lagged_sum| 27| 1000000| 100|0.09251363| PASSED rgb_lagged_sum| 28| 1000000| 100|0.58331044| PASSED rgb_lagged_sum| 29| 1000000| 100|0.12363069| PASSED rgb_lagged_sum| 30| 1000000| 100|0.71458079| PASSED rgb_lagged_sum| 31| 1000000| 100|0.66807924| PASSED rgb_lagged_sum| 32| 1000000| 100|0.65399068| PASSED rgb_kstest_test| 0| 10000| 1000|0.02178401| PASSED dab_bytedistrib| 0| 51200000| 1|0.36573309| PASSED dab_dct| 256| 50000| 1|0.56628701| PASSED Preparing to run test 207. ntuple = 0 dab_filltree| 32| 15000000| 1|0.28801332| PASSED dab_filltree| 32| 15000000| 1|0.59182162| PASSED Preparing to run test 208. ntuple = 0 dab_filltree2| 0| 5000000| 1|0.19562700| PASSED dab_filltree2| 1| 5000000| 1|0.13690412| PASSED Preparing to run test 209. ntuple = 0 dab_monobit2| 12| 65000000| 1|0.52568327| PASSED
As another test, I used a FG to seed /dev/random
via something called rngd
i and then told gnupg to generate a new 4096 bit key. It was done within a minute, whereas a very similar machine operating without a FG took several minutes. I don't know if this is the right way to generate a key using such a device. I get strange results catting it directly into /dev/random
-- if I then cat /dev/random > somewhere.bin
the data barely trickles out. Even the rngd
thing goes slow relative to a direct dd
from /dev/myFG
, and I know from very quick research that this is likely the result of obnoxious built-in saftey measures on /dev/random
.
- Gentoo has it in the sys-apps/rng-tools package. ^
[...] Others have done of course better than me and published their own tests waaaaay faster: mod6, danielpbarron, trinque, BingoBoingo. How about you, what's your own FG saying to you? [...]