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-11-21T06:38:30.260540+00:00
058fc2bd7e8d8ef5cd5c87c201cef8cc964e46dc66dfeaa2b821021903654072
25c3ed3a63407d90616ecf79b545c2c7e79343babc63350a71d2b246bca06995
8930baee2e99f75bf4d1a6caa4eaf8ea6686ab01887622d885d555b73174ee70
b2b9085b1e35afbfe30d657874450afe6fd3476e2f4427db3acdc86cb61faea2
d423e6631a424dd9c0dce08eaaaba8dac1c3e48ef7fa1948ad7453fd7096037d
60b1867f39df65c1795930b49ecdde9a5a6382952be1aa55e65ad247ee880d63
469a5b263d5a38944c2ed4cedf58b8036dd1a8d6aef3a9076712bcda1c922f56
ae89d00d59ad1a83c1f1515fcc4c5643ea1746d507ac61402ec541742b8a1fe4
d663208ba4c4461ee7b5ca1dbb6592b13cddf418db70d0aa548297d712ddd180
bea257d746fcfb1999b1d10e78d52e4ef42740bcb16fe9287c83c38a3bf03fd8
5f890b82550ace589ee3474bbcd2a0e5d98feeb753b379b312a5a290baf9a456
da06f778bd55ef7a0f3319fda698d1f07cd8cae66e387b6a8865b4ea48785f0a
2a55a8ce91fdb1fd11fb20dac415f3ec2492d9553e81683767a66522d2675c0e
69280dd785ce4e6ea32e0d1014aa3868c81ab4f2c5d5e1889e4b8fbd513ae9d9
aac0d45c58ef83561b8654af861dc7701a50bca741c70148387f690d42d95e7a
ed92ca3df87a949cb854f668cb4a88baf435c5721e947c460f798e849fe6305f
f4126d468aff1706facaa543a04ec8c1896408a1415186e2d06786c870e63047
8aea910a742d18717dc7167afe73f007e257e2aba81ed533a61966fe83bbaf3e
f5ec51972156a275042ca446806a6846df11536df9fb1842de1eff896ce0dc9a
cc2537f71781651b4cba5bb4366c659b7497f5d0b967b0e20ebd28204b96f1d3
5ca4be80230ef75c854619290241aa9f0957ce42bd4cd5eb5d33a354e6be680e
fceb7488d7b52c2914de84aec8a7ae82a657bc825ef12c089a8ccbcf468c6832
171c7a0f1b8fab7f1ae28e22d1ef2ccbad02024f64815f262eb1d0779d2a3ee4
ca459a5f33b1bb518d0d6b2243607111c5a539ba6549daca4d7c349da24748cb
37be378037d71f152f1691326099a776517f0bf3cb9fd7f785ce3d299cd9ec40
776c185277adc3c7c4dd3e222b65ac8146d2458bc0780c939890b432c9c5a5ca
585f0818a463b4e597f16e40e12e9aa9ef579761ad7148b89a8dbb6cc7fcc253
d706e274c9fe1e19602d6040828db3e2b678085ebaf226feb13d8cd1e5a40c4d
6f3f01040caf7a7db748880b5720cc2ff0faf9ab36f36591c3b90c6ce109d404
bcbe25fcd925475de41391c04c6d5432a2bd0ef1aec3fde8a4ab8fb9c75d830a
cc731de9aa478cf04ef66c7ac827201ecb28e3afe68f0ba5d82f6ae148a8adb4
b14fcb1e4f300e97731bedcffaaccc556eebe1f5f11bd7f75175f5d620e98f8a

From the PIN diode (hex format):

