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-03-26T11:54:51.929769+00:00
adec5838973bb89b93d20904398308aab094db6d281df3ecb8ebeffb4618d89c
c7ef08fbade01d345a836e7f48307f20e8bf390e516af0a1e2611bca7095cf64
340e0dc0855ff7f5b7a5e38fa3859ef8b01a5cb924ba20d9387b5ad480ca2bb1
ffa6834869aa27619eaedba77dba283c4423268ff887cbf52ea5484fc91e18af
a5d74646fe51965fc77c301ba0fe071fcb2d321a316034e360b953c0a0ec6639
e11b1553d1718ddf7cf2ff7fe5c339ec2c890cdba1efb2072bde1f5f88b209c2
63c013280fb971dc6755a413cd5c1e1e4541d038f093adf42247d1936c115f47
665a367b007357bf77f8594d1508786ddf22b6a2e60b228290f76208c7c9c68b
79313dca1d7d10d23f0dc361c105dce16bdf20bd157d870d511476310995531b
af6dfd1cf91f990ae64baa99f17c99ba9883c04228d3485719a7026685ff86c7
4677ff7da6c1af42c8ea9faa4e0498d6423c2fc48b4be4ee358a765dbf0fba9a
4f262d2f916d2cd8f1fdaa786636dd5259a5328f22125b8bc0e9ed7ccf0ae855
c2040dfc5c044f92f8cdd48780802cf850ea8a02017c15e722252323d2894187
129684bd3631a80be67a5b6735215bfa15b2437d37675254157b9203456ed73f
692422780d97a314b8ff04c407366ea18ae8118e2a945950fae343aa3f5d597a
dae56b4958f3dfd4f8474b398e38609df5195a70ede8536a1e8f66c1c29e263c
ae818868319ae85c15d7b508075a2424937c2faa1815fc3fe3bb5937dae487cd
dfeaa0d1dc4d5ed0a8ec39511e5669dd2c668af97171a73968ea60e2f9a6e890
0960f248316a74c95438a7d8b0970d567af085f1a4eb275112eac604718f0a8c
b618975cf412e0d39e4d3163ba7e9467803eb8d7f90cf82fb30cfead34ea2b0d
2940a5917dbc3061dac49beaa7bb3fa76918ddb8e7a59b4287032222e24fba83
028e8b2cd3e01c6ea30bb7d5b33b89032eb1d397bb8b24306e5498dced8f6ea9
05efae61a99446cb85928fdad497da2263c375a98db179938d8df2540f22dcc0
b3b2ab27f410086f834e419efe091ceeab7eb4955a5b451fef17abc33fa20211
3316676739d858c018a21d0316812df54142f54d4ce59ea69b1090cacf443f2d
069642adad9404b058029b0c77fb072304597f1e545b212d2b45e617696011ad
9c2ef605d2f2f7d065b6c6d27c032097bcc2567c91b2be7366d5aed80a2b3738
132603367abe0960c43253d4c25bb422b513d652103e947a8492149d2c8e1a48
94f1e115a417e2ea7d134ae4d96ef11c6d0cbd8bcaed282365c4f603812c7e8a
8bdf0a0b3436ac6080ba40a83f6c9598d9771f2371020c6625fe603554fdcea3
9fa50039ec8aa3606fdb4836eb9e2672312e10ebb8c22dce44475e20497e07cc
22f13335b7f81403069036852244a41d3a96b4d39e7ea4817122a89c7ec59191

From the PIN diode (hex format):

