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-04-09T14:22:56.275779+00:00
471e571779706f3906c21608383fba9fd3d91c444dbf03deb303bc29cd03e5a5
831a290e62dbc9625f7a68834661ea583cab7d22f255655fdec0a5a303bc471d
716ee6b145a00fc376959fa2a6df19c13e5f4ebcf74afae770313c4b66d8ff99
6d9d28f2c3d29cb309119219bd27ba66d1870c5937ef59da25ae3be9b7ad7bf5
83097c2b3a108ac51b61d0966c632b0f5ec9b0bb2f3432cc5f928302d939cf4f
e1ca8eab12ee1846a543e83bcfe4d70d012e67bb6e484666c9da6659a040303f
35f6628228f64c54050c31de2dc8bbd8a94e6aa4caa80ce353b981ea537080b4
14fe17984c73f8d24917729fbbd7ef45f5e28a9577c3213fd3b091d446f44fdd
bc6453ba7f35dbd115d04473903088e852ee957264be61909501899ae804ee78
c4eba51c123b5b543878f3b1149dcc4650fd16bdc45bc5c79e76ccc9f1f5834f
f66d5daa389df17b41d2786f9a459c4242ca0bc8da78c18d3271e6e9bb2ef34a
6b29fe84235d10fdbf31193a5386073088e8e85003f72524900c1de615af8c04
67afe1b4d37a5aaf916ea52a6055bd63a5431e607ccd6c376e978ac094134bb7
8a7c013c7d23fed523f98f34c1d46a21a6757165725f22a80baab0c0821aa1f0
3109414387f513ecfdbdbc5833bec68ab1ab0dfdfd613fd5701774bd6835c41b
111b22d2cdbd648f299ad65d6f0b9c8b9f203ae5c98b5d87c57df729102e4ebb
08b64621690789b188e5e45adc633559b0a4fe5d76b43d953d7b482c32992f8f
3a8f7537304b17d0b825bdc6eb380040f4b05ca9d529bfcf36873d35ca96929d
e28d8c9eec5727bf1efe1d67e3b44303de7a7f9667be29d30452acee6461e46a
fd2fc04ac4fd2ad61a37bc633bf22c2375c8ae78c33924c503fa889d03812211
5d76e90970c6bca2c17f8c013d119154c78d5afd6cb15afa22739c0376d2942d
67dd7c1d85fc44454acad72f8c779a057a00751866a6997d2b89c57f8a5319f0
ae39b863c293ed96311abffa985f77cc8b43fcc585eb49eefb55ac4a7a725416
1d6335c40e13caf2ed5a02cfb768ff25fe0039962e7380889ae59faa42565568
62cf6e0adf9f7410745c34f50d75682b26da56ef99a2eb13c888193dc4fcd6b7
ebd22b29a5ecc3245a439ac5941fc428b78f24c845b573f177c086d600858801
19796e9086b616908e03b67075b5d2c8b71b987e4223bf3c61d8d58f893a7d74
a59fbaad44af89e71cd67b409b372f50da4312121a36f5495cd6aeacb735c354
50131354ad35e705b6ab7a413123c84e8300e423479564a7d197e8f10c9f6b63
b373502fd154dc5408eb70831e6bc15aa97835d510584b032d1f2fdc6c3fefb7
01131a8190eb7d0ce37109e253b3e3a16566bf4b54230f6f982ce8e17893617a
5c74da62682ae71d3d20096649fa1773c8278c10094c3332d14d38b16f0e7a97

From the PIN diode (hex format):

