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-06-07T08:22:02.614816+00:00
b744b833f712659765e5304685b754edc5bec21f0dc957145dfdf57953e634d2
5672a7714b1481f3caf853bb2668cd9e5770002b1463dbfff35b5de3b4295b80
7f7a5f138d8bf21cd2d936424fce84135f4518585aadb60a36028d990f217415
cc8b81f4e505bd805862ca7c7897a0cb1f299504aee607e59f7edcc7ed017eaf
e937b7082a09a05c5532b59af3fbf45dd2f7284ae993a1dc13e1e3102ab5171e
5b265983111c7e4bf211b386ee375aae99eb2043c8cf564e67d301ce524bbbd0
a936d595cf0d636c07f0e8d3dbe58d2b6d2a9cdac65a69861dd1635044871138
86101e4115306533c18832b0bb2d51b693ca40869deab09c3c8a83a42a93d013
53b2c92cee53d2d97e9bdc54ddb4ba97284540457e640bba4990e70c245b54bd
2c0abac4da397488fc5097e45ab888e00f9e0a260a4f2122e9e3b71eebb29a62
183bfefa56f7d26d551e0f13f1d526455804c859dfeb0a4ba3245cffd51cf0f4
6c1dbbec8e30f99e3372c939d3155970b2a41b722a21e0f551aa014ad67ef885
d9a2087d123cb78f27dd9199fb4e860044babc7a1ef76f025191847ce0760906
ff670792720b4dd1e6414f19558b093164ec0797a62c10cb54376956aa510468
e6091581cb3f5f281bc03c265e497801ab0e19f49b6424d085ed55fae3c706e4
b5cfeed397d464a4bc44c259bc7e9cd34f448a7545633fe0e025df1d6fa74e4e
c51657f5d914a0a7fe8ac6ae9ecf40d55351e03f209684b629715ad4a385fd9f
5bee3f9387cdab21c46d3cde7126fe7439068ea449760438547d484f7c56b8ef
0fdd261d7fd7587dacea6cfe7abd66850031b84f79308d0c209bc1a15dd532fb
958d5e4a796db48f62a8d68d0f184862abaeac3eaf9374e1af2b92f0e6dc5582
d31a3ce2437ee0b30d057b99b340b78859f02007ec1b0e32956cf5b4541bd69d
308fa096b82756ba420b093a2109641e4d627ee8930d3de9b0b3e924fec944bd
a1155b0ffa2011f255bb2c8dab5be6dd5a22d836f193fa22b9f28b0bdbd540a3
65c67550e79e80b6f115d57f3c99d861e5648cef87035ff1bf73dabe97bbd832
b62c10b41a182e5789b6bbc653c833e9d9a837d2506ad0164517856cec2d618f
2d2f2944d131d9fe6b49db1a702e1736cc4150d2bed2a46d995b43c96ed5f636
3baaae80730801afb74aadf9f46439419579a94d20258770714d22acf894337c
a02adf76e1f1ea424c07558281f59c56fb3382e4f7dbcb1c3770d3430def1487
532f5e913ef72e4b244bbb467689bbc2b73ab5f4879f52ddf392a0b420e3ae4f
c7d48aaae01be1772d9652317e3d9b636431e8317fe1c8a25bf127fc04a82fcb
c683df4839e68bd237d1b2a4673a1280b1d1351ed5aa17640b6d504c0365b592
c0636af2d02b01c355fbf2e181ce9fa8a0aaa61e0aa6321505c0678147de5048

From the PIN diode (hex format):

