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

2026-05-21T00:35:02.279778+00:00
d43600279a11c165f4cffd3870fc58d7bceef24ce0a7a430f555c39766d4fe16
a2c67594129b196260984034521a545d25baed49be4092ac218ce1495add1b51
d7b5eb2e3d53f8342895653d4a326f7343e3543a41914bfa0ec0d37cce16df5e
4222ad6a59d1cfc46b4abe2227a8ae77a9f63228065ad575a24d1d9d3d413ee8
c9a3d61096859c33695bd0f71d42be739e2b0b45a071c2ee9042c48587ec7a8a
6f9a18a57bdcc61971f5935d31679c4e16052cb2db232c59dcae9d2ee8c23992
ffa7d55df021ba587ecb862826c1d6c16d94ff58e0d5561f09f728ca17eab4e2
6d6d469e2cf4ab97837adbcbe56687e2b33b138d37845dd23624116bf59873da
c02c6c99ada568c3ede3113f2da52c4d256ebf579367e7519e538f003d25bc98
35443c7c9d2aca4d8fa269a1f71131045d131119b0f8de8be6ae94b1b1fc9b29
088f2bde7af59a5b2b90f9ec9bbb31dc74c775fd7ecf19d617b2e6aa4c82f64b
f4d114598d869c2414d6e4b9d98c3414031d37c12c413bef2d16c494b0a20b48
13e4bbf31e76793f78ea14194e96d3304ff8895f07f33de17f10a307a0abcad8
090715ccbf446add1da731b67713652c890bab9b4a8ac94b992dc34854d45251
db5725c8af6122e7e3cf5ae407582a964e80e5af3ae65c7a2268e31024a262b9
7abff9000fdb09c961077438ad68d84eb947de255fc3b64f51e0d45bb4e6aa7d
16e22441a9c8df75a1740fee356723eab4d0897386655c236e30fde681b25859
801bbe862e4219a8fb253e1d1af61547912e695b4c80ec8a713b6ab44a3db18e
2f4fa9902b1c0668fd7d59822c4b1210dd0bb9a17d4f48d7a3a7a26a59c4d0dc
3cbe96ea8f2efafd92b0c81f83228efbbcd07834a6b57d0a384fd0239f084dc6
64abdaa0d7f0f91447366d4d27d09c943024547d8133ba28700fb2d695b3f798
3e21d57065541c9494389a8fea3a2d9d5d16ef9725d64ad181736dda29874366
03e1ec086f4ccb408cf98048f73db4b75b71afadeb68fef9a9f3583e0d570a50
3a873f6db14d60f70c92eb9fc5f79f573c357dcb2f6558973f2ed8d349932b53
8da64bc5e9269004796f434ffd75a2a5809e90b6dec871279ee8e0d3d570ea9f
8094282f719f7ed9f5a77b136395a3ba7af3930caff482f6b8caa40841299aa4
42f0b3c9f54d1c04f9c82a8911c6ad7baded3f339c682a038516681a791169c2
4fa914f41f35539c7dae27dae40100ef13c5c2edd5e0c12455a9a99e1c37aa9e
dcd03e4c559f59e4bafdf38f8adcaff870f2b1b9d5e6636339a1b2d17c004d6c
f3a2a1b4558711847b7046acb3049b284032220fc9147b774e4950d4189d02a4
3ac3d039242f44c13fd27274c74e848683ed354663426bd5b47445c58b017c16
d44ddbf7a47c89479fb4484d80045cd0385f4b89e9af0e2b6de8b5faf337920a

From the PIN diode (hex format):

