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):

2025-08-05T19:20:48.632433+00:00
9dc0fe8c55a13bd34adfc11bee074a79556cb81e4752417bc9bd73fd1b5254fc
87d3aed71169beadf9d1d227e99be44c384896dd295e524f21efd28b4d57cf05
275051ceb079cc9a445003b9ceeaa089ef3db508e33017af46202e8fae306885
baa8bf00915c92c7289ba9d669a98636fa6b6c00b48d3867a19c1fd38cbc9421
c45f06f16ab734f97f3ab9480e5b25d32654f85f345a122159405bdfe0b13128
52c3bf97cb06e7e54fe58bbbaefcca2696272eeeb1062f1e5983e3ad56b5d240
abd4391c54899f2d850fce851be427746d8e890a3f1a9d0ab3fb6b1d625df3ea
f04b0f93ad98fef5d0fc8de753da32bcd07c6836d04616140070a2cb76762234
e2494bcf47a7aa3a6f241d183045fe2bee1c491e96c9a0951ce6d154b5a1bd26
405700f61e0b49b28e947d9a84b096b59c6b0429be42a6022ecfe6c8f32525ac
bfb522cc0ba107bf3ad8ececa2bb19c4c57c7919081f6ebfd1e5eb35890e2dbe
b4dd73556b0e1ef811c572d2d9d4ebbbee30dd81702c5afb3f04b49c4f1b5ae1
67b7dffb8b2606d6daac143a28777fb701173d85aff56a4d9ccbaaa8629eef29
7bf495d8e1be89b6d09b279127dd8956f9250df96096d2d53ff8cb2774359f19
4302cecb4ac01dde60e57086806133db8468d707dcda73194e77a6c90bb7daed
361b584778f04c80a73d3b77bb4357eb07c1ba5381a05ffc32081dde386a24e3
436079673f9cbbf09e99e8df71768fb830c81d641295c8cbc6d0498d3c29120d
de3a70799065f5848c4f7361cd6dc8b42de856c2b6e32b53efdbf9d56cac38b7
ed3df8d53d3deca69f16885648af833211fbdb015f152645cdd1979c3b01734e
0be836d78c31af1cd64bb0efbc9ddda70e93d96c01fa5ce1ae0f97f74ef33a89
4dfcb61d52cd8d3056a303d9a213107140f52154648c75c3d604701dbb2c9d19
fa034ebbffee3f3e546aa8f54dc56ecb58bd5aef01d760887a9caab05bf43d4f
379b2420a4695b99fb68b2b5f12785a3d0409ef65108970bdb2bbac719d275f2
f9de5f7c45d416b1f16b843a871dbcc0ca93c882bdcf7b44b68ce9712fa2a56d
56834a93edf7e671a606ccde3d37036f303a4eeb69c5ba60cd0f848d7da3aa2b
3ba8d6d4f1a37e890480dbf0aa50dbaad27b1e9064364a12916fd0ca3130f17e
743593e2f114cc3ecb356bae80264fe20867606bbdd40791cc6085bc57959f85
8841a9b8dd76c34e3c27ff3f4bcb470544606a48f1ddfbd71a1d507510d58ffd
3857754e0b3ad7f90a9fc560377a179c5b5958c524c6235316ad5bd7245653b2
241e20670fd47114f6010747725da36406fb8178a65c861062531d9994f378ac
def43c2664e7d14faba5e02077067f8eaa6527a12ad15257efed1ef0b2f03666
2bbe8988aa0a5ceba6644fb2813572645faf61a4dc95a712a77d61b161006149

From the PIN diode (hex format):

