The Random Page

2023-05-27 | [radiclock]
next: Atomic Clock

lol so random

As part of my atomic clock project I also produce random numbers (why not). Radioactive decay is a well known method to generate true randomness because no one can predict which or when an atom will decay. This technique was used for years in the famous HotBits project which is sadly shut down as of 2023. I have a radioactive sample of my own, but, there's a ways to go from a Geiger counter to a number. How does this work?

  1. Radiation from my sample of pitchblende gets detected by one of my radiation sensors. These are the "clicks" you hear from a geiger counter.
  2. There is a timer running all the time. When a pulse from the sensor comes in, take the timestamp of it. If you want to slow down the rate, you can take the time every nth pulse instead. Whatever the setup, do this until you have 4 timestamps.
  3. Do a quick check to make sure the timestamps are in order (in case the timer overflowed)
  4. Take the 4 timestamps, and generate 2 intervals:
  5. If interval0 > interval1, that's a 0. If interval1 > interval0, that's a 1. If the 2 are equal, throw out the sample and try again.

I actually have 2 sensors; one is a classic Geiger–Müller tube, and the other is PIN-diode based. I collect random numbers from each. I didn't know quite what to do with the numbers I collected, so I figured I would publish them live.

The 2 detectors are set up to generate random bits at around the same rate - about 32 bytes every 55 seconds. The full 1024 byte frames shown and linked below will update about once every half hour. Therefore, please do not spam us with requests. Also, be sure to check the ISO 8601 timestamp at the start of each file, and make sure it's somewhat close to the current time. If it isn't, the project is either broken, or you are getting a cached copy (check your browser).

Also, a most important note: the data listed here is published globally, not individually, like HotBits or random.org. In other words, it is not unique to you. I highly recommend you do not use this for security purposes as it it possible another party may have a copy of the data.

From the GM tube (hex format):

2024-10-16T00:26:25.372750+00:00
4686574b21eccde8da9a85b8f6f3462a2c30ae206680855151466f7982ecdb50
e2bcdc72d9e16b785dea8658268c950d876ec85816d3031171d0878b26b0269e
f967bb634c2137a976be454daf5fe558581459780647eab60773be0f59bfa617
6f7d8b4070b248927ff938486fb971b6e3242cb19a7569ad0c3c6cda80cf3658
8cf3020841c3b0666fa5f4737f2fc33d5a4b3f558a2c98f7935d115e5c580508
e78ae7e1330ae6a543e92096bdf15ea4bce0d0cbb6288635c59bd9937ea7cc24
6fa9662867de5eb3c893c03fe5fa07302a6032c702126e7810e779173e7f35a7
26f640c7da8a55067deaa290ae674220905f43efe57197644708fbb99eed5a3c
f12aa9a4154e5896366235a1eb6115d0f5d3b95f06d528172883bfb4349a2db4
3021e0568e83555eac194a5f29e89ee9919fbfd28aec9fb417f8be8e26bbe854
85be25bba8b2e568ccb62cdfeca60ed10cf27b7a3168cb0f27e869a9a5ed9d13
8f137fe0db55126b66d02fab08a9e65f02adb22a6b389ed68e4978b7ef0b3b94
42c17cdb1f1befa37e6a25c8e38a7460a248f385b09f1a9016efcd48e398c73b
d1d3edd870ec3101c33fcc3e1a8cd8f0db68fca593ecd842381592cde7221aa1
8e176875261cb68067a5b07ef036f082426a2fa5570929f1aeef03f97f5ef29b
09d0d02dc944bfe71f6f1796734200bd44f3b3c2a2dcf60a498c1612a61e8dc0
28e778ab0192f18ad3ceaa02ff7b667cea0eba165e05368b8bcfec11e479fa68
e7d3431a04819abcf98b2a2481200924cd7707af559dbc8b87ac3a8d103d0938
52c1a79a3626474d9c47dca440aecc45c3234af65b760c2b5ff2b59c04c21b93
dece8f0e5c47cea86e73153f65f5318088e1b00bf1ba9a62ada83cb2cf4aabf9
811d2e2160d72fbc5e7aa3fe158cfff462f1eee8094581b6ec237a4c6c6d9791
fc8abd4a9ac52fea40ee06c2a1607907797ff56f880f4c5baef58f107da4d30e
e19c7e7b494091d58cd1413406f03cc47d2912627912877dac6e38722aaac26f
64bda9fe81a92574fbe8ba61ae042a7ef9f4898305bac9f2c18b23e67d402c19
691bc55100111edd1c471d7c949ff4ee138129a5c5fbf9513e9b18239fca2fb5
5aac90bb2cfedc50a8abf9ab6dc6d5b03b96c3ecc8775e219dcca28746f7ad23
56505c95233373d81a439291ce410c4ed59a64011a5e02d0a0f89db0b224d09f
9d9f24af5a29dff52680d5d30477f7e552bb0038c87cbbfa5307cea19ec901e4
10813e25e651011f529aa866a3f3407e0869939feb1876a6e68d65d1c34e38f4
07c2c836f4e70f72596fdcee68a50cb1c7cf4f3eaf37e211ad721308cc803605
999aad559a4ed8ef5e2ecf1a650fd7ded820e24b5658a200edffb84410a3440f
b78de147281b240172337a51317a7ea8a4165641864f0fabe68cf5c27917c071

