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):

2024-12-04T09:54:52.768650+00:00
62f791a8a3aa5513418bdc6ff0b83c1ed117702685462ba568341e9719906284
61337ecff39ac7fc7f2ccea9ff814b849b64c1e6abf94447ab4481099b89c729
df88eb48acfd833cb4ab182f7fb51e359d3f2cb337d772a8291d16293b351b23
2adc752bf6ebe1c2c88f574e593a9d3c4620beaed6b0d08c54514a582a733b03
1727b64c839d92f51f01660553842b53ea1067cc4e87187aaad2223f5535339c
6c10cf2194ac2e03e4be89645e499beaabed359ff9285ba28ad924864d0dda5b
09822a6bd7b54079e06a8fc1f43218690dba70e8d63e1238ea8ad21511abab08
aba91fd8b0bb515b9b0f6367a9e23e0758878a703606856489bc1fdf444ad165
2df469e16703e0f5d9a5c0c0ce57121a191c784feb3d0d613eb35bc3e21c007c
8015732b4a98335973770087062a7d783f2f1931391e8c464a503bee121c5f25
fd46e59d068e0ae90b1425cc004e662c4493000eee455545f8d08bb5500452d2
af5ee4c9aba025a5d3c989434cefd6b3c7c24b4916afddd0938716697cf26d82
cf022e35eb9bb1ed9b22a3481bcf6cd734a979f8031a928fd4e80142221aa8b7
fb31fe8533f6057591bc10989f49fd94f61ab3c7ac1f465b5f3867689dcfcd9f
95d68e059652b7d7b2dfe6831b4f429b97c46efa133112bb26ed4c22a6900d27
0dc39a50fd20f46791c27b6e4e401e314129692d67730adc97dcf97cc01d2d0a
8ca03ebc41ff5ee2085655eacbcd3475e6f70510b1b93eb45f0ee6ab77cf5420
daa3a6e3e2a17d9e885170d9f3b223d16555838fd288c11e0a85271580833b4e
a8e79860ae2fd67c428c79a3e8f7702e292bd9a20b4c5f6b864140b513c8e883
5e983a312ea5a32068645d319909963a8a3710a003b8f673619a442e70d2abf5
d56b422731cf45b3b34a249ffd89500cdf04de3c2a0ce7bfeb849b5c0c6b35ae
ff46323beaf43445ef56390b8391578cd66f280a27490b546f782b53d7a59fd2
1fb8485d4bc4f257e2178eeb0be999fee2af1d5b52b70b9261a7bc2a8111d896
68a394ae048a3537fbcee994b3ac2630e0986ef511820ce7e61c0ccc6bb2b39a
675fac0690b129f4697776e81d7c933a1292837e9525ee60ea813e11dba357c2
b7e7e7b4b497157028e3f88b32d1207cb456b138368d72ce57fe1e686db8cb09
5249f5b2c1028294a569496803ac7dfc8b880c28c5d111a179ec64476d7990cf
dfc1bb0b4fe5f44ddc1a71e98e03e613eb91809c4cc698c5c2fd89c9b725aceb
c7effc9cf498eb817788d13195eb7b290afb014b7adcf888e92d87e3c5abc282
e8f1328abca48dfb2949b399be50803b8e7f762718d7c72a3e76da4d0f6961c9
2afc233083ffe8a690f80f0f1e678b18499124ce539dc6c8b8d51e1496eab9d3
e15084fb1e5f04a6c5b54306d2e01f0b11fdaccd2ba36313ab73c2a057da859c

From the PIN diode (hex format):