2025-08-05T19:17:23.431546+00:00
599400a8bc0c7957e142763ee6e1f417e9b5cc8f58c2c97d46a14410832def77
e8994f9773f04c05467d1145e839c462daf1cbd13781a03c7e7f411028c5b095
51a06e95f8c96fcfc4db4fb3788e06c548eaf31601897e2d153a57b927caf108
37b1753811ce3f964532b9d6bac4f8e4de1ac694cfc2473e045bae5fdb3cd907
963924f2bc63b5877d861ade3f790e9d6ff1343d321eef0a4dd737741d6bb761
b59bd41f1784b28d24e5b0ddeb74b38921e8b65d0e368b935adc7642154a02e1
bde4d08edf002f0812b534f3c5ee992bc9b3e026f02e72490050ec4a57c32bac
f8ac989091618170933678cdb9c99627178d820e489fe7b160ff8cddd106a9c7
85632ed3dabf9300a17dd45513361f5da844374c986f2ba6641aec0ba472fe64
c11ed97807a31ffea7060cae9614afab57ff088b482a8b1812a251843783044b
019130e5bc17ff2c5735b87c3f74c584a17f761df15587c0659d72109366f52f
b06bd5ecafd49c75cbaa926f1b459187cf855b5e1d039da97ae02eba93d7ef12
2429720d567b59439f59e75f38d86c091b44bb662ec868ab766a4a042879924f
07f4f546b82e2241ec32fbe52a4401728b724c101c46abd64c86f64b28939242
c3dadc46ad492adaa4b8e1882a8414cbc2c56b841b973af4d2f530854449f11a
a3adc93ebb9159e11f7c76181b567a38b068c1b9b11432e26e84c21c549af68e
cc4020f47c078f7b43f90b20f0f187609f53d0a47156ca55cde94f2661bb503b
16524ceac86759b7d7cd20dd67378e94cc4a912414637bdd64cddbc626ef1264
ef4788ccf94de9da42178aa3ce2536aa81c1e37a7109ba7b5bb8d55aab2cd6c1
3f88a5ca73382a3a782d78f79dcaf039cc300edef94c015fd5b9c4beb43b5fe7
c904f293a952474ecc4895c1e8875a522799d60e2e92c6a323da1709db2f621c
a7c1dba42c4f5ddd8992f9bc43b4fc729842f31cbe47139b0ed58842c869fbaf
4cde1915e05ac7bf8ba2eaa7f1599f5eba894e3a7ad80cbab5d4e725688ec4d3
aaff211bba2ae1aaa31c4c74192564da215ecf37dbc9be926a1db929d887d396
14c69eba62dcdf3fc70e5cb297e70cb2c30bb917dda2e796de5e5070899f50cb
2f7c93d4eda106006a4ac00dbe16e37cedbab8f0c5e538b55b53ad8a386574b2
cc02f6788c5172806866ab8698cd14f0480e00abdf51a4fd0e47a1299449e26c
4c86a7d1806b7dc63704c7b5a2c9e3f4de5ff02a687871da88e8b222431bb562
e1b75dc9717244b7b265213f29198ca5abb18ba84da96f3081eb797e127b5920
40d6244e927f6405728077354b8bd894eefb0d34136beecb1581b00ea6e01fd8
a7d4fe265690dd41b6dc166ff2064bf0530d5245b2b8e087fa23fcd53f221d1f
7186b78ca7170a165f7f86c8106bf1d63ffc91c3f68dbb3093bd7bc1c0e4afd1

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):

2025-08-05T19:20:48.632433+00:00
57924085615974932707742185088430718265238915278284
35741705907339557656725041948279333977870539808176
21546880038560376181084823757032464374480433866891
00459246994055690569345407080080415603615631408848
33969506068352275885721491373884955290183389649177
49408295915106793987743850394677064730893173868164
71572884375945331533273916094237106326571079072998
93751547735241835088240454702220001262181834527375
71677058113629244869432873305060492884816189386487
00301173784248255432765081560704419066660246373772
91813411610791586287259697242125083110915337144590
80158507143017971487482912449063048056792790038339
38067220584019278301236133750677567068985841234990
37825539453937863713965063391653592567027492299612
34289751320407152578196611835427887120762867615919
87678707938683296095500829560636679621036356875853
13184384482900184998734160411813581221440132407915
97098045869482438308725683616161665922368672753150
17019521386951565901157811544049752875768857671447
08019274155178583777822982414886630362191613643384
00401795041229874457250378876362840668779710888990
01963622567076916179555536326405915304788139336364
58810851114386992517952469227707325835298892473089
23688240134762650986317447136606615503114858780597
86961532412563704359686326370428708070233044005474
18451149482616534720625307742838790803960789074596
33888749593336656984189578603963757105689606722629
80171643568717781158105997965522235691898897369835
83227391368683783630320315132001077114936300062920
66923416988329534820726038007971653219062742700139

From the PIN diode (digits):

2025-08-05T19:17:23.431546+00:00
89480068881221876618622381438894257061681631451953
79511576057025176957969855296060262765164097764981
60104911967979204206977222013726452158878539085577
17561763506950858696269848947162049174956007505736
88998135253426632114571152615030107755162907839781
55312332784136761679373382931454394790186621740289
42004708188152975343793846147300807487954372725244
45972912475420855039234130147259779640066999339946
91470061258519543193686855765211436600261164140093
30200763316706127450207571870839724239241862813255
31047501454888234487538424631697326127182985359201
57141647024776077556177046112769453533919429035769
22468647183641141386238967598995560809276887024604
71180674044021467907708446346550426801143914761628
70717634754047466695707373426484364232209497073227
51584833687326637362874589312418242786225676049385
77205010329428845442643224074323671132359659836413
86857938978780592282760389833203554248744536209923
00983818007136776623386337547029932213098623918490
71449363366515564258204520575748147601958596908059
95044769827178724993359082395314464698633523094798
28679364447993374688678014526628907119551436660575
76252190999139626789599486377858221286813704429670
33278642706328761625370033945590460629854135502098
58869863991492785112789511852362509480123759804724
47610600067492139022248684975681918373385601167802
20408114280402713452207214007181641471614148730876
34672807259855049981629542042013367834672781988393
13146883780133634125406571773968776911482921261823
89326436784627000514281953753948135219072129761466

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 | support | Alnwlsn 2025