From the PIN diode (hex format):

2024-10-16T00:20:00.769467+00:00
f9f8cc997d416392c90737aa894e8c3eae169ea5a5c0ac5e63f241e193a0641e
0070e43925cf99ba96066498dbde2a8feeeadd959bb1f8e1c37e0de3ca774981
a26ce922af4ec858b781658d926bb54f6538d2b05f4d3861942083cf96567926
8bc090c7e96e512fa1a2ced4012ffe1697d6ea18cd5827a8f68280498aca65a1
ea40c4ab539e0906abe5ae4e918ca2d90568f529f5b30f80b9012b3216b8cbb9
08c883c02695f5bd182f1f361a77063c767c5a7b3089247d0f867cfbdfb74685
f77b910aad58ccebd09737bc6c3b15fea3b81c7a6d6661e057bd9e3e9f0aab00
494be234dca019798f82544a9bcdc0634cff7e10763cd06f6a613bea4667320a
0cdab90bc0b227829908d661da391c0b85dd1750ff3203664e1b173edfc1c05f
133b2d9d19d0b33a369b4b9f7221ff64ff732327b0aa1109c92628dd855cf970
c933c0c0f550772ba89d8b37af39e2d5c2a6a93db6e8fab3ae37792665884122
57960c4a12755e2843a32e699bd5eed65f658b27c6e40497e64fc891217aabd8
a3fbf29011ba30bbb11ed50db5b258fabef0dad2eb650c8074b0351cab0104eb
f89a7c0d1ff68708f071c3cecdc421041ee0ff2ad2edf33749e81b025ed3645f
4c1aca2136a0a3a6d46805db5929045838557c72d64224083b0ae281874449e8
e5b2d92990cdce1efbf0462fc1adae9c4dca9d5e2343d13861c8c5061e5419f5
3dceb1d1ea4498c0eadc9ff30a2b69ca21d0808d4d49279bc65590aaf2ccb767
7bf9452828af549ad962c2303bf78f96464b1b4cfcb20c82ab4c4f11abf6c7e2
35e14f3a7ea5507e2b64b335a9bac0a00d16e9a177fc0a373cd47fb2b75a753b
a830d371b5823bc020bcd7f81d9653e0597a98e77e7cd24c8ba928c321eebd45
224d7b19e084f042d97d1fa3345ab77fa555b6a2fc91350d661105d6b918a369
0d3286da9b5ae9ff4a056549a2b286a27dd4999ab8a30377969687504636f304
e9c59c32a39c24acd5d471c007cca43e3da5a60a280a812e99c28a58a0939d69
997e09b4448765ee6fb348a881c56e543082ffd4c7e56898a5093ef7efa0fabc
e8a7043692652295ca41ba7e3ad74f9bfbc34e68f6b364efc52b7ea397ce1316
a66d669bdb406609156498d9db08a217eaf2630bf340a62e162d4eb80a8856f3
36210621fa5baa292ac9361a3c6fcf4a4a78533c19fa70e69eda38a73a6cc19f
f6fac761015dbb3af30762bae73d71961367b92f6f4b5d96b070c6b03a68c8ed
eb75cf430f1d0771f601e36fbf8fd87afa49ac523e215d80554a23e1704363e5
1211097c2fa543116bcc1e1928174590cd9378e49ac73da4bea0f38658997659
ee6291c96c87acdc93ee8984caada2e8a09921f91d738f83c6c4953b2364302a
84e879d2d837f75c4c09358a11448846a6180bf3e770c6d138d2fd0a13dd6b3b

