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-17T14:01:21.873267+00:00
f360e1d10d09bfae6fc1ceeb34c99b806d8e89395815a6dc14e4b2524af61b98
5ccc92ce21bd9a307b97719068f83762c74c436178fedb95d80fecc4e54bb1ea
9255c05b9cf897512df913ab10bb67768a2f69d5e4638b616283e159b29d2436
538e4e3dce7df6fdad43f83aae125b35f3b66c51fdfccad2be876fccbf84bdf3
6f6cec51d682aa960a7319e48404e9dd20ef661be8cd9e70db2741d822cd1f47
67f6e335169b8b514f79bf963520a9117384c304af61915190db65ee651e6411
35751ada2b0c6603563e265d5459c7a4b6c9f79fcbce7ad49723be7fc0ec00b1
30bd624dd11fa31f74898b545b86fba63dd4e73472528448e76f47f7051f4ca7
3785a7b082aeb9ce53be83bfe870d94faf60ea2aae0b94dcb7040619b39d3d06
67143a930611ec472bec58f67a8c75507373b146f9cedb0582336ddb621fa0b0
31322c72d151a54e3d2dc9d25064226006a0bc25221fdbb9434254b1390f3717
292e53a280aa731127e4beca65383d3251f80e69eda1489a7d6d7d00297b8f42
0e74b1d28fb79937f2e72b6d3bb48d97a62ee5bcf826023aadb43388731374b9
2514db7c62507d86feaf2f3279661ae403a3868a8f48e4cb7d1f11303de6b053
a4c458be5ca01521613c5efee3e527310c1b739616053f86c75513f421400aec
cca7e84d5866ec247fe92ff522a58bbfbea19de02afbfecb862f8c3d31f0a676
b772e28053e6c72f70c4e5e0e65c1d4f99abdfdfd23fc3275549f56fe43d96fc
4b69d3f9a2469668d8e2041ba8c586738cc36139c0f5d6c7215366b2f68cb60c
6484ba926ae83f0d36bb87c45d6a372568700962194e66c6953bb97812161658
e05e0b934bb9674399785012617c2f6309cb7c92f743547261230c0de4aa2096
caed23b5b9444bee479dd87ed7f3ebf9ca8185f1527b088c9131190b046671d4
4f372f0b5c70e0b69285d98c11232dfd5a5a1dd990acb77c230dd93e936e62bc
01c56438476c2a4b091ab6808cd725b75ee7f772c539721ee1352792552026e9
9d7904ef848760468b551d10d1c406a70f5bf45fffdec66d4143ee02dd62071e
aba089b53e2ac2df9d5dbb3be3ba1fd7d27e71570f4f3a7f57cc184464d9aca2
15aacd43cb8e888779144ceae8f712af08c7728b832ef9d4dcee7dc42482e385
2cad0ee99a721ec581cd75d083fe7ea98d69c4569de16c749b4d3f04d9d9b359
b8950ccb32ed615ae9e3ecc99103326f2cb61d08734efe00188907e476c8c0a5
ba129ad7e77cdfea0d48228cf795c671739e86b8371e8021867503009860f14d
23c7af7a08848cf7ff5bb175a6919415e9d207415cf76c58e39d74fcec344132
6767e6754978a175706dd1bcd0f047ec845ce2031dad3b718f71146b0efd27bc
291b32b935be244b4e4d7f212a1ecfd044827f76c3a9727afc5a911819d03e23

From the PIN diode (hex format):