2024-11-21T06:24:18.258061+00:00
954f0c6751c59dbfb476d953171680aa3107e4ca7d16286cdb07c7843c7f1a8e
f1fad9d06a6b80376ee84dfbea43be556ad573fd3c9b5c8ced442608dda4c609
d053b761394002e2073254078c742a13ced37712c062395f4c64befd11f406b0
5d201196151c921da2862614540ee53c94cef6fd37e35ea6e4ff430c469c5bac
3579c2ea6de0d1515f3d24ecbaa315599e6aac12040f87dcaab7825d60bd900a
1ab4ac9b95bdb89edd9325fd1f5ae095efbc9356f0bdf64800c08486112aea2a
c6aead46bf0941666657f6967ffa9de514290d8ae449c92c85a9e90307c315a2
e7144d9112e3f12c4dcd0a6037578c2e7305487745486163160e023a171d15ad
ee7b9fd06181b5d296d4abcb5541f6626b20152ab07fa4a94c3011dd04819c47
0b88491919f3f8c4f97d6cb3dddecafe385e06a6f3005a339d59b514190ae1fe
1092d37ff4339329b7c7d237249e8f3d11e65dd6150b748dccd937df71558cf8
b8b4a3c7fca5461774c56a54a62674e975427e01f72011b972255721122901e3
2ddaaab7961deebfd4cc8eb277c33953fb02e64c4b4b18bbf40de3810410b868
eb552d4249c0602fd587a5fca77af7ce90c34b1e9de264b3ca34026e39f68731
5c137d8ea8dc5581e19170cecb6dae5e25c8c598b5bb9699f9ed4e2665ef21c0
842145b54d786c0187e69044f42ae94a73742837a25f6c1bc9e890e35230d8a7
b9c607260e64179d9bd9b77c68828c9f7daca13e72021a3d9c9fc0c327ae4d36
03184fa0673b5c37e8cb696706e77d8bd7a6964556c8edca98af41595a5cdc0a
bccd6e0ac17eae9f3d84501b7320847b5394ebd1c57c62d735f8cb4b21ec96f8
92993d8dd7b3352587808137febd718da70884f2182b9951932ad782cca510b8
85b7dbb9c73ff5bcd77f52dce9643da0d1d4093d4c4ffda1f68162166a783747
4a4a646ef3ec1c7de2db606bfcbbaf35b92ea1a0db2b076cfc086aded0837007
e48e2ba4acb0cfcbe0285907e1311a5fa25a4bec2f677b79f64ec3f77ecfc91b
01771f77ca96f572c107b1ab3d312f5961dbd817bb60e4e0720287ec6f50d1b0
dc577e4b7ed9c1e447045de9fabd5d735566e7935aaff8a12936db06d15efca8
a7e4e8a8342073e7f8791d2ffa58c43d71562e579b45b074068f4a023bb1212f
53499ab2c98d7d564c19f0eacb8d7207e9311743ec231305fe4b5708ebcc925e
75630cb6c07726ca89384031b4b72c7231ea820473477bc28795922009667639
4f5a440d139cbcb096614bb1c48e6a6a97601a25e58f9c9c3edacba136b72440
31cef97fa21be431aca3db368beb7178388b09d9ea7c97491f1d97ee8b7f47a4
c4e0910d0ff723a902f7f8d489716efd88dd89eb4a1d87dc2810384bb87f7625
0a39378606bbd1c2faece19d4dfa924f91a10ee727e00069917ab76c89040d41

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-11-21T06:38:30.260540+00:00
05439489264142923594015078700262843302250301641437
95589964254497102181699499476786889953101378708860
05493748864653916664023471013618343385834916127885
08913053759113012016691011711047683958088231746235
99266677924270716893954225727316831250032596773427
57019321894880585490993049437085907136139970549138
61905648764688840309687469070318882846478674371389
73263193819576866723700772976446976516433831993239
64967030812987014677602412708430511828906287702553
77142046783964887711402431953859639537113085108858
71758860438383792179186562448664860620898522155125
66522410562306360180722095104285684577173296213646
85622904550366013403921405401333781063461316207056
04268097365875438981587092928831862734847534299912
26808867659901725627051366942246612248568484047436
86539714304824701521423259489518097038230665676078
93370008616581340334124871384510164524132599222215
07877168305166250231877562815133866217044464702806
04701783092466303708543755232901277686918054080155
16518503761489403275509264902835149233702541026570
59098766897693516384900414163681444120327467743066
87883094440854407040045023282215274371272642344473
02027900299538467719574262695495517787814113073467
96131797655786017377245257627172559055285531214722
45509653671881271159336141566419082482197395999662
34430172297069399220124752448050976588950824649980
51106446546987519773137284544187089994830616302596
45966430417982200894863877614064127711630104127522
25837236118732477154014595851208090488903737719319
45927609845062891474956471438599933110152970714078

From the PIN diode (digits):

2024-11-21T06:24:18.258061+00:00
49791203819757918018832322287049072522400807993260
27264206072855107767908506156055924068380864980983
83975764020750840740164219191892985795760090170676
93321750212846296234382084146048559466671270569172
53219409819561368663218958067218041535708330939689
44102680725549898458473731904988478689720092323417
42429874737091096502028750275720411338734433690307
95216220774518447710965587404615057219697297992214
02582329217323599729815071856598073221427627646976
48170429567111367325259625087956940666009051578981
20251016462751474183995536584361179321111641551385
40848063996570231697068466381617662601321785143787
33184101457083502991427819955783027675752487132904
16840485456673929647356567224495753057007952021057
35499219254268852945120974943797528187505378380133
92323369817720080135446842741516405562950827448248
67859807381400235755832404304059257261621402266156
59929539747754032479600359925505030625396650698652
75658990921088101093267459613280271532322383489724
98537533504653614179533735282955891341670832244353
81474230651684338385996388278200616009617679612998
22062055717474001028259607877553854661604307080806
31120742436472764089074926956290754703232178952627
01193119501493077771614947899723879614023511807687
26752693710493899315850247907561415406946867685232
15212947889661138646875569761606437402597733478373
54784125867625411407492367351905758708469417991282
92193837566449808344144930041571239435494632090218
57799068131956887650977577964206065196263743565662
61548336644927622749726354391320563909245173312951

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