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-04-28T19:28:27.727134+00:00
6d8c326b28355ea9ba52d42f1edabcb179ef939bcf7f1d68f937d822b8bf89d7
defac91270be6fa1151eb3557dc219915e0a05bd1e4d8f936db2b56919ee0f73
017f88e4b97a5f0886ce8c185f67d6a9c930ffd72f8ed8844ce12b80131db04e
8aeba0289eb14c07cdb6dce8a1e48b463cfe669a68d221660ae92f1d15395eb5
f2f05afa5c7c6e047775d1fa567249d01b470bd9045edf133c4d937944587977
50a52b35ca526b3aa320421feb93b2f0f7588b1050d690c414f2ea3ceb6a2640
554941822b1ea0a6a88042596afec68273bd32fd33bbf9bb07316ece2d34fec8
83e02575e5ce2db7e88057e16c4d5f54d678fa498adc12e126bf363a9927b72f
1562cad31964f51c6259f1f9977d89735fbf1e1f3912b539319bcf4a49b1a289
721e0bc004997d91b9ed689e2dbb6d6abc2af2b566adbe4c05a2a74fc81dfdbd
092ddb03c1d421f4273951df8b455853023fd39c6711276e911933a765a538ac
e13eef86ba18115a4ce183a8d3a710fa7eaac0457a96b061a5a03fdb5239bb7c
11bf4d71a8f6f2948a812b2f07aea7c76c3c6ff05997265df4a89178ca3b0e27
77f4d64bab471e0914f6255a821f0e4ef953cb30dcd56f05c9dc8b2b13068c16
aa1fe7e49111c625d27aeae0c13539dc640b0b7192034b6268f0467cd0dd74a2
0779a9954c5f2869fad5146ff94af6b3852626d376dc424ca6e899e6073ecb0f
0409249d4580c986ae6ece7bdc84073dd7d95d4ddeea4fcc6b0308f7326a49e6
513f895d09ac74818d3398715cb4567a6f8b9b93cf02fe869a12cc0bcd64791f
460db9491e04789926e63974065ae280cef3b077ef21876b2236fc939da4353f
5d2793ce5b062dfdd0c9ea37d8229fece2c21b8140842dd343586a8b4801965c
4fbd3b0462788ec71da89e506430142ee2bb3b08462054e6ee204adee9faabc6
929f01801638be8e5a757e4ece5a541fdc13db54b0e4c38ba236d36e05febaac
ccf8b5244c40df57a0428eaeb7c3b85170d7f1a2f4491553222ff3b6d0d18a95
7f8bb86288093700b7967cd384efee90f48596b8010455502c6d8e3a8cd16736
038fc81fb9c32fb41b9eb3f73898984d08cb7ed24a7cade36de7b97b9d1305b8
11d20549cc2f9cc55e64e61712584c3b9c2c8c305bfcec0ac5c251ed1ccc2d88
2e704260fe6e7d094bb6cd617298109a6041f101c215644e4a2d74da7c21ffb6
cef57044f9445a10d695d4a6b9f0b00e32ef4fa0b249f28803ba24bb62ff1f00
0ff69b20f422137e041675f33b7e380af5cc9841f7bf75e5cd70fcc2b4560d5b
89f56866108c931e8e3a1508f61905cdde64e3fc57c1d9961d5df401d28e3286
69011017a1e6a3d8ca861a34e0f18af49934111f8951acde5c711165a0c2ae75
0cff49ae8818f0bd5cadcdd3d6c5734824da7b225976e76074463cafe9554182

From the PIN diode (hex format):

