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-03-30T18:02:51.294001+00:00
75891c2f9c90024a2f92dbc8b68f61704fc2b0a12d9842223d982e9ba28f1f40
9a5a5855e60d1e66627656430b25b521a6923f9374ca6d9dfd5b19faa621b6ef
3e7caf27564ce8cff20b508a5eafb5c60d6487eadaa4d7d4315de2d9f2749d10
c33f4677ae0eece313ab18cb0d833cb17b0e50ffb3aa46a074a5eafe47dabd3c
5f73946169d5c7fa0c296ce1aeae420e53c5a279b512e37a1effa1313d4d0a6c
9cef2ce64f912072e30606778dcf169fc07b90d5518731db134deca4b77e14e2
13b7b84990af8d49b366c8f73d58d7405f270521ea6dc38f21d35222f60bf9be
4372d021de53d3a0083f74875011883b943b05092e56738d6f251f695e4d9bc8
59ae5ff6afeffc679fb3c15c5ac028f7277b4910b846d7f2085804debcf15803
5f225c84f435354ee27bf4ae6d173d7d27dd30f92a2de3058cc4b2a5262a923c
9b0c62accb538aad416aaba83784557961f6db10e76ab9633e3b1113d6e2f463
adaff1fe925e4e498da630dee2b2af1a966137c8e5eac6d0a75e16cc481dd5a4
7fb81547290927552a58fc31b31149b8eebfcc1916347c9b55ce4ecd03a4738c
2ddb34ce3c384787153d8acf38512aa4dbc5ed46a0650b08ee67b5c1b05594c7
51ef9a18e9256f5651032ee70de145c421c945bf529aa391116586929b049793
896a6824668be9da9673ddda371fec2fd4194956c9a944636d59e54e7ff23e72
9555d48797b88e077857a354e8a7aded83faee481ff1a40a1dcd2172fbfb07e1
e66bc3dfe464f936d41295751b0a325373f225af000d09e961e93eedbb49e712
ec7d5248e431afd8c686b3631eb8bcee6dc31382445ea13ce1345e6788881e11
f9e664a3f36ad2df046ca87a3e30c54b272f054cd1608a95c46b893f4777d7fd
ef6bcfa05dc438bcb8c624547f3355eb63b3786183c7d447b6de765b62f0a69c
2908e85bfdbc95d290a79daf288acf3e83e5e1db97ac19595f40d0d2f0b047f8
2c0e1b8d5654c0bfd65011b66828ec4f30db85c34baf0b3cf9057bc58238027e
931923d9ed5b7e54d8a197d7044fde342718e193a8c187b351bc8e980c7101ce
4249bf9c2dc77e60d0c98a0c40064fc8947722e4af5533d68809fed71b9d15cd
6b9f8adc028596b05677ba923549d8f7563cd64efe3264e79ef403c7e49df145
b7a03bdc2d5252ca27163757be9334c191b876bc52a3314ebf0cb0cff5661f58
0c1e4546bd435ad373c62ebeed4e5806fd4efffa4bd604e51bcafedf415a804b
8cfb09c669eb633db93c70d846a1659001fe1a3cb2e57b70f4d895ace161a9ed
337c5d7f0a79f277354aab9555097ae9cfae6938d52252b3f975675c952a2b97
781974b351476f3f344ec557cf7eff98b29da2067c9c164aab91a133b6329af5
3b0eb8150fb8513cd4b686b9e07d1d7aeb72177ac70c7441f458c80b4fcfed50

From the PIN diode (hex format):

