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-09-06T17:18:08.799764+00:00
c6e65cccae85b8b694726f010b41f28920f80ab98e1fbefdd9b0983c002e4e6f
f15fb7077cbde8d8c3380815894773617bab2dd460c852d19b9a3af1cd75e67e
0726d466ac143bc236e96ab49ce19e69fb552a8ebde67065eec30d3af96c01cc
e8bd0b51adef677e9e48a02d5b2e3a15aa326fb27973272c231ecb49e758adcc
721e79fa9e4a91cb4aac831a486dbd00eafaf788f4c993774eb37d0aeba272f6
355dcc5f9eb7c0375babd0cdb7aadbcc44a3e70fe6507df48f1cb4fab4780641
bbcb44ea39a645421bf1df49536560122935a1967a3fc839662b1ef2b1153026
fa1ea5a6ed17384aab0e083a9796d5b65a3ff10986fd559dca9d9c4ecf4e77a9
cf4d0d561de4f75536f60055a0fbb4230c21f86c74ee190d80426860ec167aad
554721068370aa5bce59ba1cff83a1bc7a9a6e9822151b215a75a1f783362cf4
cdf51bc7b5d442f821e5593e7e2abeaeecb40ac1c0e316fe88e8c64339d5f3e0
66ad57d1abca734faa43b02847e7f9163a541175130a3f54625fe37c74f47d44
8fb72fee7e06140ec2cb27c926cefd03acefe195df2bc4421d3cabe0cfda2803
ed5aba9fe140b3ecfd8228331066a5db7605702684a1d03b008f8cc5c6525348
f4873c20d71020a28eb7ddf6222c413c6d45eb7a5bc43e3728d8f7d09ce11ebe
21bac8151b0023e3d6a3a50a9a04e5a463ce331db024636ac404e9646a5703b9
3992039bd0a5d0c0707414e0c719b518ae86490e2d05a69c00e99432b7b196cc
0b0beb4112ca39d237048132cc852208c0c4ef8febf53e67508fb7d4aa2230c8
bb13f24077fa47a98b6726b616d67b0ba4cdc0cdceab8bed5224cf24b3d33110
1e6a60bece6d25f414b35f89976b09c8b656c268fc10a9f56bf383af6b307b97
a668c76b6b6c4bf2ccc59e9bbe35f1bb6bfd50967134abe48d28160409a225f0
fb61d8b16d50a69f83321d78dfb08a824a29b16a92f32f780ee413ec4c836d7e
4101f9d091bd4f6c42195507dcaafff1e4d056aec90bdaf72d881557fbcc2998
6c0fb8d37f21a5ea5fe2f3a677e145fe8a93af368a7bcd21998e561f1ae1b32e
50f32310021d152f0f6316453662f50185d95c4f3f8dd2274e2e084a9cc7bc94
800e0c1de681323d836fd3031b7772541c5fa793666177ba3a6986240c618874
67f2bb9158c8cfa46e5c340ba907ced7fd352e440d6afb24adf1b62bc05ef0fe
2783b51c6ee75a7e98a7efe9373125e07d4d358ed56897a503547e44456426b5
28931598e829cda300e8e79360469b90d4b2afd865fb9f6600c414484266cc38
ca1c98740fb65efeb5f594e4825f09c0375f50a3ce04760f1047809aa6d21097
8d85ec1f691c8248a8fc1d616e8f880d08e72324497b9403f12c8d9626490655
84991ed0ca4e6437d537c30ebd081af5867773524b056e8f6e0f038bb2a29047

From the PIN diode (hex format):

