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

2026-06-10T20:46:08.581816+00:00
70fb094cd55c9781606d34aafc9ae4371ee77da82bd40411f5a59eb9a1451c3c
255e4c4327793801ed0955b74e429ce08560c3795b44dc5f0de79ecfff5144e8
471fba32c6b4b30e9a0c2cf8f167863fc04046ba2ed5cf9741dbb3b5d15ec071
00b5608d2bbd5f02b4a08c55f11ce3c0b083f6f4f9edf5e8bea480c777e0200e
ac14c622f13ce1b30eabd621264cbc7f9a29c594c67b8a0dc993573c7c3ced2a
a789a795e7bf0e9180231eeb4fc3d70486bb29b695471ad449df52c3e83958bf
665470170b842499dff3b4cb7f9e390fb5dbae7379b4970cfffde73f5c224b20
80a0cd6f12a513cb160e243cc543d973b2de9c5faf7047065a79a6cabc1e9658
420d78f9f0fc3b348b2a2c20fa2500be74be8d61dec07bd6d5855486427ac6ca
1228dca7a2a78069e8f203b4195bd9d09f3a25ee9c6af4980ab36247772e38db
3c3d42bb26ed739cf02ec05ced5ad66d5ae310693eef011179172a2e61d418a2
95b596928398cf6b201c23c5e6747c4662f6c0f72476ee31132e0005e9db6789
9eec6b2f16a6dd3d5168f8d9659f6d3778a8dcb6029ec58faa0a7ad5a0cf350f
8a62ed072379d70b76276eaad3d24842ecb2f2a5e81b79359cefe20f944881d0
8b0039557bec4a08e65817e7e887d4072334a7b20ed3f9955fb558627a9b1029
efc4fd1d6ddfb55afdc84fa5a4fb76b927a05a5d75ce27af312b097da6bd3596
9939f5a9b25afbefba9570f3b399a78be09643f90e7ea3f814be6543bcea12ce
f2d251984f8ee20827e21cc9db79fc71871c244083436158eda0615fa3e7a027
d817eb52ba46e8e7740a2c6583357acf43249b493cf27ce4d4bf0fd21b086956
4a8aee920d485a86bb8f2261fbf98d54bbff0bb941a4c92d5048ea5b4ee04957
432441e95bfa18daf599c894618e7b351a81ec8d4ace5591ba0ad252e7920562
fdcc9a3405f7f90400fc9db7d421355624455d48f461f9f03e32d6847cbaee97
c26a6f14b28758e28efb4ab396c46455a0c57341ae37bdd8fafa9b2c4441ba58
fba44909624392be502ea982144ae09549ae401667ecbc691338fda7c12dfa17
fc8477bc5614a3d5c2eac84e2739b44780cd2cc0bcb180b200def25aeb24a774
cb8da1449f99958dccc97dcb7c6836e9470ec01a53e1ab12e7659d1e84786090
b155fc1163f27d6b1158f3f6629f2690afac4ad9cb9fd9f644b0cf02d15c635b
8de91095690f31405e5d89e3b55d26d2ccd301ca7eb20600ff391c8c2ec59a00
e36678f2419d62b18fc809e946de65f0aa7d0b0772fdf1d906c433f239df248a
ae468de65ac9c41d201f89554502d4dee804762a0f1fda60974c220e97bec0f2
ce109558f45b3fed0f75c3a4ef67e4c2f347d418031163f63a69e94c17ac4fd1
4002ecf85a2c893336fdb07b0663fe9a0534f98dcc5fa8082b12524737e664ba

From the PIN diode (hex format):