2026-03-26T11:53:24.328806+00:00
cf8bea938cc0f0f1ca32cb8ccfc266cb99c7aa16d87fc04e48e82fc21109b5d1
c239da4a7c09aa1f0a2a78dffd7ab74573d3e3c5d97fbcb45a3445dca3e9e3fd
b7715d5ac3ec38ad273395a3e098352a57b79f8d8bccc0ac4bec5bd71e712300
2b65768a3491c19f3694360245060447946d82d43060dc8fb3722c6563a257bb
bd852424b65ad89c32ef493ab617546c85a53ffd2386cb7c093f98e186046af9
b4b96f3223bcdebfe7f97621feacd24405974156bde7ae75be1974bb07c12621
5e9e1a77d1df776935fe3b4cc7d57f4579d7e2087a3c0b2d190f64e5bee0e0ac
95b203ac82e2624f1af1373cff7e5800c4cbfc2903cb148f48f1824d7fec205d
9df9a5101345cdbd555b4d70b417747eb43bffd721e8a25dd715fb7b2baf2d54
7f16f8f88d798d0d9177a0f0c2a336568e3daecf5cc6fecfb99c6dd64c112ef6
dd0329c2184f1b207756e9411ee53ddeecf0071b6b9e2fba552e9bc9bff92fb7
04c841bc145d95c007867ffd71eb613b46e70904463e5a3435dde248bb4f4ab5
145485ae34a67ec3ff7feb41206f7b42fb230972bfcd348c63a4e6e5e161cdf3
a47864335831c819978909afe41bb38c4bec413035637a0838b619fbaa3a8738
781cc42f4f0ae2fe2d0cf8d9292f3d0ba9aceb5c4655be28b90c572cea51b2ae
15ac6476807ee66182b35256eb6ce1070c42587f38850323037857ebea64a092
507345ed6155000164fb882ae9a80b062819b4accf80dbd70df0cd14fd93d31c
1c40a13cf7661611e2a9d1aeb06d0172c1d26f62d6ceea1c7f15daf40a9c9340
931dcef87dfbc3aa9a90772e4cb48c652e04c4feb7923c6f2f623a660e787d42
8b500ff61cc600aa3e2688322a26e7f9656ccc916665cbd96742a0c5a42a8280
b9d7ab5b37b3329261c900ed5fd7b573427ab8746e81e2009a6e60317bbfd9f6
48de64c9c324a54b9b8bf074be2714b85c1f111a383ba64f095fe4044fbeb5f2
7338af2112522438dae7e5d47b404240586f96015d990da151c5415df0f57eb4
78d5bf67e31918d40bd073157533dfcb8fc396a68efc9aff6c4a09477416607b
3d1932828db9810ce5b4c5c3cb80b35f662f975f168be10703388179ba71a001
3c2a0c19227fe64b6dc6c65ab218ad9322c56ebe33cae9229d6bb0ba6ec40cb3
37609bdb3bb4d2b36c20528519bbb92b3434a64bc4fa9044efcbb9ea115280cb
fd9a24e22158e224bfa5dd4e876b251a63da0a6a8247a057e10835fe86385a65
9f2f1d728175d758137cd372ca966da85295921f1d28ac22a35a807b305d0893
5552c0f9e86c8a0fb0f5fc5c6e99b3b4b1b8c4e1884cb139ac76d7ef0a3d3794
fb604954c2a3ddfedc80a89db5641e265957ae29aa1ee40c34e0962b8deaa55a
0a2fe53a89b1326d105b9722d285107b6b9b6f38e86db0e957b00ef1944f5ec3

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-03-26T11:54:51.929769+00:00
73885651598455470904573108707648094029847024569908
73295290311027724827329157148106619727124900521413
92339583654363335876269285368632562390284377663172
05703997587467258640606835384335466572793024756570
70815095992448276007314550264996529685839260025727
21831341242795574437126178074331953678099499921940
15851303856419923030696556477334714708179571029054
23001587911989772108200934826211343044980899983921
49612925166313959793050732892125351381201849094983
27750928315310757053245386523192664072872567020233
34997019256693756659707804526660479639755338189391
15865479384547450944702002548289655043341891399224
10859404139204794635282844803802012421343735353765
35185032895449681122910353339121786725550382842123
46036910630536342013516320840496075410613817424248
89806770639389220773887175574256965725901283063043
02939458386074293604495492218108079036364724477024
21638789553560779468578130860544023813136757049666
44099672490616845667765113862233643981189804134310
40822451921858774999862648032862841247791273524313
41646545258848979655678763670524846555663503343479
86310242394428106311837959370346775187393648108452
43106905749769487033464351349995176941772147414184
15349279787139160811317865580928712680499091693123
71956362021751220303578892246229032229456566777658
66551644686345065066737348047688025512190735048927
30849133454369230596177356460501829824033251889486
24457890150274104355561938035422900996965083949180
34811982166248223246205744422672482164232519741028
09128939403501960329442638391011525472962886646863

From the PIN diode (digits):

2026-03-26T11:53:24.328806+00:00
39474092504094025399702227927872479417098194577424
09703110422022836915972788809052696383139390955673
39514963525342878359413992727591301335004301183852
45935954485402690604714809304896437914440199628787
89333636829056507358822384083365633534240963523404
06808511503588911833726805516586897417902516870793
38339458261919055359769927692108226011452515009072
49780372309879265560268800964103204372307727329357
65161969898591771280231626805933629321234375458427
22412141134519609463548642617492988556097617460341
94247927321986653061072707584786854655914783046588
20934992073427139759700904706290525372877974812084
33745266269527653211236635091491524099649764200051
88492551370975277940756548539922085682257058355620
28964779104512414761116972927085904085128744817874
21720018282697307982860807126688275633033503208700
60468015699785000100364268110640258072281320472828
64616002221769747609011493119828272110564764472925
95705444194676804001460496834660114798580214202566
39801528980070623836504238010845020103666097644230
28857191557950469700958115662284161029005410964923
91720095366575553916903920849231172656596679099504
79908115567533188236562364666488115001935313618197
65932680209103252411152117514395506642540874097116
22962361255030418529128097952879950247519522390703
56292186136001604212253427750998989078247347349710
90513457077686109612795596555980790832823325878543
52526675964468851782285436338836916578350737269910
06307160870853345690015947291429178819241450096882
49463129407234639028234893084785829208381576921053

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 2026