Ok, so you want decimal digits instead? I've come up with this technique:

  1. Look at each byte. It's a number from 0-255. Throw out any samples greater than 199, and we now have a range from 0-199
  2. Convert those samples to a 3 digit string, then throw away the first digit. Now, we have random numbers from 0-99
  3. Concat those strings into a really long string. Now, we have a sequence of random digits. But, the string can vary in length.
  4. To deliver something with consistent length, I can just trim the string. But by how much? Since the probability of a skipped byte is 56/256, we would expect about 800 of 1024 bytes to be usable samples. There's a 50% chance there will be more than 800 good bytes. But, there's about a 99.99% chance there will more than 750 bytes. I still double check to make sure, but that's what I publish. Of course, that gives 1500 digits.

To determine where to make the cut, look up the binomial distribution probability. It's already built into spreadsheets as BINOM.DIST, which is what I used.

From the GM tube (digits):

2024-10-16T00:26:25.372750+00:00
70348775335433847042444874320228338181701121308088
14072093348838404913351088220317133539387638580387
99763355691890697775958888208920067182071590158991
66231125396412787246275672118513823644775417057312
60082854884002086595760211651527479561907563853844
52479317949288050838511065673250899464888240345397
55472667361169024003947947926307484296509902181020
16212362275367386499388506256244740366324495671351
00710885589060426964217888505498536197218595064023
40319180525445804833864231859472257495415845599138
59802390423887843390378768780482446614122322490415
39056965571943192785180702477108699502737842075658
42732083115948669324312763260637381696627233765926
44227252995912490195636226400465476656214634266142
23041738288228036576265430660647658709417403279455
09456891311123501566008968799462107340221866304192
40207101463870022302241486229405543939172104672604
29548839423629320936190775855788393572584116610956
82936754543871775671646474699535749118124395815604
94274743149271681015216301492836761186549873686078
74712929463396478894226321409809692982352276080951
45388974549747640694619621072127113615769174431625
64145626237364454065520660962541189821183525721056
14427094110089692969371686977404422637310586933935
25644425052797810017302871292448591929416597816255
24355947819072448744806871710998765950951994335762
35707335868092493551152667464565127854000126940260
57767836595759367590413828041982870056248783076158
01162962378101318254680263642608054759241866410195
78560794541514891104651277997962755517731419082854

From the PIN diode (digits):

2024-10-16T00:20:00.769467+00:00
53256599460755703778406274225865659272949965476000
30001257375386500600524243495577952613197329620834
75788883290141460781790156769577569748323150862138
39924499108147616201472251248839683028733801616496
71835809067174784540620504417915288501435022848508
31923849892447315426190660182490234837362515342483
70332345107388515588085921638428220902978789586259
10710073755260252143308474559299762616186011069759
70035010128511927839305308975728113323805003027827
23629392951959455725795854557559143300153539767017
09384033921251929280194368573955755794666961827974
55213801366534875012741817944067634605559501393998
04517945332271634417864887773013817888900112281676
53287101045424133135081395963304304255732702940095
76263354606366040589410488568524146636085910293568
73784144307047937374567757943567569797063084256177
68529259104305332841777339559885447083032369404075
84549894485943507075277678123071767917719953795826
65802643007953698692601322611910556027788390175968
48138130599232882950838922522624763969409533896934
77232532662531635290832765858262455313021705852463
05135034559074050173627834622553548463031950503580
70540497565063563672139207646261656610401029465394
38886047570553260980683501117972682997108448309904
52650962608867045446013449658626587955957804790097
43266351192266090255640209210052086223991164664622
45788410368654330633917041425426601174742083602512
58566758089359999701938758079886611350190385471175
93507612987658041767152907130111914322737282623393
28857435126799181709244765671707302540236944472054

Or, perhaps you want just the raw bytes themselves. Just make sure to trim away the first 33 bytes which are the timestamp header:

Here is the python program I use to generate the reports above.

comments | Alnwlsn 2024