2024-12-04T09:44:27.162498+00:00
c5c669cf84a5cc01678c04010381db0b613304b440713c19753d6e9a72b4346a
5ed174722f6579a2842bf76b410642374a522c9e53cae659d4aa282b1a60af19
c456cccb0b230ba063dc1969f834cba6f3d799780f46a48923067427f0acc5c0
91995f1c19a7aef1554bd211ea5583aced35f30b6d90e37169361fc3ace099b9
e462018f2069253a53ab01d7ef28d4687bad380dff63fbd0c837abef00b44fd0
2c47d8b0fd1a382c8de54cd2cfb95cf2f81579413a3b091bdab7ebecfe6c6278
bc773ec35c701e4884b1bf0cc33b5a5df0ace9ee1c142d2f6a2299d970da3999
0a5e98b31ed99b915c436e38a55bfaebd2db12d534b8f713827bd7d60268621c
7786f3599c77af1a5b8507bc93be4f23b0920b9d2e7c1cc9a0855964b88d90e6
b147f152b4c34a5309c7a5e4ba65b693ae0fbe92e038ba42e059822e5f837937
f6e2cecec0a538a198e2b5ecc5a8ee274489abdd84f198cb94926c0374c509d0
bf03fec0bd7704081ccae1b7e08d4b91b40b78fd559f13385ce4216d15df5ff5
16e3ff5749eb133cb186a4d97f429c144f390f12dd236bb792cd98ccd700bab8
c1853f4d5211b4474c2eaea60bed84c715abc1f15bac5a4533324312afc24c7b
0cc23766e4fdf0c12da9af889b5f65b24f0ee6c9e6a0b47a36f52f19581c37a9
2354ed121a40af0bbe3c91000bae6d184fc5d627331fad0e0ec37b5663fdace7
e752b284640e2707fc5a9b0c84004ef855cfbae5927414bebbc4d3b621834335
395a3aff857e71a4a4460c9d9abc8473ae15cf726f7ae7abaa7745401a0907bf
a09573e97ccae043dc4d87fe7d8c8b27fba36e9ce3296ecdf42597384bfca4dd
814df2b5c05f79f7e18f3c16968d613b7ec087907c2fec00e62139b46a9b96ea
b5b1d3362961278c7b175d14afeb947b6808b3ae38b987c4359f03c0fa91742a
530f9e7a119e1a91c47be00e48ea4099d0e4432ba7254e20a93109b90d987a46
ac8b0c2c22bebe4174b623f822a0a6354b97ac761829d87e6c9570387dea549c
fd83e2cc8b157f94d0e45ae92394e086af4ad369cbf8f149b330b74e30ee772b
9e4bc0d96d2b2afb5c598697c8ad719e7f4a4920cdbec0b8b7b4921d70f4612a
4bb3a4c7db2a2f5dc958051b41c78a646e5231db9bae9a9b1d640889d64d6a8c
0366e0bfeac67327852cec25ff06133b0fd017333e30a629b4b9de3c4f615c76
0efd0c738ef1b54629357b1dd0316e92d33ab562fde20534f9e269c14d615c6c
470f30d65b6c0082ccf4a345e9ce250df6b58a6b37600fe71c4343bf00a4051c
86e8442fb99c87dbee6a7bc26c7dcaad190089e8f702fdb5ffb326826b4dac9d
ba274203711ef4564a50f6efaa7a4195911f3f4599b16358c5e9bf3761cf3658
9f4bac1ff944d6f225dcba4386e833dc121d33e8de7afdcec2510c514136e2e4

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):

2024-12-04T09:54:52.768650+00:00
98456863708519653911846030231238337043650452305125
44983297512654992744692975325500937168717168290955
37994136727231608071244727813053576344795514684129
22415953273542174394438778895857607032907476408481
74884215590323398276315746310102058332438316037835
24227034638553515608163348724603903700947355715359
40916238363477139109304207816421064393502405138612
62185638211771710871693176878191551599036962078835
38125406330037883168740145050303659292871826252820
79611397627991952800242821154374525189151900350642
25206347254957304070748059182895377057064210112037
00780244684700146985693981800482759471603765376776
79999475732275473522052409300246535577553463722708
52692103264643016634266883493351051745881652597348
26799972317091955603045759494205508283783127796655
51961019491887387634664413391395548032034594231078
64304965410545031510512492294510406062886594088685
52170516778562809514711984326366612558368112783501
85314336933010333921283159786852967447246640216312
46414362117695073465648119319452584946656332040093
49530950583855166003841597546846127107663949697979
74365937801204604212913255921207537470505952698657
11314587401140103973118411204383655931847293759687
23421153752991828311469767884229175004634874043853
55487972384852101730122812077879540395720644774105
19182924475818463126493796296217638794838080512112
40395032248086775654411487300409840982737893023048
65057304037225393612409717612100710921449387117977
26134203194528567698529794378337729956522919364949
23411001752236453597719430503888644141737953908028

From the PIN diode (digits):

2024-12-04T09:44:27.162498+00:00
97980532650103400401032911975104806413602517611054
14805206941614470121623243076506665574824458838970
40432696752596861135116099250552665320157064373506
16397297924553952825677485751785317253110944130554
31957253859801433205375883710140042373561399557100
80794471762656444176859221216558590927830898208819
62959212307232779112955990937228204547063453125753
10945279305545926710566591185284193023020498281934
89561975269133078847907935764611574624286033890084
41447771828095748309996586018247741590465686668930
46953121559265566152819768396837713252484608031697
09910392891904082883417545801120855919569233092195
22877319607734642766562079571518350783465200868493
33637782178071764674661132992171939172906951506718
75947623129455029345697536559501787914608022544725
88285569358418266475119060450011740924799739513173
14149523869972827832001439079055123200788586461620
90879682333167535790583326136464701257548832157421
14112271701969642609079160491524677735254039396310
56411037515675642977819295214360225041975926923544
24470033578006555081775441973940232393207548230408
79745685359653590392451642831558221758264596231472
64536743673778326949098513522270723912443490906516
82353460665375517218244126084912562584563139212748
90354834757405737948837848194358759209434292893451
73135827747332909284838046291297427579649942479388
05276599380010824955745455290008377706400302919815
39334437061959152351624866418085607997921814121542
81704153232949104658819805520593779792087115489108
00306369371381380755961528676791006405283468478556

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 | Alnwlsn 2024