2025-04-28T19:35:12.828652+00:00
d65c1301389b29c8862571f14c122357b33c65d9c92b65071ad123970e17cf1d
ac1fe17234fff78a5226552dfd8d513e19fe0e9b47563e550ed6ffb1cc13b5c7
9662eb0e3e619cb48660e3793fb2c4c358f94493e282d127a44938c466d6e3f0
9fb1f69531b93ae2c14a6fd9eb6cf2b6669345ea0ca76acc56be0a6817f9f11c
397b93b5506d816fec6907d2466b250f86166c0a0d67b7ffd19f42b1b2164708
8c2bc13bbed860b77e44898cd1d09585c8b06b285935dea98efe0b02cc87b350
d80038bc74e8febc95a86e439f2a570e7e8d278eac845a0526e126d0c3324b1b
fe66ec45e0f279a7a6383046dce9fdd94c52d96b6fabf51855cc742c7b570942
0adcaf8ef7ef446b8f9075559183e5fcbba51b5801079623c9c482c821cbbdb5
1b572a6d1392ad28be38a4c94d81a0280b063938c4b6f940643b86b34692fe89
a2c39c2d9529366001ab706d4babd6d74e3f5d15073e1a9242614971ad909fa0
ca7137cf275bbb7b57f6ecc59e4ea2ab540c20c77ba51921de0489a80903281e
48cdf52d308c8a774af9ce4fcd8be13d48e4ace64f4e65c7a01a4c1560eb6075
ed38ac8dc1d850ff9724833b17e724f76916fd34627155149c03e0fc031b49d3
b76305fc59b3dfa428d4195a771e980786c5b26565b0786f8930c627d60b8972
441536b869f40c32875332fc5d44146acbd941a0fc6f5475719474d4fd0c12c8
5ce7b19fb5a6639d0dd1ce32d922a9304614cd6dc3505e17c648c5e20ef00be9
c23eca04879675fe9c88c9d44f80d5a6cc7d8369092fa45c3680c0e3319a4e91
131fb80fe643187569106c4994198c74adfe43e3c08245c0ff51f3d4f1198536
1248c7e347117200c211ed302cebb719f2d735b54dc40a9b6988a5ab92333677
4b261e51f757a7ca6484c2dbba1e03b8675429fc866520a51e8cd45bba196d6f
723bf3cf3f726c71ca064696e1ebea295cc39f761e0b3aea82b30588c0a219a6
8ed148e9378c24deb7fbf7cc2aff9fc65f6de71b011105ea79f0aff61bbb2d06
e394b742d9e41617a1c06abb4c3c04483fc90bde9b623400b2c63cd9bf50a2b0
4ee7b6d9ae0357f38436498eac857cb86ca71cc84f9daf62fc298c2e965025f0
48e0cbe76ae0cb38e2a9323455e8ea41ef6a596019567ee28ed57535a33768bb
d23793c6ce8078aa78e59adb7127d0e92b361df87a991824398bd9ae94d924cd
90d4fbb054492230f486cf4e3043302a2dc711e93bf2acca7a2f7f42f51bfb0e
0b93727eac2b67b9de51649d7c35d5e0f05b32ad0db0d633f5288fcae8d417d4
9b3e795e9812c00e2537b184216303759be4d9a0221a4380f9cfed6273bec9f3
756cb431f4fd8e1e9e1b5f640b66b1a26e873ead831e012dd7e8c5f18bad7aa3
c1e1aff1fbe5324244988c915362a7cfff5efde9c4df7ebc44c5ec0a21b8e685

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-04-28T19:28:27.727134+00:00
09405007405394698682473088772147552729045534849137
18129011612130798525942545941005893077434709788105
25151501273685229508344024950369484742327643281929
76783860405877760782613970600254043302104729215794
81909224100419178614732771110494196077472168882119
80654353820758633266314778883916804496206006386485
73653043306066682866890698301589505187870749104552
31371745832887087795842073381838915458533983472198
25002898895125371595913031571881574955747377623714
30119204532545850458458709068842810273907605626779
29890945039333395781396988830263560317391045255167
01655672623486241790763168671626709269225076976560
63825787241791771368483829434707746799086011895138
93684520591439197571713009203790303114788348110539
43190640227031451798372293535700111113460375980470
24166207216949769540052011747933383818667666530762
15040936576928347410233207619377790703085006738163
37930972162941515213928086221139554702345418110021
31701385733004205338571606902876193335073454475764
53639339479106455534599427296432456788063972015092
79895904982042992968588000482046875908703284327471
98465901282256904290172678908431198476953962541005
86728136766487606642748395848112627321833447823849
27398498360955008350243244335084010485804409425840
03540343318595478027587956525277082674247309852357
19058417057347569794002318887659564440489110979481
28453646126696102509758297145216549665019421007874
45162433821268689016496685761450796078733603863687
98310015553234192604221759265610526591171294808613
91370402164047304258210825050087935029930142503405

From the PIN diode (digits):

2025-04-28T19:35:12.828652+00:00
92190156554134371376183587796001430107263551142329
72311452388238854541816225145571866285147719819950
98146297568034962163789695886847303964735696025977
49498558937411088202476912670686901004232857234781
80092911050770073715342208101303835966777822710840
43935990968326683740493376074089536942110235798000
56881688496810675942871426413942723290053838955075
27026921676656487076820711712485164423870966107542
68074344178545318765278801075035963033898127874209
19467340905664772960401106575696826400593479704637
62955645494154960171120975717863932107622646669773
13734459601355399187238797587862718412329923652533
04376809034030724548403819747939617272797801996026
76219696175672419380513631592336052252981385205603
03277383990589796440259019305207349778010176201137
48983911371468215484051250358350936820066560118417
13481612189277598166995713503469487020099580942398
72971411946204355017563679286625310509476492542892
49547845193184156724170516087348254016736792306992
81253354187299711714009417484483255381779610550536
65714651541975383081876700329486300384038441340132
65304091862509111459631408130670504192955918301158
30790536926225664272554036834259989509270117052175
27874506488366222361920687766004726311559852007898
60918062767882740387325473427233248408672879577598
41404650803772065669505285650689962586264217536355
04875547982820702054133943542922532436573974483644
76847334483478486748424599175972224727662714114714
26724303858100572453915073137651404323556221945218
92143755773233990317556034266728981590170880494230

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