2026-06-10T20:42:55.581095+00:00
411cf8f8233e1ccd96e7fc30a550cefb6cfcb866c4fd036d6f676003d1c7cefc
b08225e9680b0969d76207655aa595620609de9eb79bfce36d26f3bdc4325040
f0a51388b6e2b478ff9936b2171a594b932d56219791899ff6e350080a232d82
07e02e9dfbba7419ea089d7756923d174e14ca43dc394f58518eac1dcb505f2d
63a83cabc8fb817dcc757d53dddd97ebacca330c4eb80918f2b35e5258ae9ec7
64e86e5f43b6ce4dbe3a93d58d6f1632730247bbe85d3083b3f37f8a76176928
50a330caae48a1a05cbca1987f8c894a95b73965ae0ba390b4a4f8ee2a3cfdec
ee3692b3349f3d1d2e90e4bacd7f042d9d44af519bacb0fa85aa6eb2d0e76b9a
cc818e2b16e17fa1579a17f31b4bada84769691e96a0730bcb59ca75359a864f
3094377ae185dc6e64fe672fb42392f435a5afa0208a16e8f8f73496059bac5c
a76b250ae7411ad9672b36f73471e37a62fb6623261ec5e9228a0701caea6258
dcb8ccf094f319a150da456597a4c5bbfeb98da2714261866d91238ac7af24d4
5815ab26d47de35d7cd467c52b2d7cc12775f454d15b5316ad417d89e8a36581
4ede4af816fb480ead9317a6c199bc938598ed02cb416d835c5aacc446ab3da1
ece834ddedc5e8739db812016c4e1bd9902297aed0176706cd194f9237abaab0
34656a2746bb3a0ecd07f20f613fc7cbb0d20ff9e77db779009ca5fcd144dd26
7d01c51dce7cb0155b63b92d5ffbfd5f63a0aaf86194a2801c4824fcc71cfe6e
abf2b3932675aae2e149628d2a8c1c3173defde450a2c1fe1aa41a0254163d39
606a9403b956d1d66e0ea5cc9b7e479a199a5801899d8bb9555f0a63e3c3498d
0fde234ecbbf2080dded8b2a193db4d7d15cb5a764251f768c021947800956f2
8984db22da584a3695474d5a7928250087a2e0e9ddfe1111547b2f42308d7949
a27bf1063afd1ce6c68443b4e504b9f52567d121dae2820d72878973b30ebcfc
e226d346cfd3e32f6d45a1141516e9292dd6faf19a724ed88627704d31bacbb1
b379e951a1faedffa1e9ddfd3f6a3673660b33e4f9ef40fefee7d07d3693147b
70d5872764c69f9fe898ee71b351494050185856edb3d7f4f9bc21b407457924
fd53b43dff372682636398e187db6a8960a9ad6506d28c474c86edfc732c35ba
baf0194921cfe7b9bfebb616b582424fb335837c529de8075a7e2ce096fc90aa
fc9f2de9aa6ee70b15c2c803a0a81f31398fac0b9be0e22b3c96b7ffb74c755a
32d7a4fcc7b7ddc396f052f92a7f7ce862911104f3afb2ee82c19fdf6255a15c
12db922c6207bd69342048ed63c31e3a16055fca153c18b41f6c91c60ae24868
ef2479a501c52e1f32dd822f325c17f65e0162fa844bf04d5a7be31da447823e
0a96f3a40fd1b446423bc0ec6267935bbb090404bdbc20ffb3d5fa89c27c13c8

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

2026-06-10T20:46:08.581816+00:00
12097692512996095270545530256843041765588561692860
37947667392156010985837866563396952191689513588168
71318650988079145412440334639264708646516579819492
13008196414389950280604085289276319064289919321472
20983460791471333876882754419748982338134787602460
42673767499114452835307995043487418249712673829557
88910284122311323653802758571581741521805112639234
75322860111865192214366097671578569575127106902166
88305088661320595239424432370090169041979223338434
66229818406762672805038025915958375606521079987119
46566061668738155646929290099016056201172123424697
24624981504631520732283597162470989236184919460005
03375807472266618104015909552068820258974370102260
53153898073521111839107072667865272153561548722939
00578523740888233507355267781449958188982255164196
29098190796564188539609093173975494309256689535053
57697890864912795367395067142663209001678818815279
42083928211335283664316797886097956360392382867016
10440131532267365573602491152708058674384613729034
87433497418487118565644580729178738767366591245348
97422353262941748545861082460598545205040057833353
86366993729762503224865194061120783588427479509600
85609715657455895544686586886473099867469080466930
20744973746422038805195667934523321988862063947839
57807128449288772878009036671641616859534941252404
54711492268371180157303220964477851799250717889859
38447572745968760292999141164905154964949337819338
01267806005728404697540002206557987743097001702511
07140696515736387470419096293231378569020418421531
96517634145190921649889163151795640394712403179958

From the PIN diode (digits):

2026-06-10T20:42:55.581095+00:00
65283562285048658008840296030911039603997630370411
09059807019065499806095883550938899650806465193682
80205354782326897547458633514537598008103545300746
57861625085719864661237820675779888142722980954599
68607129251725835172511278840924799482887458990010
95678277905847411122501502718793483179273818230540
80634874726160928861522740377449835701741163448064
42605446795259612946448627044557687581557276337010
78075429424322276187542327757368710505305060151189
17535434794848552233100003478035465365756032382252
50055572926707371065260343545213229802353830973438
07019888844825618069015164978785416213669734094535
38997536882171382593240397434524933917849183227365
25376301297874227214734723669353884733520265093192
90729670716161529715578418010878274434517423030625
79465571707652010639708758140715976399761525832100
56656838250197292476219199854595959960709748622828
72369928107179473817707398414240284915806293266426
02842261579606480385861014655526715425548801375739
85859510999573411535789132283942256180928167003731
18400225712809863732348874544971779021403700356217
17842347664841217362230658289832678004853703333013
14353715791488387047096961202122414554147834391277
49867779218161616306541502115164255447202312353900
98595952137981736480248886798833800769213683806155
38309999523506379669730106407176341544538686257333
85918222813066797953312482570790264450447059457010
11219403606831495743721155436050838376179050649983
95508242272498451704757830935998856192184644980789
05523272999530582205952160248031084598107204362165

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 | patronage | Alnwlsn 2026