2026-05-21T00:38:20.080572+00:00
3e401d78caf187c7898fe5e7fd52070cc55eb63ec2351b590d4af930c20c92ab
826bfab0d320ea082396266816f203828809f6ebb8e8e2c45947ec6947544b91
d7731573b9cdc013c9e0bb6b68e66b78ecd08fba12b508811b6a79856410f76b
cb31f61a60fedbccbc7f6125ba80a1974f17138a4b45b8b324fcbbd32bdef840
e3cb099cc6ab72ffafc24351e70979ec17efca0e4001a20fbab0c6f4623d9546
58631587dc0ce67fa3345ec13e3db5b0e165d545ef844460d1fa6e7de66153e6
f41e9bf3ebf1684f62d1db05dce94978894c15d4c889881b6b52c0a2fbf16bde
797f564cd24714831282c0cf7f23fc1b5b9046f93d2d6a09d95cf03324d5aeac
ff8e76c7eac10805337ef77ab630445e577b639b6018609a2cd6b454132c2fe0
6e583651340863b62ab4b2d1d885770c39b2b4bbebce14e2397c07c0a70feadf
a0739712e1409509b5598e586061ddefcf51e5b3bba22a4b9bfbd0e3215fbe98
70bbcc4c49f226354ac29e97483dbe1179f731d17c4628e62bc36885649b58c1
ad0cf97f5212c47299d0df6de8a9fd07dbfdd7cae48d776a1ddcdaa3e7fe7af6
14aa32bcbeba23c3a1756b46afa95b406abad9ed1dac3dca51d61adfb0dacd26
50fd447e13b1c9f15e65247107248f7a037d3cd3ebc418730fe75e993a2bccb1
40c25c84f69de9b40bcb5102bd9aeb4cbfe7ea9d508430c56b397bb611af3329
9f3e541582634d8f00f57b0668a38394274224230f5a28a9b12a88162313d713
a2bfe368090d2c200bae1cfd83c89853e105f158d09b0b9beeb6b150708950e1
60df97daa51348a0dd042d70e4c2374a2d54c02b9f8d01a12448ab0ac3d41f07
ece293ada91621e5f389e288199a39afa81f92946d10e463a2382f818e6babf8
8f219a62e3125fb121b9103d013be9cd515031719cd18a418fa70d5045c20209
9ee2cc880d27265418af325850c4166fba96394decc64e08690fcf10199047b0
1dff19e81414ead0e10a47046224d151c7456a0aeffaeb01e43f0b56751d389d
26f3438b9ee04f23db7c52d86d924bbe8775788c4b8fe42e88dddb58af6a9c3f
f16d7bf496c11172f9634b668806cda3104ad69f0212d5277d3d359ba8842663
2ed4bac00d22e624d71952b592cb70ab74bb02f7c57412dbadaf51cccc55c802
badcd61bc740ef0ea6e57188b43067c5d862849fef464df9c825eadaf47c7ae9
2580b8b5730ed09f714efcd79f3d46217c65078e3fbd7e85067ecb2564cd0000
fef41edc044e320bdb87a3d520ccc3846577443b70917c9cbe5ff1eebeca2e1a
e2e3f914bb1435cb2f233abf29ac66cace6ae821cb8a78c501e00ee8bd749e28
7f2dbe533b81a786568e6da4041ba087263ecaf1b7e6987714f0bbbe953a9e31
1a3b06b77c95d8763a2a833b7a929528ce76f341eaab5f726d23adc46560439e

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

2026-05-21T00:35:02.279778+00:00
54003954179301561288887667644885955102226298174818
55259896526452822684933786739064467233407390278181
46618352404901617450111567845865457514922422946634
73068996077490343968741969504006901762772957616562
63165033565105912966901558431169601394446696333522
38115424652398251347934903567822054478354489745746
94574667933386882634403893930948888631094023800909
70584471513122023579591941553293543617075215924408
53736504951763456544773710918747038158834300613788
52536860245742774362056117490493191725763974487777
55410843432254914344558749169917262523787076307520
89413456362085405220032955934465594522964876621172
19873018216320202578504879379507612716630760710907
21916806296749821919014437117155743875534595728482
81873775973490078842507828755892223404163662988522
91001509970716567304788571379595827981918070252236
65691761161553033580371534019235104829788889282790
34466625683762292621714546059176283813590680746177
42477969444328060425893044751816118561257972636762
06899660905043464676313134428820526681251056793559
08779800716020715409773956484836842529518640121578
49795262331201842848485654435845579322513774291509
41356702030811766440287261808391137573046988621387
10805835630977779612465997598760532547018851634673
47438341667597384404211167791762652858448213395812
59284840471359266723199949638622471275308464086541
54646679772804423717987323736351560442033322042621
17059479692031538356257439010019979493368569695828
55705862768559898643387512778599995761782400770862
61808535173223127072790455406450341520231978738024

From the PIN diode (digits):

2026-05-21T00:38:20.080572+00:00
62642920359937438207129794826294532789137448941246
71300776320835503804220330360984968971057184754515
21158592198707040720438618810829270621330016074926
96882797378628615179231938756984793687436409569871
14759467810921231464016215867698986149708899213512
27635294936261817601693268961025978330550479980573
20377621373627078292620721278676712031183092273527
91447061450609925136747242189993080551262282486894
87239955962496544480841944471088548152089982428078
33191257788087205724079267156015511864490981894288
96978179876242755533959052128776733853749458517261
90172149247040439504330055889373122782189614530969
07411906296322207050889086359561170770756991640686
29726181267638806826197794013613073643220325609624
15159453584377649492325780118102895476915780324897
07572382177551415962842130997743002306046331483966
36351590406977423622351919629104091344321174283152
83058855115582778012378096516519726004451294557445
84924359410161367271109531074773692233373625545775
68314648091699625647294207714333549818957733851661
01598180491356386543671380699402095836133938842475
50888096221186505777987808051516254471762925202010
71049836819969061001631186172956573867395879352482
09467590351720407543463688750656630923509317149975
02360663167459021839256153556832389946869213343625
82814612711687029716187375818502862799641466133680
48039798325970773724223728848115145913785961703324
01074263892633062637000000300478501135633295320119
68591245245690959046262087205347355891417202063338
20970114891658402745908359296734864209640427603538

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 | patronage | Alnwlsn 2026