2025-03-30T17:59:32.693762+00:00
491c138586c31f0f79497e5e06553f25a4d799c2838c845310c23452ea17dff2
11f36ce26e61e4f2a66463d1e5a5f80d5385040d49f45fa53b7ae1fdab8a1fd5
1cd6c09394a92783e9f13f36552bdbad5fc3ac8d0fb1d90e4612ec49270ef6d3
93b326348113e4c7257d9bce678f88bae21bd79cf73e933ce72276ded876e80b
6bb97c8541cbafafd0f7c9f81aeca5b025f76ae4e7b14543e4e5ea6ef8bf8d5b
d447cbfaa3fa73fe15077b35099983684fa50fa43fb07019ca5a068a609b256a
3685a79a206a89202d57dc8b53fef756fb53bccc8a30427721b4a8dd3e00d55e
1696ecaef7a38036100b7d46d9cc9e339bda902347447b9ff2f8157925fcbdc3
8aa979a1ac2bbfb83fddcae58cb01a14ff950d758de97c4103c04d3b914863d1
86419d68b1b4c1cfd4f901b741f322b5be09934f1ebce3d8d61bb7a072c88a21
2784d326eab63b330f52710973f962aa5344befa4ebf6be3095aa3cd666502b2
8eb7f865f5ca881ecbafc294f5d092ef82be234e1c8214225e68731af215474d
265fc86f438b2fc40b60dcf4e0c0a115aa23574618798791628e24bd462cf7d5
9d86070e3cdb8b63df4a22bcceb271ae2bcc21960f9ef55611993efe9b8e0f2e
a64a13a988dd02bf63f75e9c3c470d5333b53a9dc85f2f2ec8deba2ca54d680e
a5a588bcce4294fa9c9f65846cbbe5c713f54d78e2e818137d48ffd46a6f0ca5
6c01d4b27e10c24bae454c8e689361935a64695e5a3eff11d05acb25d83eb259
9792d0c135b1b4bc674c78dab7ba5f696de7c3bff53e4949bf6cb843fc33007f
dd8b0cda6e17797b2a5834af7f7ac3965d72b340edf7b1cd1cae1dc26b3fcaf3
5e1cdbf4cecaa148fa96c98854fa66cd4f45848828e254e657e65b791ed380eb
0ccc2bbfb3fd6344c55e8975ce5b5278c75b0898715280a515715aeb9ed56c2a
614849f9e310fb4de929b5822fd8e289d18a14c7acd16b6874460c104cd63a77
4ba60491ba954ce13fc91ba2745049688c4fd3b4c6425393f687a99d9004d05c
e6e16732f8dd216f0f2ce0ea0ce17bc3e0b02bff9235e8f4ebe8241a511f911b
c6534d320141683424a71056efde61c494a9fb40d915a08f101d65b58a4176b6
df7d862b6471c84fccc94b1c36bbcd175980ebf540f59b4fea8ef12c5016c57f
3a96b5113a697f1f9603258d2ed72df8c63f8a79461f80726fa30eed9a21af82
356464f022a4ce4b269768a9a448c0a470361c99c77b44da55314f022d9f183e
1cee434cc51d71ea5eedb339acd19d148e56b2c6fdafbc2f9e00f78dd5148c1d
f955ffa384fc241dd89670551a9f86553bcbff1d30c7babb2af2fbd1dd3010e0
a478e64f11d83332787b2d0b09f804afec9d409b488da87a377d9528f11f6860
244b67e0e236db71681211f95fecb23072c1f1e62f73642f1e397198f8b5e2fc

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-03-30T18:02:51.294001+00:00
17372847564402744746824397127994766145526634615246
55624331645490888513300298188667113781336646634716
09579125663382622475398676118038947581981300356449
93165716956370197414197124133160772314807970706016
65718960951548970599124108747466148397622181182230
61496177100856447945321406061941225992234481354919
77648326201983847344754173790261886495390533099543
33823411906714338360086316358017365948590509468615
41113731059477558974957503597993929092403923731684
70088804888803953492325353782374092361253948424505
40967865384246605512987283387365067168553285219716
06859962591719997375469478734166487875265097559867
94227229642784217141093985428849791773849125225224
55857803641540455260567135216138568142649770600111
08038193768548998154243711868103461369963369918254
63451701344655045147370604360239501555314725738669
68990989782762144985355184420720876384677331723164
10293314070795005418491727105083153775001309976287
73182582724975983479993084880995193068946160529403
36363017006306040868226248977539470576963849960737
63711907609396568884983684275185997920973199718218
91986656410891884944675775403862315172258995647671
44142741868492918017820440794833957575116005239730
56022647253591268461510479523924476893357981884252
12130166739156459926963812640679481934758551360927
57210759380233507686198646537386607850005803995769
83605945828239225587904752934584188882634978911276
02318812306970896790159846907888067875042765902875
40099805996185601270610144012660782312497297695124
93271021195374714985092274055634827917039249424351

From the PIN diode (digits):

2025-03-30T17:59:32.693762+00:00
73281933349531152173269406856337645394314032831694
52822317081097660099651383330413739565592271383128
92474869393163548543739595724115771470187339144779
38522919993725550343368627566247603418181107852433
65757526657637067769671091419171631521072353095331
04796515646376122590063896553706543367543206373245
87398386838838486619338068620094225074632854161125
70585155443571682359212137899538692161724391846340
76262049131741246503927759457299346557047780930183
65348190094779308827836014383339323882595115821309
15987083689078910709906302010278428301363075944846
30903578283020349404152621717738951167394796119692
61217035877024213545984236897044573407146039997434
88781374433350155886175362554215466674196936029199
94566071138351815857954746864465770414656536886648
56590132088799197720241925720611126508017826169475
74697642044797479000059490621790376278895146935377
80880376208386950509959162737391088467510027391210
23212342885275272295509314796477287429940763942861
72503684027969323640848791213028124391799968979437
17918220999108521382286521139058084297727316774181
30473738209972070416701216765819756604458649766327
62168073044079809866834735695744049203503311154412
23957643465336268131452798837750016504523667168697
96486964216043162901813865188225344300137975285487
23892864557942448022972758508117580527315003374146
45986338217031281411631454337530530000346475385104
69647292641254285399236885497902455924622867769729
13947957725720428678987588475800412040298563323629
50128526593485592948998687424816642079175150202345

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 2025