2025-06-07T08:26:37.216073+00:00
7b8bc440c858d33f0880eda2fc354b1bac063be0e283ecb1fc06e01c578ad78e
4c1a3526aee866ac2598b34dd409b1273302075f420ca78ebdea1875f8f6e0b7
63ce93abe1e327ae6d8858ab0da1f49c7b5c2cc01e8934daf2cc0f95937479be
9fcef443cefa910b8f01f15b78dfabd55d7fa8e4f0cb80ad057665b185e89425
9fed0cffd5c6210a6a051e66e4c3225db6c6d69ab384d5d75850d2295a7629b5
ab0e201f969a2b189458059e1f400b5316817cf054c82d72c59512f9a515c4d1
c8769162265da79db2a6b335eea503dd076e6f85fb49ff4fb10336cd45120c30
10447b13cdc6eda465ca4f50c214a973f3b7bc9ef1be620b6d329b80a78ae311
e3d023cd515d920b8d2af803dbf1ac66e2c743ef7b8cdb9064725b1fb58387b1
8fbe5bcdbb967797e9b53c6bb3cbf34e53bc1a13bddc2e455ba34af99945ead0
f8c0d1cfbd3988c723bae193d5494fef80da30864bf174a504150a50644a26d7
f8db1b7e1a1813c0bd7115ae498ae449b5f0020ade821d2ba7a2822b52a6fa39
ada93b57c0c32bef6526b5bd0c89ea0c4d98c8d474e361eafc23ba52b57efe22
cc266aadf4bfb67a5650da3aad98c7f37b345b8f73b47434f9a4b92644966950
c72f9c9c43adf2cb96e327627a92f89a6aa78b44640380ae85e9cf82085823d8
dbf23ad2b73f46d61021af64dba4d4e8ac31244af31602285004436e729233a0
5d17e8d45a697bda26df6dfa05d0306111d57a801c21f4b636397b7974e6fc24
cd88f02bc766c920f01ac48037d7f4a07f610eb1bd969eac292d4b8d4a0a95e2
ba053ecb7b7a352660dde9479c951b96e615811104d0d1247bdbf051734b7c6f
9da6537c5c31eb51d1293fbbcc276a7c91abbafef97d99194db1c03859ae277d
0d534c8436e8a6ddd81f611dcf440514ca6eb41ce4fcdb24ec371c2490e83bdf
ec3dad3a6fa52b987a1e9e64fb31f663589a41c273bad77ebedff76e373d3b14
d7dad1d9c9e4cf3a122aa2bb188829cd437f8be3fb467a1eeda45cdfee275582
a3888e32f10221ff78a49a5b6f89ae5d6a9a552fbabb5a83faccb29d5e12256d
026fc0f9e1551bf96cdf8779fa7977835390797ccc73058f7b177ae9d3774a4c
684099857a430e86403ee58cc9ba66cdd433e705355dbeecd95e7c18b51a7291
7ad284c45deb503f9dffb6b49b6a61ed7cab9f163fcb682c4763fe13033717b4
c0209706f93b7638a68419f03494471b9d975dfe4002c18d68469a491f00a02b
5ead1a457fa8538cbd14fa2ef020acac726c23dfed627276342e70bfc2414191
b34e84cb310615228ea19f2f183c2cf5ed4a91100d99a9cb171df98cc09e2fee
6ff36be1ebe9da2816c7f67165e8d24d5b605dce25418e57f7c24f34340875e8
2e9ffe2c354abdc9e98ae96fcddc0cce6f2c02b6a8236f92bd29b8519e131338

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-06-07T08:22:02.614816+00:00
83688451180151014870338384979094311387209321835286
14671375202983873804588712004320999193804191282722
95194139285466793219956924889073821054024153153316
21392905892888982420516031414904740759269901267555
83084209609285508154934074476119164281233091388931
17282675177934559074533267867803018275876954491399
08074143094256989005342999806835175634163065214801
51933650768745818247643457765660383164424719837844
83265584808651406964692600118673441236918489441086
96571636805190843615581038107933348330785498245986
09853015193869880489107563369228082987424858511457
21891278642714423381700174263362082518608343394553
78340068868822301102814532241809060307461411776579
25853909490007516644168455058670810404092129639540
27926038947320017114255500363385990681510064886894
89882656796838176999633729116778789722872060673898
74586483816332503282411390633359916347357133960960
13381657064264731804568425727924868415382927882572
08228902330049847921484112325593619350494194742109
80439868411524729871747262754716754346853026606726
79130523537964833689320727145049088084275748436050
84398686661109583309003077982647136176793668896121
91153217858744417191903454473485391164630198178058
28822127605397004035039591159051875082441680262446
87378287988351685580062269233308459743454741684907
73261246235465809064095391671054597074281508017583
74730057654921697732373512137734724851246042186676
07853029568651302855126713203583479445624675367587
70183787948358813559824660803274799938702719455082
49266155990049492762913904684798317257395578640358

From the PIN diode (digits):

2025-06-07T08:26:37.216073+00:00
23399664886308286253752772065931770628873842762653
38740272375279770977395102079566126742892417839947
71397409368871136156239244923037521549471621905967
45114301912071932768287305180177334837591298331006
05300295349382985479328880419018418171143231505443
24488805583164118322292484451497491865219618459838
93675778667953650307101133737977035469181248166823
19986401798094206915838858909811095055286738173581
93461141420372029967234044001491318131357743909187
50195181600779788388261989466991637453699289573699
35864773792848347516650421108000743827262624199289
13217473387381021030294367623043826657736959879295
43013881891237127752169735868281263438067391822286
80587352992352914315801652648538685005809947565667
73503998224654066739680003287433300888355883637016
33750064724936742202408004671014465160932390052338
09054897172228283382545723211636364399023226962855
60279714778950587241457541741049860562232253389671
56492750212917043623811575241157668324924981416387
39062445718625532577779256897439251383763254663197
29680520108028365528364459617358116543522230580049
99885465941586269010556159205818426287243641672739
70223064923985306336425002332064549111377493065485
47868790317857941837090211928527083521211931834421
24150543232322197476046453332267143464624086025105
53939094242481261445223296938063578280550697247159
22630444719919035523809232510659185666322552487127
57519364029341047054733100604394732669276883408920
46327272140835981418524612919465654579783249062134
42615947246044744516135369232940925847110740229913

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