2026-04-09T14:25:28.675346+00:00
55b44ea995c8dbda5f7a21bc03a14d837f5febf7c01768c517408c90889ee20d
94c2b595d5173716b5561cb47c63fa57bda2e92e9732168a203efc23c0c062b4
fb8e6604805dd9d72f637a5c620d41213d3c80cd25cedbb3434fc480b4c98258
a54844508e98b916326cc016c03f69eeae1672c342808e0ec16a35722dbc7bd3
69244ff0f5886f51a7bd1977b31fa6ea3974d6de350a056001e6bf961a398de7
a4230975a35ae8b7177b39119590fab19fe60f3a9dbbf8d22488a702623322c3
412f87713ec4331c44ba5131d6eee0eda10ce1fca55d562ddaab33ed958b7714
7a94d27c3f079cb8554c345700e8098e1896f6bb4939e502ba366289a0c13b92
84bb7c1756ed997e3c69d210ad11672cc48a9166c43cc081e80e1e3f10a7fe08
379f654195187fc9d52473a4b9a59e78cbe9b67ed0d1c5d49baf772d208d7fdd
9dbca6158f9e83c5bbdcdabab577098bec0d052358288eeabdc56a7b0c8a4dc6
70613b763b2cb8adca72029253320534b65b5950ee588682245aa01420f6a5a8
1bef1917f058514e4e111537fab629b21948b445bcfa3a003fc53ac67c285873
7b32a73aad676f56c281e5b4be987851d337e4029bbe20177160421729287184
aed20eba87967e9497110aceef23c20816dd8eed471e06d92374a1986162eb11
7f379c182b04c69612b6daefdeac2534bb18acdd52569c05d9d7a9c7f10a3b6a
8b3cfacf7a93ca6794248726b0759a66e395a5767d691a2d3623ddb7ed5e7ff0
d51597c2cc0cc2101884b205a6e2434ea56b3f17daa720f281764eda59dbdd9e
6598aab5977668a20b16fd7c0918206ade06f342ccb98ec09f081318243366a9
35b68aa9859eba7b8a1fbeda0cd78c572caf107ada73f9d43248b101fa90eb7b
d76dcbca2c308d131ab7acab8585648c8ac09efb5cf6c6656926f063694ff43e
559bff8058dab3dfbf2db1e73636873254c8baa52676bfc5ff4b27ceb20a4d32
1e70a8a3aca8d16e08b078251971a8c7bfc58f5e5328bec4dc1f120f782fff0e
20316c76db8776385d5891527cb9514232645c09aae15103ba00a078ba77be5a
ceffb837381cf1ee32169539a88c4efbf31b9798c10e93b74000f8f4e0c4e42a
21561bbcedddadea0e0f6f09098295f0c0825bf83733ef08683aaa750224f64b
84d0739461569af3122c0d3591b9bcce65db49019f9476e6243066549b7f6964
1fd24df2354ea6653b4e82ed66ccdb6aaea1eca8ce7aeaeb8d2d9aad7013442f
17dcbacd5688c2b5a159bdd73bd93811ea5c8111fd439e46cc7188ae7f1da631
3f19c30c3df128c7c6a62419d0f6f0a73571dbee9880601bd53c00f05469e9b1
cbc36e0c68352edfc3eca8ef93cb63f79c66a8cce65f6410c171a61bbdcf98d2
df511cfc9100be769e86bceaa327a6e457895e41e7297287046a37d5b92b5b29

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-04-09T14:22:56.275779+00:00
71308723211211570694220856638659286877910379038841
03653126411498989522043170978860712534850195926563
03887129131077696015951849596266259362957888741249
60750253095740955679091746258939860235128955893774
59837323310924435816389727975008994315947687475250
95463102577942711824706567591301460387107270020289
60644863539830407684051249458769780664681283852983
12288020235276157323145987693849199533637645707988
00838627532168154448368249140090974449013754042096
65281859918456207720577080228996919799581831790993
70565723652011546956666611209341501387467407413235
93169149255883340748368003373644122921754004037580
22907545106542968589996567309624085510513892481975
83382401602535354352930633661713011495346811707692
30266149096567351989888851909838777113976312231689
04539627172734890043415493111156395932583993359725
41164678870882703305073777369099538976649318806149
61237244505347435843175548752384378998560064769269
41915435615350465741405887399130290380670322275003
90410482720097064792749642265588995944351774209557
36970336570329341793180912988862932740016117458499
41900877903415560318484503242933686974474019540522
00172402665325433797273883257457849994475049269152
95193967973373857274221484222999539614199002830437
00575046152836545970668685049810105916161692521317
04433886536219362561968343416595369067549748319640
83433669811519923400333601252110443482224442038212
17818327522666359160974337582516655986736875372823
64555547806718182654739274728353958480191984735305
82712265493578310035714900675112590799791580478484

From the PIN diode (digits):

2026-04-09T14:25:28.675346+00:00
85807869499522338803617731279592230497236440443658
13489481492355228186288024998789624651502238326235
92929880420204289347992292981365336160283779677996
28803088657268804252852250089222926305742214956628
42149306531445882305367936118167892519793166571653
10059601915026574164350917639083232357174944775915
58578736366702985134956547351362965128688681496112
65938645715149391920224824630756848576528700094224
50877357028654983760935946328724238653266005167317
03449638450296609229143063166708555901654924273615
64856558208226975575194532412757886621435831978786
81190939130535884042899706231238779812975918594484
73140246835005528291898088343036906020326568272523
88817878172155824178257280698858006397589824408815
23506758730311869429809052208155025590322313966623
41401332741486355026485117103594082242713006351661
52979817275556244304985018827237528724728286560569
99105906396022470348363538761754024965182505264554
35839427215194129416243278056667786507632367322918
78895801527081511804621122240924320606668542925908
19243651026953823869335886233831901240874475162215
50727701442309444841192683727133330040389258929801
05389905796285552888799145775454355084866538189197
75397810775030126863726810087620372513689991974394
83409096311815204714324908183518569388458224858166
50009209708103860060208619909084555628502249576840
78275152931447836400964233862788731415110909304992
30915551080458701702367532154897865418441353458588
01730159481836480284552705003177537866015978300206
74616822414554731219684723868636948161898959561792

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