current state of iqoqi’s quantum random number generator breakfast-talk 22.06.2010 alex treiber...
TRANSCRIPT
Current State of IQOQI’s Quantum Random Number Generator
Breakfast-Talk 22.06.2010
Alex Treiber
IQOQI’s QRNGs
Based on Thomas Jennewein‘s QRNGT. Jennewein, U. Achleitner, G. Weihs, H.Weinfurter, and A. Zeilinger, A Fast and Compact Quantum Random Number Generator, Review of Scientific Instruments 71, 1675–1680 (2000).
Optics: Blue LED + BS + PMT
ECL comparators and Flip-flop
FPGA for sampling, evaluation and USB
BS
S
RQLED
FPGA(Xilinx
Spartan 3)CLK
USB
Optics Electronics
OUT
ECL
PMT
Duties of the FPGA
Sampling (10kHz to 100MHz, user defined)
Symmetry evaluation
Randomness evaluation (runs-test) “Valid” LED on front panel
Two control loops (PWM)
- optimisation of symmetry (high entropy)
- LED intensity
Q DQ
CLKCLK
USB
OUT
SymmetryEvaluation
UTMI
FPGA
BS
S
RLED
ECL
RandomnessEvaluation
Intensity Valid LED
Sampling
Det 1=S
Det 0=R
Q
CLK
OUT 1 0 0 1 0 1 0
FPGA samples the Flipflop output with a user-defined rate (up to 100MHz)
Typical timing:
Really random?
C. Calude, M. Dinneen, M. Dumitrescu, K, Svozil, How Random Is Quantum Randomness? An Experimental Approach, arXiv:0912.4379v1
Tested RNGs: IQOQI QRNG, idQuantique Quantis, Mathematica, Maple
Five different tests (entropy, compression, book-stack, Solvay-Strassen, random-walk), each 10 times
Conclusion[…] overall, quantum random generators appear to be different from pseudo-random generators; with the Vienna strings emerging as the clear outlier (in all tests with various degrees of confidence) […]
Test suites
Five tests enough?
No Use a standard test suite
DieHard (Robert Marsaglia, 1995)
Statistical Test Suite (NIST, 2001)
DieHarder (Robert G. Brown)
- contains DieHard, STS and others
- 107 tests, each 100 times
- last version: Oct. 2009
- requires at least 1 GB files
#==================================================================## dieharder version 3.29.4beta Copyright 2003 Robert G. Brown ##==================================================================# rng_name | filename |rands/second| file_input_raw| Random021.dat| 3.25e+06 |#==================================================================# test_name |ntup| tsamples |psamples| p-value |Assessment#==================================================================# diehard_birthdays| 0| 100| 100|0.08247890| PASSED diehard_operm5| 5| 1000000| 100|0.07620363| PASSED diehard_rank_32x32| 0| 40000| 100|0.57898856| PASSED diehard_rank_6x8| 0| 100000| 100|0.00000000| FAILED diehard_bitstream| 0| 2097152| 100|0.00000000| FAILED diehard_opso| 0| 2097152| 100|0.00000000| FAILED diehard_oqso| 0| 2097152| 100|0.00000000| FAILED diehard_dna| 0| 2097152| 100|0.00000000| FAILED diehard_count_1s_str| 0| 256000| 100|0.00000000| FAILED diehard_count_1s_byt| 0| 256000| 100|0.00000000| FAILED diehard_parking_lot| 0| 12000| 100|0.00589179| PASSED diehard_2dsphere| 2| 8000| 100|0.82103324| PASSED diehard_3dsphere| 3| 4000| 100|0.38416615| PASSED diehard_squeeze| 0| 100000| 100|0.00000000| FAILED diehard_sums| 0| 100| 100|0.03964794| PASSED diehard_runs| 0| 100000| 100|0.02339595| PASSED diehard_runs| 0| 100000| 100|0.51776461| PASSED diehard_craps| 0| 200000| 100|0.00000000| FAILED diehard_craps| 0| 200000| 100|0.00000000| FAILED marsaglia_tsang_gcd| 0| 10000000| 100|0.00000000| FAILED marsaglia_tsang_gcd| 0| 10000000| 100|0.00000000| FAILED sts_monobit| 1| 100000| 100|0.01116767| PASSED sts_runs| 2| 100000| 100|0.00000000| FAILED sts_serial| 1| 100000| 100|0.49957123| PASSED sts_serial| 2| 100000| 100|0.00000000| FAILED sts_serial| 3| 100000| 100|0.00000000| FAILED sts_serial| 3| 100000| 100|0.00000000| FAILED sts_serial| 4| 100000| 100|0.00000000| FAILED sts_serial| 4| 100000| 100|0.00000000| FAILED sts_serial| 5| 100000| 100|0.00000000| FAILED sts_serial| 5| 100000| 100|0.00000000| FAILED sts_serial| 6| 100000| 100|0.00000000| FAILED sts_serial| 6| 100000| 100|0.00000000| FAILED sts_serial| 7| 100000| 100|0.00000000| FAILED sts_serial| 7| 100000| 100|0.00000000| FAILED sts_serial| 8| 100000| 100|0.00000000| FAILED sts_serial| 8| 100000| 100|0.00000000| FAILED sts_serial| 9| 100000| 100|0.00000000| FAILED sts_serial| 9| 100000| 100|0.00000001| FAILED sts_serial| 10| 100000| 100|0.00000000| FAILED sts_serial| 10| 100000| 100|0.00000178| FAILED
sts_serial| 11| 100000| 100|0.00000000| FAILED sts_serial| 11| 100000| 100|0.00554045| PASSED sts_serial| 12| 100000| 100|0.00000000| FAILED sts_serial| 12| 100000| 100|0.00342450| WEAK sts_serial| 13| 100000| 100|0.00000000| FAILED sts_serial| 13| 100000| 100|0.01912665| PASSED
sts_serial| 14| 100000| 100|0.00000000| FAILED
sts_serial| 14| 100000| 100|0.45969512| PASSED sts_serial| 15| 100000| 100|0.00000000| FAILED sts_serial| 15| 100000| 100|0.78370019| PASSED sts_serial| 16| 100000| 100|0.00000000| FAILED sts_serial| 16| 100000| 100|0.03630893| PASSED rgb_bitdist| 1| 100000| 100|0.00000000| FAILED rgb_bitdist| 2| 100000| 100|0.00000000| FAILED rgb_bitdist| 3| 100000| 100|0.00000000| FAILED rgb_bitdist| 4| 100000| 100|0.00000000| FAILED rgb_bitdist| 5| 100000| 100|0.00000000| FAILED rgb_bitdist| 6| 100000| 100|0.00000000| FAILED rgb_bitdist| 7| 100000| 100|0.00000000| FAILED rgb_bitdist| 8| 100000| 100|0.00000000| FAILED rgb_bitdist| 9| 100000| 100|0.00000000| FAILED rgb_bitdist| 10| 100000| 100|0.00000000| FAILED rgb_bitdist| 11| 100000| 100|0.00000000| FAILED rgb_bitdist| 12| 100000| 100|0.00000000| FAILED rgb_minimum_distance| 2| 10000| 1000|0.01494450| PASSED rgb_minimum_distance| 3| 10000| 1000|0.00154972| WEAK rgb_minimum_distance| 4| 10000| 1000|0.60482393| PASSED rgb_minimum_distance| 5| 10000| 1000|0.70511628| PASSED rgb_permutations| 2| 100000| 100|0.34235760| PASSED rgb_permutations| 3| 100000| 100|0.86890546| PASSED rgb_permutations| 4| 100000| 100|0.21494509| PASSED rgb_permutations| 5| 100000| 100|0.59106760| PASSED rgb_lagged_sum| 0| 1000000| 100|0.00000335| FAILED rgb_lagged_sum| 1| 1000000| 100|0.00041163| FAILED rgb_lagged_sum| 2| 1000000| 100|0.00989398| PASSED rgb_lagged_sum| 3| 1000000| 100|0.00259564| WEAK rgb_lagged_sum| 4| 1000000| 100|0.06399568| PASSED rgb_lagged_sum| 5| 1000000| 100|0.00115085| WEAK rgb_lagged_sum| 6| 1000000| 100|0.48988508| PASSED rgb_lagged_sum| 7| 1000000| 100|0.02460248| PASSED rgb_lagged_sum| 8| 1000000| 100|0.00523681| PASSED rgb_lagged_sum| 9| 1000000| 100|0.00007564| FAILED rgb_lagged_sum| 10| 1000000| 100|0.04677801| PASSED rgb_lagged_sum| 11| 1000000| 100|0.00016413| FAILED rgb_lagged_sum| 12| 1000000| 100|0.06228074| PASSED rgb_lagged_sum| 13| 1000000| 100|0.01848025| PASSED rgb_lagged_sum| 14| 1000000| 100|0.02429956| PASSED rgb_lagged_sum| 15| 1000000| 100|0.02444103| PASSED
DieHarder Results I
What was wrong?
ECL comparators were floating
Optical part not shielded (too many photons from outside)
Default parameter improper
Control loops not reliable
Onboard randomness test not meaningful
Good news: we could (almost) fix all problems
#========================================================================## dieharder version 3.29.4beta Copyright 2003 Robert G. Brown#========================================================================# rng_name | filename |rands/second| file_input_raw| q1_5MHz_1.dat| 1.76e+07 |#========================================================================# test_name |ntup| tsamples |psamples| p-value |Assessment#========================================================================# diehard_birthdays| 0| 100| 100|0.42792545| PASSED diehard_operm5| 5| 1000000| 100|0.03697549| PASSED diehard_rank_32x32| 0| 40000| 100|0.46441942| PASSED diehard_rank_6x8| 0| 100000| 100|0.33915293| PASSED diehard_bitstream| 0| 2097152| 100|0.81081015| PASSED diehard_opso| 0| 2097152| 100|0.30000974| PASSED diehard_oqso| 0| 2097152| 100|0.31726000| PASSED diehard_dna| 0| 2097152| 100|0.27335546| PASSEDdiehard_count_1s_str| 0| 256000| 100|0.37126012| PASSEDdiehard_count_1s_byt| 0| 256000| 100|0.40185116| PASSED diehard_parking_lot| 0| 12000| 100|0.34627402| PASSED diehard_2dsphere| 2| 8000| 100|0.73612316| PASSED diehard_3dsphere| 3| 4000| 100|0.95666919| PASSED diehard_squeeze| 0| 100000| 100|0.54262436| PASSED diehard_sums| 0| 100| 100|0.00921142| PASSED diehard_runs| 0| 100000| 100|0.81530352| PASSED diehard_runs| 0| 100000| 100|0.91126300| PASSED diehard_craps| 0| 200000| 100|0.16119635| PASSED diehard_craps| 0| 200000| 100|0.96676853| PASSED marsaglia_tsang_gcd| 0| 10000000| 100|0.23946275| PASSED marsaglia_tsang_gcd| 0| 10000000| 100|0.04561348| PASSED sts_monobit| 1| 100000| 100|0.30930831| PASSED sts_runs| 2| 100000| 100|0.00583346| PASSED sts_serial| 1| 100000| 100|0.07885875| PASSED sts_serial| 2| 100000| 100|0.00769865| PASSED sts_serial| 3| 100000| 100|0.60870308| PASSED sts_serial| 3| 100000| 100|0.62207017| PASSED sts_serial| 4| 100000| 100|0.04292822| PASSED sts_serial| 4| 100000| 100|0.10920534| PASSED sts_serial| 5| 100000| 100|0.56162316| PASSED sts_serial| 5| 100000| 100|0.21360406| PASSED sts_serial| 6| 100000| 100|0.30747938| PASSED sts_serial| 6| 100000| 100|0.37477593| PASSED sts_serial| 7| 100000| 100|0.87972507| PASSED sts_serial| 7| 100000| 100|0.22326564| PASSED sts_serial| 8| 100000| 100|0.42296250| PASSED sts_serial| 8| 100000| 100|0.01008196| PASSED sts_serial| 9| 100000| 100|0.22975862| PASSED sts_serial| 9| 100000| 100|0.54589223| PASSED sts_serial| 10| 100000| 100|0.20396017| PASSED sts_serial| 10| 100000| 100|0.84905794| PASSED
sts_serial| 11| 100000| 100|0.11783167| PASSED sts_serial| 11| 100000| 100|0.81136758| PASSED sts_serial| 12| 100000| 100|0.25171972| PASSED
sts_serial| 12| 100000| 100|0.95893614| PASSED
sts_serial| 13| 100000| 100|0.04254038| PASSED sts_serial| 14| 100000| 100|0.41334169| PASSED sts_serial| 14| 100000| 100|0.43896175| PASSED sts_serial| 15| 100000| 100|0.65951829| PASSED sts_serial| 15| 100000| 100|0.79833150| PASSED sts_serial| 16| 100000| 100|0.97863323| PASSED sts_serial| 16| 100000| 100|0.85960638| PASSED rgb_bitdist| 1| 100000| 100|0.36194616| PASSED rgb_bitdist| 2| 100000| 100|0.00306661| WEAK rgb_bitdist| 3| 100000| 100|0.08020477| PASSED rgb_bitdist| 4| 100000| 100|0.26389978| PASSED rgb_bitdist| 5| 100000| 100|0.76031260| PASSED rgb_bitdist| 6| 100000| 100|0.78364264| PASSED rgb_bitdist| 7| 100000| 100|0.65092735| PASSED rgb_bitdist| 8| 100000| 100|0.62388358| PASSED rgb_bitdist| 9| 100000| 100|0.31256060| PASSED rgb_bitdist| 10| 100000| 100|0.99742050| WEAK rgb_bitdist| 11| 100000| 100|0.15845754| PASSED rgb_bitdist| 12| 100000| 100|0.83499628| PASSEDrgb_minimum_distance| 2| 10000| 1000|0.83391342| PASSEDrgb_minimum_distance| 3| 10000| 1000|0.93666636| PASSEDrgb_minimum_distance| 4| 10000| 1000|0.96425293| PASSEDrgb_minimum_distance| 5| 10000| 1000|0.59957796| PASSED rgb_permutations| 2| 100000| 100|0.71516737| PASSED rgb_permutations| 3| 100000| 100|0.52658846| PASSED rgb_permutations| 4| 100000| 100|0.88877864| PASSED rgb_permutations| 5| 100000| 100|0.12378512| PASSED rgb_lagged_sum| 0| 1000000| 100|0.19291263| PASSED rgb_lagged_sum| 1| 1000000| 100|0.34584867| PASSED rgb_lagged_sum| 2| 1000000| 100|0.11270643| PASSED rgb_lagged_sum| 3| 1000000| 100|0.30984206| PASSED rgb_lagged_sum| 4| 1000000| 100|0.19750075| PASSED rgb_lagged_sum| 5| 1000000| 100|0.50104956| PASSED rgb_lagged_sum| 6| 1000000| 100|0.41981165| PASSED rgb_lagged_sum| 7| 1000000| 100|0.07927663| PASSED rgb_lagged_sum| 8| 1000000| 100|0.27889421| PASSED rgb_lagged_sum| 9| 1000000| 100|0.83286461| PASSED rgb_lagged_sum| 10| 1000000| 100|0.44481093| PASSED rgb_lagged_sum| 11| 1000000| 100|0.23857647| PASSED rgb_lagged_sum| 12| 1000000| 100|0.15082577| PASSED rgb_lagged_sum| 13| 1000000| 100|0.07655460| PASSED rgb_lagged_sum| 14| 1000000| 100|0.72278013| PASSED rgb_lagged_sum| 15| 1000000| 100|0.00607258| PASSED rgb_lagged_sum| 16| 1000000| 100|0.77962966| PASSED rgb_lagged_sum| 17| 1000000| 100|0.78183082| PASSED
DieHarder Results II
Comparison of some RNGs
Typical DieHarder results
C++ rand() 3x FAIL
Linux /dev/random 6x FAIL
AES OFB 0x FAIL
QRNG, 1MHz 50x FAIL
QRNG after modifications 1x FAIL
QRNG can produce cryptographic random numbers now
(without any post-processing)
Want to use the RNG?
Pay attention to:
the QRNG is not a plug & play device
use the TRNG software for Windows
don’t trust the “Valid” LED on front panel
read the fucking manual (English version coming soon)
stick to the manual
Thank you for your attention
In Thomas Scheidl’s PhD thesis
T. Scheidl, A fundamental test and an application of quantum entanglement, PhD thesis, University of Vienna, 2009
What is inside?
Optik
Elektronik
FPGA
Netzteil