2025-10-16T16:35:47.251838+00:00
b7c014c74eae671db704a8a381274064734d37dceab7b1328c603f7db00d3490
d6a9340c572402b588b58cc73df3b7d8ac151fa4274aad57b43ed0515a300d14
ae7475b14b18f51fc7006ad700d56ab3fa1bcdb340e86e97d1aa3b6f72b65bac
26ba125bfa871a256164aef44b3c5e5912053be78adbb5877ec9eea9e9c7968a
60dea4a93490cedea04921994b0f04e4e64de757c72ba8fc7c400afe17973e9e
fdd1fabdd7fe81f597f28aed40f3dd1424e5e390e821aea5f4eaa80e850b6b22
163a2b4d91830af87ec8d2096c4c6e00e9a5123f972c0c8467f9dfabcb408fe4
8958e6b23f1f474a8b8684f1a721a9f200fd0f99284f4bf17599915484638db1
880120247f36ad2d24c03d4f4b5c73164abe8586abdd2b331c806ae463672257
cb035ab47cddd9cbfb5b5e56bb9296b69d5f0ab650eb451c58dc2e8228193886
f5c8def2ba665af6325304fb2e0063389f66376966e6ee771fb15a26d2dcdd46
dae007c5ebcb9d75e7b9c1a6549b3a37d25e8374eafd2856139e554784e7a71e
8a0d64a4bda82a222b9315b91f12b71e9d7ba562bb126a2e0265b9177b2b0f4a
c5bcd91fb29bf139860d77dd740330bfa6ae3d44b69a637e8659b2fb392bf18c
a0cae2af6cd0df60b1e7fdb871d8899c5d7cced5015be4f5bd7340bd9a83c0df
3cc7dc83649f372ac3b91268bdacb817d0bc236b8486ead54e4ed97b6efe35b8
f0810cbad8c4934ce69f7d7abc97a3f0a4d84bfa91ebd47637257606d8714842
952126c1b39429b18e898c53d82023debfc994186c3de1ac9403b657193db73a
9b6056e44e92470c659c156f9e09d1e12612832b8e5a884b5af915696a185afe
7ee2f44d45666c17fdc26173b8f4960a3aa6cd3ad4560cd1d78269b79f9c1a00
38796102bb6fc8fc117542a2324d4916b3bf37541282eed86705006e0598add6
51f9d9ec731cc617ef86dfb75531254f330a5e4a99db6df25885ab00d8c6abf2
1961a4ddf300bd4aefe9d249d01f3922f9a4cdc634209cd20463f16553376fa0
78c84b017fd6f7eb919b9854741154bb9a28d85c1e82ea18bc99255596d22128
a64c48d07008e3a4494ef310dfe58aa6a90957686c590db38d7f60cb571d7606
ce76e4370c472cc80d2ae4116bcaa449d876a39fcf58028b4f53908cdffb54d3
4f81603dc1171a0beb29289f06b616d189e792389cf3ade71a2bdbf0d3c4d28f
4f8d93a81090c6144caf89c0d25cae52d1be9d4cf07bc90236938f08ac113647
4435ddff88bb93f28c45a724a96df8f7046da18f111273cb84fdee6a12cc54c0
a9aebaf7d9dfc8331f02204af6fa541a340b9ee7f026ff86d1aeb86887d5d6c7
7385b85fd4fc8065bee6e022eee249895aea95669a54d492c6268ad67ae6062d
1dcfde6ee9831e1a6c8a5403d9e706f9787195846f7d7485531ef57df3c5329d

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-09-06T17:18:08.799764+00:00
98927433848248141101116537321085423190765260004678
11958307248995560821377115972371459682555458172607
38027220599454068056580585424289120195135808018911
81730326587260459146582170501178211539443530738873
14302158744574723126720989003647197879251062145393
95588392559171837068631580254328808020066587685766
69662773830196184153615022635702433077214838306566
23567471140858515082906309348557575678781969771386
29855400856080351233081625132866049622227385713306
31127091898628316188225410523421273390176131544427
99816633896226429074801093922236986757027387711579
70677640712258841717191063849895241625684383472606
20149439380372494396662960714003908659647930405116
02651805123832615900434097988283723560321632624283
34446560096922919662554056309033862127003563651054
04649951297636990696040006870385574603556592121620
99258124743473144505665600485083775011116518575504
29503334089296436203804383703448871964197169390338
82222311649271398236367949163006969009372079953751
07098286940416690731750748235166049907070875975855
90538707805013527141402204096237977709806659315029
20763830744177064647201419763109266501458979086625
85077086741145362187415208158427336595661969384775
54382333534286312679468035160229214715992269549801
33927963413978460874569988482814122929506131110327
19148428956747029719865805343612973616038745886410
92521169075346681306367382439294393181281090265267
55493725775342045165038426686900388140472152416300
47967055447875015902009620726602562852161582948148
30950992559580630418151671285466165141333105283072

From the PIN diode (digits):

2025-10-16T16:35:47.251838+00:00
83922099787403298304686329396400157755837750409663
25761352446952128736028136814099618372213164397473
87806281904813207416177775243199000600067927796410
51705911148291723886189135263797007475609489180559
38813526699950389664695244607333537515047787994368
24641023516258892951386420364433746568143311073422
58437745311026090876100065186351441232037164433788
78633171743934326733690015534079751753458432994177
36013236275473453692617975921522749033347143512828
06990334870390802491948687465082579510828069288846
30402556348602905083044600995659025505021931779038
70079757178593668455585594311640861958857132673038
13006489684234434721853118833057236598871806460201
85232343157497883178555734131916034891667461688254
99263489785743406075089677841337569324019189156489
54319260993100595542958518048972842388350732347878
23105384291286964776592522885163647545185537180613
72664933389379484177423740833235914824086172480382
87256183585596867846711201562111580938183143429036
75902105062490267769020823949715845010586658861230
05835956260056219702871117176662507773227991558418
30030500100552738115289823348385493779511094745309
88337100987125976400897473315734649852325604990183
55116020750127455552841617848754409230302488533785
50334066767212086473781638666909870408891379412796
87291806185512714413421707647318635988023979834440
84792996619323261141405906822237465656732643964379
41476816449820767537929274829057762302544743087217
54716853368747406967366909040961431718153206188492
69748651310232748426521158383474840435991533849528

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