2025-06-17T14:04:12.073301+00:00
1db2c889fff64a5bd0e53c700e8398be7750836588d3fb4f49829dc127badeb6
24f6f0c16c04e91680238fb1231c53481a40aedecb16ddc950f877e8d0a52e83
de9d209dbf7839b191f95b063306ffd78ff965ef845408eb6327cac76e29e597
3abd8646526703685b64f96d67739e60793404c39a62972d836214d6c10cef4b
94513cbf05bba8308331f5961e8d1b72f9a97938e6112152c139647d1e63cac7
70ab273e14b5b36fda773810179ec3f3c5c851ca9cb80fb66668e648a2f7682e
2e9430ae6aa019081512835ef209c721d7ca8656ad9f30530b4e3ed4d71385cd
647437dded55fa39874c924ba388d564652777e81710a676005c06b0077f6b95
a530d9f54d40b396a7fa4087b617661d6e2df704d171d8b21b75bdaec3371ef8
b5907c763040fe59bbcb731be83cfe93df1dcc33a4b520b1f32c5ac89dcce173
f018cef5e42b618530fc1219863c90289d9a9d26fbaa0d95edcabd21f59d490f
ef7bd2e5d80f3ab2b6ff69b6e62495d7f11b0e3620e423039a9c1b9d5de6f37d
65c11cc10113edc0465f45b53faac736d3460f0662ad8d380c3cbf76fcf39f9a
5bf5840b1b1c4a05df56f3bb3104dac7ed3f6d3f0a752a3c7609a43c15204891
4c60c5fbe976cb38af608c399c5524f54f0d00572b4c7f0ff864006b968d7c97
708a8248af75c5fea1b13d0200266bd0e1cde45d5807fcc8a269a62f633269af
de4254e29c8c0d7c93aa80ce79f1475510126c8261d80c681f1528fdda4d867c
32b366025ae7809fae1ce6af3ddefbc236131cab7acb5eb41718f31f3a874e59
e1bd843433d8beef1143b45cdd28b0ca8351255573cd18304f1065540de3bc2c
ca48d432bff78819eea2e1054ca3472b0efa80d17f2a112f8981dd258d1a80af
90442882b369373ec553627d2dc6cf075481eabd83fc2e1825b5f1d44e05be3d
7d97f6046f039f6f159ef884b3fbf2d580aa905c371b4564f2d82c048e79f2eb
41c4b27dea4e16b9ab71cccaf33fd3e9cc0f84ac6f67b955e9ed59954245e2b0
d34ab05b33d946a91005966eefa88022b99468d5f86b1415ce794ccad1404c31
f70bc0014117d6b3a6007997e8eef734f9a006d24801b31bc1fe775726a6d8c3
98e4ef7a0b8cf82d7c6104c5e2e4e8647ad7eb87981f04112acb950943e6dc9e
48864ae1668c9e008e0e0d13fef2f3c484f876908684b9392541817c0cca442b
d273ddd413b9e48532707890fa8cd9073608293509fdce8982d9604c370d85d6
e72341a3652ff28f66bc3713f553fa03abbd0c516bb994983a457d304bc1fdc4
706d990c4cb57c89e26443d4ad0ee4a46afe02d9e00bd61143bb9b098c9b8d4a
046ed9f8abba46502e3030f9fdbd4c16da434ad2ae66caf1f2b076b7c7c72f97
edcfce543caada218cca697468bf210148b115010459a9cd03fbb27b19c46c5b

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-17T14:01:21.873267+00:00
96130991741193525528094237578821662078827427529246
33895448235113440455989976679720491596757746859291
56518145197116870318384705993997983189785736548342
78612573675874189153820881903511913289110881307050
10152532043202275812396534317103532255398179219150
53326917153295047597458144010130001753172643120203
86623893848999648259225135902792007748899877316331
16373984913466615214823272117105317667553367763074
85839031911279759642741148830406257957610603205847
06177143882240178015157770053051099831607649504414
81657861458000349606608837343185676684775715552341
46836228701517399001566150811405617254250925004123
43661416774383535543095980415166468838025873805136
15191685372024988025347547502102260363343843722531
17486176836496889092602133976094394912271550220563
34998519336410677788023627473465399190615742344740
61496618831428839947129692297953716395398573116150
75056270500404276897341540959757929933830278408212
00328646066313548735969306553704120998257802984959
85201822228894114775850367532080189724479909244667
84149735121370325035818568757157262933822308404549
25110402137955471192128246334017354590902944728324
35136247109888019700567108427509268228403783941497
57143053394685323857210432359670398529169606671591
95980965670298073071603781624294579387598631261387
15795827872468007262217067423635212076187508991439
31462596363033447314541430972917312669410596865708
16557763047989844912509790450350114482290815780024
37071892658618542413723440499813155834845530283334
17030052967735997522083240917717664548210765920888

From the PIN diode (digits):

2025-06-17T14:04:12.073301+00:00
29783774916012143152901980310136797330579339868236
93080422283543773528837226647422801965463157325791
20577745910651064301328408993999104151588934708203
03049100090315589621520495549851453198209312754881
60910587684831495030412714692156173382935700253099
99127139622081791119561623589597815684158202047262
04464648487406602508211831940999333486735948831178
62193300165585573576467563360001391923166618009206
76072707496548776479506764358223022910450413782717
89749555308144241848648987152760472951648132774490
57152443973348182534604440575457387013498933577315
23155878820582364927145432350354562757932501932893
01199270956981637099547015069873415612609118595491
32112728740586874904996309631017426018096460213272
45769697185675964057568536791300874376271500000750
41245112383072751797617761020038079388076205664799
50057566845640132447702821718516180830971204312140
77342450790202902859742875619454192871229480232431
58357889893252519017678092407631813785152448791601
84138844725091362562057663714314282742174737293741
26287544684030790555629783982545980784298931462437
81780590612551041103591121583279287044925527690044
04422165967825782285711363153272110385858949666976
74769151706916055010682834854804072021217664764911
92016523796600215152600672017927931987386695522211
40452497049700223552310417424909675872347402405800
42141319963218443432855737652924126843151985335012
20444007540841530937309676551333356563014743028855
19830371891281078548525869254875939612095312768124
37006773146406021117678755094055417404107186708046

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