{"id":16446,"date":"2021-03-09T04:33:54","date_gmt":"2021-03-09T03:33:54","guid":{"rendered":"http:\/\/blog.wenzlaff.de\/?p=16446"},"modified":"2024-07-13T10:10:11","modified_gmt":"2024-07-13T08:10:11","slug":"rng","status":"publish","type":"post","link":"http:\/\/blog.wenzlaff.de\/?p=16446","title":{"rendered":"Kryptographisch sicherer Zufallszahlengenerator mit dem Raspberry Pi und Hardware Random Number Generator (RNG)"},"content":{"rendered":"<p>Zufallszahlen kann man leicht online \u00fcber <a href=\"https:\/\/www.random.org\/coins\/?num=10&#038;cur=60-pln.1zloty\" rel=\"noopener\" target=\"_blank\">random.org<\/a> ermitteln. Es k\u00f6nnen da M\u00fcnzen geworfen werden:<\/p>\n<p><a href=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2021\/03\/wenzlaff.de-2021-03-08-um-18.05.09.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2021\/03\/wenzlaff.de-2021-03-08-um-18.05.09-1024x654.png\" alt=\"\" width=\"525\" height=\"335\" class=\"aligncenter size-large wp-image-16448\" srcset=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2021\/03\/wenzlaff.de-2021-03-08-um-18.05.09-1024x654.png 1024w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2021\/03\/wenzlaff.de-2021-03-08-um-18.05.09-300x192.png 300w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2021\/03\/wenzlaff.de-2021-03-08-um-18.05.09-768x490.png 768w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2021\/03\/wenzlaff.de-2021-03-08-um-18.05.09-1536x981.png 1536w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2021\/03\/wenzlaff.de-2021-03-08-um-18.05.09.png 1594w\" sizes=\"auto, (max-width: 525px) 100vw, 525px\" \/><\/a><\/p>\n<p>Es k\u00f6nnen verschiedene W\u00e4hrungen und Anzahl ausgew\u00e4hlt werden. Leider geht nicht Bitcoin. Aber die sind auch gut&#8230;<\/p>\n<p><a href=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2021\/03\/wenzlaff.de-2021-03-08-um-18.06.02.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2021\/03\/wenzlaff.de-2021-03-08-um-18.06.02-1024x367.png\" alt=\"\" width=\"525\" height=\"188\" class=\"aligncenter size-large wp-image-16447\" srcset=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2021\/03\/wenzlaff.de-2021-03-08-um-18.06.02-1024x367.png 1024w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2021\/03\/wenzlaff.de-2021-03-08-um-18.06.02-300x108.png 300w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2021\/03\/wenzlaff.de-2021-03-08-um-18.06.02-768x275.png 768w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2021\/03\/wenzlaff.de-2021-03-08-um-18.06.02.png 1512w\" sizes=\"auto, (max-width: 525px) 100vw, 525px\" \/><\/a><\/p>\n<p>Auch Passw\u00f6rter, Lotterie, Zeit, Zeichen, W\u00f6rter und andere Zufallszahlen k\u00f6nnen dort generiert werden. <\/p>\n<p>Aber wie kann man Zufallszahlen generieren, die auch noch den hohen kryptografischen Anforderungen entsprechen? Mit Hardware (cryptographically secure pseudo-random number generator (CSPRNG)). Muss man da teure Crypto-Generatoren kaufen? Nein, ein kleiner Raspberry Pi reicht auch schon.<\/p>\n<p>Der Raspberry Pi (Zero ua.) enth\u00e4lt, mit dem Chip BCM2708 \/\u00a0<strong>BCM2835<\/strong> auch einen <strong>Hardware Random Number Generator<\/strong> (RNG). Welchen Chip der Pi hat, wird ausgegeben mit: <strong>cat \/proc\/cpuinfo<\/strong>. <\/p>\n<p>Im Idealfall wird die Erstellung von Zufallszahlen durch eine nicht deterministische Entropiequelle gespeist. Das kann zum Beispiel ein hardwarebasierter Zufallsgenerator sein (PI) oder auch ein hybrider Generator. F\u00fcr kryptologische Anwendungen sollten nicht-deterministische Generatoren verwendet werden, denn nur bei diesen kann garantiert werden, dass sie nicht reproduzierbar oder vorhersagbar sind. <\/p>\n<p>Zugriff darauf erh\u00e4lt man \u00fcber die Schnittstelle: <strong>\/dev\/hwrng<\/strong> ( und die blockende \/dev\/random und die <strong>nicht<\/strong> blockende  \/dev\/urandom).<\/p>\n<p>Wir aktivieren nun mal die <strong>rng-tools<\/strong> f\u00fcr den Zugriff auf den RNG. &#8230;<!--more--><\/p>\n<pre class=\"lang:default decode:true \" >\r\n\r\nsudo apt-get update\r\nsudo apt-get upgrade\r\nsudo apt-get install -y  rng-tools\r\nsudo apt-get install dieharder base58 netpbm\r\n\r\n\/\/ in der Datei\r\n\/etc\/default\/rng-tools \r\n\r\n\/\/ diese Zeile einkommentieren\r\nHRNGDEVICE=\/dev\/hwrng\r\n\r\n\/\/ nach dem Speichern, den Service neustarten mit\r\nsudo service rng-tools restart\r\n\r\n\/\/ Check ob er l\u00e4uft mit\r\n sudo service rng-tools status\r\n\/\/ Ergebnis:\r\n\/\/ rng-tools.service\r\n\/\/   Loaded: loaded (\/etc\/init.d\/rng-tools; generated)\r\n\/\/   Active: active (running) since Mon 2021-03-08 11:54:43 GMT; 5h 24min ago\r\n\/\/     Docs: man:systemd-sysv-generator(8)\r\n\/\/  Process: 248 ExecStart=\/etc\/init.d\/rng-tools start (code=exited, status=0\/SUCCESS)\r\n\/\/    Tasks: 4 (limit: 881)\r\n\/\/   CGroup: \/system.slice\/rng-tools.service\r\n\/\/           \u2514\u2500252 \/usr\/sbin\/rngd -r \/dev\/hwrng\r\n\/\/\r\n\/\/Mar 08 16:55:51 pi-zero rngd[252]: block failed FIPS test: 0x04\r\n\r\n\/\/ nun fragen wir als 1. Test den RNG ab\r\nsudo cat \/dev\/hwrng | rngtest -c 1000\r\n\r\n\/\/ Ergebnis:\r\n\/\/ rngtest 2-unofficial-mt.14\r\n\/\/ Copyright (c) 2004 by Henrique de Moraes Holschuh\r\n\/\/ This is free software; see the source for copying conditions.  There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR \/\/ PURPOSE.\r\n\/\/ \r\n\/\/ rngtest: starting FIPS tests...\r\n\/\/ rngtest: bits received from input: 20000032\r\n\/\/ rngtest: FIPS 140-2 successes: 1000\r\n\/\/ rngtest: FIPS 140-2 failures: 0\r\n\/\/ rngtest: FIPS 140-2(2001-10-10) Monobit: 0\r\n\/\/ rngtest: FIPS 140-2(2001-10-10) Poker: 0\r\n\/\/ rngtest: FIPS 140-2(2001-10-10) Runs: 0\r\n\/\/ rngtest: FIPS 140-2(2001-10-10) Long run: 0\r\n\/\/ rngtest: FIPS 140-2(2001-10-10) Continuous run: 0\r\n\/\/ rngtest: input channel speed: (min=20.686; avg=1113.556; max=2170138.889)Kibits\/s\r\n\/\/ rngtest: FIPS tests speed: (min=872.281; avg=6194.330; max=9199.835)Kibits\/s\r\n\/\/ rngtest: Program run time: 21731808 microseconds\r\n<\/pre>\n<p>Nun erzeugen wir mal eine Datei mit zuf\u00e4lligen Inhalt von ca 200 KB Gr\u00f6\u00dfe. <\/p>\n<p><strong>sudo cat \/dev\/hwrng | rawtoppm -rgb 256 256 | pnmtopng > random$(date +%Y%m%d%H%M%S).png<\/strong><\/p>\n<p>Cool:<br \/>\n<a href=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2021\/03\/random20210308172514.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2021\/03\/random20210308172514.png\" alt=\"\" width=\"256\" height=\"256\" class=\"aligncenter size-full wp-image-16451\" srcset=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2021\/03\/random20210308172514.png 256w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2021\/03\/random20210308172514-150x150.png 150w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2021\/03\/random20210308172514-100x100.png 100w\" sizes=\"auto, (max-width: 256px) 100vw, 256px\" \/><\/a><\/p>\n<p>Oder wer eine Datei mit zuf\u00e4lligen Testdaten braucht, kann sie mit dd erzeugen. Hier mal ca 10 MB:<br \/>\n<strong><br \/>\nsudo dd bs=1024 count=10000 if=\/dev\/hwrng of=hwrng-10mb-testdata.bin<\/strong><\/p>\n<pre class=\"lang:default decode:true \" >Ergebnis:\r\n10000+0 records in\r\n10000+0 records out\r\n10240000 bytes (10 MB, 9.8 MiB) copied, 76.3932 s, 134 kB\/s<\/pre>\n<p>Bisher haben wir immer per <strong>sudo<\/strong> auf die Schnittstelle zugegriffen. Wer es auch mit User rechten machen m\u00f6chte, kann ein<\/p>\n<p><strong>sudo chmod a+r \/dev\/hwrng<\/strong><\/p>\n<p>ausf\u00fchren. Dann wird ein dd: failed to open &#8218;\/dev\/hwrng&#8216;: <em>Permission denied verhindert<\/em>. Nach dem n\u00e4chsten reboot sind diese Rechte dann aber wieder entzogen.<\/p>\n<p>Manchmal braucht man ein Seed f\u00fcr Crypto-Funktionen. Hier lesen wir mal 1024 byte aus der \/dev\/hwrng codieren es nach base58 und schneiden es auf 64 Zeichen oder 512 Bit:<\/p>\n<pre class=\"lang:default decode:true \" >head --bytes 1024 \/dev\/hwrng | base58 | cut -b 1-64<\/pre>\n<p>Ergebniss:<br \/>\n4dxYQg73qczzM9fFAqYk785RXvNqPGimsohEqEjeYPtAAnKsZSHKE1nNcLhodQLz<\/p>\n<p>Das dauert dann schon 3-5 Sekunden. Aber wir haben nun mit Hardware kryptografisch sichere Zufallszahlen von hoher Qualit\u00e4t erzeugt.<\/p>\n<p>Nun k\u00f6nnen wir noch einen Test der Qualit\u00e4t der gelieferten Zufallszahlen ausf\u00fchren. Es gibt eine gute Testsuit <a href=\"https:\/\/linux.die.net\/man\/1\/dieharder\" rel=\"noopener\" target=\"_blank\">dieharder<\/a>.<\/p>\n<p>Quicktest in ca. 1 Min:<\/p>\n<pre class=\"lang:default decode:true \" >cat \/dev\/hwrng | dieharder -d 0 -vv\r\n# Verbose is now 0\r\n#=============================================================================#\r\n#            dieharder version 3.31.1 Copyright 2003 Robert G. Brown          #\r\n#=============================================================================#\r\n   rng_name    |rands\/second|   Seed   |\r\n        mt19937|  6.71e+06  |2700364392|\r\n#=============================================================================#\r\n        test_name   |ntup| tsamples |psamples|  p-value |Assessment\r\n#=============================================================================#\r\n   diehard_birthdays|   0|       100|     100|0.96498159|  PASSED<\/pre>\n<p>Und die ganze Testsuite mit:<\/p>\n<p><strong>dieharder -a<\/strong><\/p>\n<p>Die l\u00e4uft dann auch ca. 3-4 Stunden auf meinem Pi Zero. Also nicht ungeduldig werden.Hier das Ergebnis:<\/p>\n<pre class=\"lang:default decode:true \" >\r\n#=============================================================================#\r\n#            dieharder version 3.31.1 Copyright 2003 Robert G. Brown          #\r\n#=============================================================================#\r\n   rng_name    |rands\/second|   Seed   |\r\n        mt19937|  1.33e+07  |2176239946|\r\n#=============================================================================#\r\n        test_name   |ntup| tsamples |psamples|  p-value |Assessment\r\n#=============================================================================#\r\n   diehard_birthdays|   0|       100|     100|0.94314215|  PASSED  \r\n      diehard_operm5|   0|   1000000|     100|0.05997730|  PASSED  \r\n  diehard_rank_32x32|   0|     40000|     100|0.65551597|  PASSED  \r\n    diehard_rank_6x8|   0|    100000|     100|0.81062048|  PASSED  \r\n   diehard_bitstream|   0|   2097152|     100|0.91336368|  PASSED  \r\n        diehard_opso|   0|   2097152|     100|0.73418898|  PASSED  \r\n        diehard_oqso|   0|   2097152|     100|0.37598108|  PASSED  \r\n         diehard_dna|   0|   2097152|     100|0.39502100|  PASSED  \r\ndiehard_count_1s_str|   0|    256000|     100|0.36787773|  PASSED  \r\ndiehard_count_1s_byt|   0|    256000|     100|0.17203648|  PASSED  \r\n diehard_parking_lot|   0|     12000|     100|0.38297064|  PASSED  \r\n    diehard_2dsphere|   2|      8000|     100|0.70432781|  PASSED  \r\n    diehard_3dsphere|   3|      4000|     100|0.04228828|  PASSED  \r\n     diehard_squeeze|   0|    100000|     100|0.75737376|  PASSED  \r\n        diehard_sums|   0|       100|     100|0.01408896|  PASSED  \r\n        diehard_runs|   0|    100000|     100|0.34690220|  PASSED  \r\n        diehard_runs|   0|    100000|     100|0.61328407|  PASSED  \r\n       diehard_craps|   0|    200000|     100|0.45255130|  PASSED  \r\n       diehard_craps|   0|    200000|     100|0.34140884|  PASSED  \r\n marsaglia_tsang_gcd|   0|  10000000|     100|0.01356705|  PASSED  \r\n marsaglia_tsang_gcd|   0|  10000000|     100|0.88725971|  PASSED  \r\n         sts_monobit|   1|    100000|     100|0.92809349|  PASSED  \r\n            sts_runs|   2|    100000|     100|0.70064044|  PASSED  \r\n          sts_serial|   1|    100000|     100|0.30285544|  PASSED  \r\n          sts_serial|   2|    100000|     100|0.11043619|  PASSED  \r\n          sts_serial|   3|    100000|     100|0.04839608|  PASSED  \r\n          sts_serial|   3|    100000|     100|0.17163469|  PASSED  \r\n          sts_serial|   4|    100000|     100|0.27375082|  PASSED  \r\n          sts_serial|   4|    100000|     100|0.56129471|  PASSED  \r\n          sts_serial|   5|    100000|     100|0.10286056|  PASSED  \r\n          sts_serial|   5|    100000|     100|0.70147404|  PASSED  \r\n          sts_serial|   6|    100000|     100|0.02389873|  PASSED  \r\n          sts_serial|   6|    100000|     100|0.22846499|  PASSED  \r\n          sts_serial|   7|    100000|     100|0.16654779|  PASSED  \r\n          sts_serial|   7|    100000|     100|0.94266382|  PASSED  \r\n          sts_serial|   8|    100000|     100|0.64764909|  PASSED  \r\n          sts_serial|   8|    100000|     100|0.35786024|  PASSED  \r\n          sts_serial|   9|    100000|     100|0.11994060|  PASSED  \r\n          sts_serial|   9|    100000|     100|0.01492777|  PASSED  \r\n          sts_serial|  10|    100000|     100|0.28720292|  PASSED  \r\n          sts_serial|  10|    100000|     100|0.57725105|  PASSED  \r\n          sts_serial|  11|    100000|     100|0.22553762|  PASSED  \r\n          sts_serial|  11|    100000|     100|0.95557506|  PASSED  \r\n          sts_serial|  12|    100000|     100|0.01619734|  PASSED  \r\n          sts_serial|  12|    100000|     100|0.65794787|  PASSED  \r\n          sts_serial|  13|    100000|     100|0.97880352|  PASSED  \r\n          sts_serial|  13|    100000|     100|0.68669486|  PASSED  \r\n          sts_serial|  14|    100000|     100|0.82291291|  PASSED  \r\n          sts_serial|  14|    100000|     100|0.23893454|  PASSED  \r\n          sts_serial|  15|    100000|     100|0.23056594|  PASSED  \r\n          sts_serial|  15|    100000|     100|0.29490170|  PASSED  \r\n          sts_serial|  16|    100000|     100|0.20365937|  PASSED  \r\n          sts_serial|  16|    100000|     100|0.43336972|  PASSED  \r\n         rgb_bitdist|   1|    100000|     100|0.08378750|  PASSED  \r\n         rgb_bitdist|   2|    100000|     100|0.96079219|  PASSED  \r\n         rgb_bitdist|   3|    100000|     100|0.50520411|  PASSED  \r\n         rgb_bitdist|   4|    100000|     100|0.93998074|  PASSED  \r\n         rgb_bitdist|   5|    100000|     100|0.93667400|  PASSED  \r\n         rgb_bitdist|   6|    100000|     100|0.63142518|  PASSED  \r\n         rgb_bitdist|   7|    100000|     100|0.40546047|  PASSED  \r\n         rgb_bitdist|   8|    100000|     100|0.80941715|  PASSED  \r\n         rgb_bitdist|   9|    100000|     100|0.96942898|  PASSED  \r\n         rgb_bitdist|  10|    100000|     100|0.75015991|  PASSED  \r\n         rgb_bitdist|  11|    100000|     100|0.75802591|  PASSED  \r\n         rgb_bitdist|  12|    100000|     100|0.65231510|  PASSED  \r\nrgb_minimum_distance|   2|     10000|    1000|0.77053230|  PASSED  \r\nrgb_minimum_distance|   3|     10000|    1000|0.84584118|  PASSED  \r\nrgb_minimum_distance|   4|     10000|    1000|0.11341000|  PASSED  \r\nrgb_minimum_distance|   5|     10000|    1000|0.23386456|  PASSED  \r\n    rgb_permutations|   2|    100000|     100|0.40715742|  PASSED  \r\n    rgb_permutations|   3|    100000|     100|0.81781070|  PASSED  \r\n    rgb_permutations|   4|    100000|     100|0.68500477|  PASSED  \r\n    rgb_permutations|   5|    100000|     100|0.99509897|   WEAK   \r\n      rgb_lagged_sum|   0|   1000000|     100|0.99684194|   WEAK   \r\n      rgb_lagged_sum|   1|   1000000|     100|0.76612769|  PASSED  \r\n      rgb_lagged_sum|   2|   1000000|     100|0.90613954|  PASSED  \r\n      rgb_lagged_sum|   3|   1000000|     100|0.46950076|  PASSED  \r\n      rgb_lagged_sum|   4|   1000000|     100|0.59860291|  PASSED  \r\n      rgb_lagged_sum|   5|   1000000|     100|0.29088298|  PASSED  \r\n      rgb_lagged_sum|   6|   1000000|     100|0.23415810|  PASSED  \r\n      rgb_lagged_sum|   7|   1000000|     100|0.06778911|  PASSED  \r\n      rgb_lagged_sum|   8|   1000000|     100|0.61346229|  PASSED  \r\n      rgb_lagged_sum|   9|   1000000|     100|0.92572538|  PASSED  \r\n      rgb_lagged_sum|  10|   1000000|     100|0.99635081|   WEAK   \r\n      rgb_lagged_sum|  11|   1000000|     100|0.66983969|  PASSED  \r\n      rgb_lagged_sum|  12|   1000000|     100|0.25406935|  PASSED  \r\n      rgb_lagged_sum|  13|   1000000|     100|0.26988533|  PASSED  \r\n      rgb_lagged_sum|  14|   1000000|     100|0.75974901|  PASSED  \r\n      rgb_lagged_sum|  15|   1000000|     100|0.05332157|  PASSED  \r\n      rgb_lagged_sum|  16|   1000000|     100|0.05910817|  PASSED  \r\n      rgb_lagged_sum|  17|   1000000|     100|0.20150036|  PASSED  \r\n      rgb_lagged_sum|  18|   1000000|     100|0.96021771|  PASSED  \r\n      rgb_lagged_sum|  19|   1000000|     100|0.82156303|  PASSED  \r\n      rgb_lagged_sum|  20|   1000000|     100|0.74527528|  PASSED  \r\n      rgb_lagged_sum|  21|   1000000|     100|0.59687986|  PASSED  \r\n      rgb_lagged_sum|  22|   1000000|     100|0.53144197|  PASSED  \r\n      rgb_lagged_sum|  23|   1000000|     100|0.70237709|  PASSED  \r\n      rgb_lagged_sum|  24|   1000000|     100|0.26405926|  PASSED  \r\n      rgb_lagged_sum|  25|   1000000|     100|0.27224957|  PASSED  \r\n      rgb_lagged_sum|  26|   1000000|     100|0.85213972|  PASSED  \r\n      rgb_lagged_sum|  27|   1000000|     100|0.32911915|  PASSED  \r\n      rgb_lagged_sum|  28|   1000000|     100|0.02978336|  PASSED  \r\n      rgb_lagged_sum|  29|   1000000|     100|0.45641913|  PASSED  \r\n      rgb_lagged_sum|  30|   1000000|     100|0.26699683|  PASSED  \r\n      rgb_lagged_sum|  31|   1000000|     100|0.08961364|  PASSED  \r\n      rgb_lagged_sum|  32|   1000000|     100|0.54507637|  PASSED  \r\n     rgb_kstest_test|   0|     10000|    1000|0.18089532|  PASSED  \r\n     dab_bytedistrib|   0|  51200000|       1|0.22617824|  PASSED  \r\n             dab_dct| 256|     50000|       1|0.34197275|  PASSED  \r\nPreparing to run test 207.  ntuple = 0\r\n        dab_filltree|  32|  15000000|       1|0.19837555|  PASSED  \r\n        dab_filltree|  32|  15000000|       1|0.71066904|  PASSED  \r\nPreparing to run test 208.  ntuple = 0\r\n       dab_filltree2|   0|   5000000|       1|0.86902555|  PASSED  \r\n       dab_filltree2|   1|   5000000|       1|0.66198816|  PASSED  \r\nPreparing to run test 209.  ntuple = 0\r\n        dab_monobit2|  12|  65000000|       1|0.18372317|  PASSED  \r\n<\/pre>\n<p>Die CPU ist dann auch schon mit 100% ausgelastet:<\/p>\n<p><a href=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2021\/03\/wenzlaff.de-2021-03-08-um-15.55.39.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2021\/03\/wenzlaff.de-2021-03-08-um-15.55.39.png\" alt=\"\" width=\"2628\" height=\"472\" class=\"aligncenter size-full wp-image-16452\" srcset=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2021\/03\/wenzlaff.de-2021-03-08-um-15.55.39.png 2628w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2021\/03\/wenzlaff.de-2021-03-08-um-15.55.39-300x54.png 300w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2021\/03\/wenzlaff.de-2021-03-08-um-15.55.39-1024x184.png 1024w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2021\/03\/wenzlaff.de-2021-03-08-um-15.55.39-768x138.png 768w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2021\/03\/wenzlaff.de-2021-03-08-um-15.55.39-1536x276.png 1536w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2021\/03\/wenzlaff.de-2021-03-08-um-15.55.39-2048x368.png 2048w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/a><\/p>\n<p>Folgende Tests k\u00f6nnen auch separat ausgew\u00e4hlt werden: dieharder -l<\/p>\n<pre class=\"lang:default decode:true \" >\r\n#=============================================================================#\r\n#            dieharder version 3.31.1 Copyright 2003 Robert G. Brown          #\r\n#=============================================================================#\r\nInstalled dieharder tests:\r\n Test Number\t                     Test Name\t              Test Reliability\r\n===============================================================================\r\n  -d 0  \t                  Diehard Birthdays Test\t      Good\r\n  -d 1  \t                     Diehard OPERM5 Test\t      Good\r\n  -d 2  \t          Diehard 32x32 Binary Rank Test\t      Good\r\n  -d 3  \t            Diehard 6x8 Binary Rank Test\t      Good\r\n  -d 4  \t                  Diehard Bitstream Test\t      Good\r\n  -d 5  \t                            Diehard OPSO\t   Suspect\r\n  -d 6  \t                       Diehard OQSO Test\t   Suspect\r\n  -d 7  \t                        Diehard DNA Test\t   Suspect\r\n  -d 8  \t      Diehard Count the 1s (stream) Test\t      Good\r\n  -d 9  \t        Diehard Count the 1s Test (byte)\t      Good\r\n  -d 10  \t                Diehard Parking Lot Test\t      Good\r\n  -d 11  \tDiehard Minimum Distance (2d Circle) Test\t      Good\r\n  -d 12  \tDiehard 3d Sphere (Minimum Distance) Test\t      Good\r\n  -d 13  \t                    Diehard Squeeze Test\t      Good\r\n  -d 14  \t                       Diehard Sums Test\tDo Not Use\r\n  -d 15  \t                       Diehard Runs Test\t      Good\r\n  -d 16  \t                      Diehard Craps Test\t      Good\r\n  -d 17  \t            Marsaglia and Tsang GCD Test\t      Good\r\n  -d 100  \t                        STS Monobit Test\t      Good\r\n  -d 101  \t                           STS Runs Test\t      Good\r\n  -d 102  \t           STS Serial Test (Generalized)\t      Good\r\n  -d 200  \t               RGB Bit Distribution Test\t      Good\r\n  -d 201  \t   RGB Generalized Minimum Distance Test\t      Good\r\n  -d 202  \t                   RGB Permutations Test\t      Good\r\n  -d 203  \t                     RGB Lagged Sum Test\t      Good\r\n  -d 204  \t        RGB Kolmogorov-Smirnov Test Test\t      Good\r\n  -d 205  \t                       Byte Distribution\t      Good\r\n  -d 206  \t                                 DAB DCT\t      Good\r\n  -d 207  \t                      DAB Fill Tree Test\t      Good\r\n  -d 208  \t                    DAB Fill Tree 2 Test\t      Good\r\n  -d 209  \t                      DAB Monobit 2 Test\t      Good<\/pre>\n<p>Und hier die m\u00f6glichen Testnamen der Generatoren: dieharder -g -1<\/p>\n<pre class=\"lang:default decode:true \" >\r\n#=============================================================================#\r\n#            dieharder version 3.31.1 Copyright 2003 Robert G. Brown          #\r\n#=============================================================================#\r\n#    Id Test Name           | Id Test Name           | Id Test Name           #\r\n#=============================================================================#\r\n|   000 borosh13            |001 cmrg                |002 coveyou             |\r\n|   003 fishman18           |004 fishman20           |005 fishman2x           |\r\n|   006 gfsr4               |007 knuthran            |008 knuthran2           |\r\n|   009 knuthran2002        |010 lecuyer21           |011 minstd              |\r\n|   012 mrg                 |013 mt19937             |014 mt19937_1999        |\r\n|   015 mt19937_1998        |016 r250                |017 ran0                |\r\n|   018 ran1                |019 ran2                |020 ran3                |\r\n|   021 rand                |022 rand48              |023 random128-bsd       |\r\n|   024 random128-glibc2    |025 random128-libc5     |026 random256-bsd       |\r\n|   027 random256-glibc2    |028 random256-libc5     |029 random32-bsd        |\r\n|   030 random32-glibc2     |031 random32-libc5      |032 random64-bsd        |\r\n|   033 random64-glibc2     |034 random64-libc5      |035 random8-bsd         |\r\n|   036 random8-glibc2      |037 random8-libc5       |038 random-bsd          |\r\n|   039 random-glibc2       |040 random-libc5        |041 randu               |\r\n|   042 ranf                |043 ranlux              |044 ranlux389           |\r\n|   045 ranlxd1             |046 ranlxd2             |047 ranlxs0             |\r\n|   048 ranlxs1             |049 ranlxs2             |050 ranmar              |\r\n|   051 slatec              |052 taus                |053 taus2               |\r\n|   054 taus113             |055 transputer          |056 tt800               |\r\n|   057 uni                 |058 uni32               |059 vax                 |\r\n|   060 waterman14          |061 zuf                 |                        |\r\n#=============================================================================#\r\n|   200 stdin_input_raw     |201 file_input_raw      |202 file_input          |\r\n|   203 ca                  |204 uvag                |205 AES_OFB             |\r\n|   206 Threefish_OFB       |207 XOR (supergenerator)|208 kiss                |\r\n|   209 superkiss           |                        |                        |\r\n#=============================================================================#\r\n|   400 R_wichmann_hill     |401 R_marsaglia_multic. |402 R_super_duper       |\r\n|   403 R_mersenne_twister  |404 R_knuth_taocp       |405 R_knuth_taocp2      |\r\n#=============================================================================#\r\n|   500 \/dev\/random         |501 \/dev\/urandom        |                        |\r\n#=============================================================================#\r\n#=============================================================================#<\/pre>\n<p>Mit dem Goldstandard AES_OFB und Threefish_OFB. Mit 500 und 501 sind auch die beiden im Pi vorhandenen erreichbar. Aus <a href=\"https:\/\/man7.org\/linux\/man-pages\/man4\/random.4.html\" rel=\"noopener\" target=\"_blank\">\/dev\/urandom<\/a> (von engl. unlimited random(ness)) k\u00f6nnen wie aus <a href=\"https:\/\/man7.org\/linux\/man-pages\/man4\/random.4.html\" rel=\"noopener\" target=\"_blank\">\/dev\/random<\/a> Zufallszahlen gelesen werden. Im Gegensatz zu letzterem <a href=\"https:\/\/man7.org\/linux\/man-pages\/man4\/random.4.html\" rel=\"noopener\" target=\"_blank\">blockiert<\/a> es jedoch nicht, wenn eine definierte Entropieschwelle unterschritten wird.<\/p>\n<p>By my a coffee: bitcoin:bc1qj4grttyhk2h5wqask3nku70e3qtycssz5kvw5l<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Zufallszahlen kann man leicht online \u00fcber random.org ermitteln. Es k\u00f6nnen da M\u00fcnzen geworfen werden: Es k\u00f6nnen verschiedene W\u00e4hrungen und Anzahl ausgew\u00e4hlt werden. Leider geht nicht Bitcoin. Aber die sind auch gut&#8230; Auch Passw\u00f6rter, Lotterie, Zeit, Zeichen, W\u00f6rter und andere Zufallszahlen k\u00f6nnen dort generiert werden. Aber wie kann man Zufallszahlen generieren, die auch noch den hohen &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/blog.wenzlaff.de\/?p=16446\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eKryptographisch sicherer Zufallszahlengenerator mit dem Raspberry Pi und Hardware Random Number Generator (RNG)\u201c <\/span>weiterlesen<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[220,4606,566,79,1023,2752,1319],"tags":[4676,4597,4678,4679,4681,4671,1486,4677,230,4680,1025,4682,4675,4672,4674,4673],"class_list":["post-16446","post","type-post","status-publish","format-standard","hentry","category-anleitung","category-crypto","category-hardware","category-programmierung","category-raspberry-pi","category-raspberry-pi-zero-w","category-sicherheit-2","tag-aes_ofb","tag-crypto","tag-cryptographically-secure-pseudo-random-number-generator","tag-csprng","tag-csrng","tag-dieharder","tag-generator","tag-kryptographisch-sicherer-zufallszahlengenerator","tag-linux","tag-nichtdeterministische","tag-pi","tag-pseudozufallszahlengeneratoren","tag-rng","tag-zufall","tag-zufalls-generator","tag-zufallszahlen"],"_links":{"self":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts\/16446","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=16446"}],"version-history":[{"count":0,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts\/16446\/revisions"}],"wp:attachment":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=16446"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=16446"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=16446"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}