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-07-01T08:00:52.802393+00:00
323b8df1fd35a56adbc8c045d7ac6cacca21d24de428f3fc638f0a1a45858535
a5e6fe0ea01830b148456025c4ccb0abb26a4ad433563f44b9457a251a1b806e
b8ac7867caa90f72c74017d69f4cb21164ac42ad1a02a247dcff692c7d3025b2
c8d2012160c19d0c2f4bd8ba17a6a1501c5f2dfc9c9320929e73742965c24f0d
be0609d6f6eb254a3242b201ebeeaa000fb8bb09c9a8dbf02ce7fdc636610f85
ef006ed4d3ab72c0fd9f865bd33875f2d12f9f990aa25c580a60891b3dc3d5d4
f22c3f2f5c211756c4863bb9e8ca874a82e0e7d723d26022740702ae2a989ece
ba01690d52fce3120f5521b6462c9b348e0b29929250019b2fe99e0ed320dba3
da737d268bd44f8dcb968a36396ea02c94cea644411a259fc2c2acb1413d0a20
31bbcee06b45f40beba9d4449847986c7c7811febe066bbeacec16a490df5c8b
78f21661b0238dac2d92eaed914853f1980f3d00080533df4d39a21f45282855
0d9561472ca2a62f9d84d1e7d93fdeecaf888d8e2b48c22b7ff676a63a406976
fc1714d8d2b020774e992f1947b2d3c562c33f7fd4da598ef685cdcc8494d5b9
91535ff5a289c9932510a1c86a71d6a9eb4dd914232f4428ba5ba430f19ed67e
a2e2f35370770556a7c8e4dcfe741e92342afa3d921d9b2e64598122b6200e30
08e060941bca58ff9f084dd51e3604df1db57d91f2de002fac204a095a6a82cd
687d2032b407c180a8468a2ae51c407bb202ad06db582d0d28ac819c732adac8
b777edd626756b32f15987dbfbe6c02314984b73beea7f89c9b243ca39b4ede9
1a69e67b9622915bab626e096be08a907dec57013ea12907ed3976bc14098ef9
29667eefb7dbd694eca441f8525f5e501081694bd0732c03975c796a06b0fbbc
f9cee5f31d472a12a542717152e11059dc33b639761b75b8ef76fd1d7f49f5b3
f0ad4c1a0978bae5825cf08bcbc0162e79030bd26769992c442916026ff6d596
2771f061608028d37cac913232077f1313f55fa1e48a57d50f4d41282c3681ae
ab6e08df6f21bded2d0a089896be8c5825cf9adbf14bc44975a938e39993d216
16c7dcc4809c4d7de7b1dd27662c9a08fe59eebfc1d47d946c4119ee1958bc63
287817c2044dd0ab97d996720469d0e2d7267cf972ab3485b0d9a1b508585612
8b06b1dc9667665d781959ecc78d4af1a668fc7c7b25db0ab7e81cacdb93f1b6
48313d23e372eef30c07cfbe5f03bc4501177865db334cca69f89b03880946ca
e8ba3c4dd40027f066ce83924ebe2d5935c1b0af93eaf5261d90fa4d9567f405
f69efbcc71fae61022a80ecd2536628bc67953b09197125f213971d122b2566c
85890e2bd925c15b445e94db8c8bd2f07648e1d8208911024e1a85ef15f297f0
cfdd5f201a8019237cda0329da54ae342a0eeedcfe564fa92ff1e92adc6cf4f4

From the PIN diode (hex format):

2026-07-01T07:58:03.201631+00:00
654a9ca311a2f4613b285599324399b142d73d460d302a5f205a7973ea5957f3
94037ce1399b67178fb7fa3b99f47207abd0ab3eec71722841040aa3f27df60d
9578492d9548c53723200e8c5e45f146aacab2de498fe1a84bbea6e6effb6122
9781bd61652e2ee8e48748052398ee5b27457b3f4537c42eb885ece713115a86
bd59adcd8b2de1229461e26a290da7b8b1bd01a3931892674f5c9953cdc9e673
11a81762f983930199cd1382d9bc9b669e98dee7b2df9a1c6b083a45433ba232
383dfa413d841f6a6550c5817a4f22980642c579580a0bd02f63ae89e5ead338
6291f895cab24a63fef4372dd7bc6f26c72d67efdd1b6be7a5abfe1ad39d03ba
edfc2763cf4e82f3acedfc6ad6a6f3ec2058e41c566eeccb320c5ee89fcd1459
fd7fc4193e677fa7b8dc921ac11e7897f7c1ed90c1301ebddeb78c2752fca45e
1c8a7052fc661cbde1cf5b46ea252c8e8b30e7faa68103e51fd75c3c13645ba4
5470fb9dd472f4f196ba1efc32aaf8ce14d8972682b3e91ae8d67b6adfb7c3ac
9e3cfd9ee39227de418f1d04ee67b3fba3e2289fc7ebb155675645f91d29f317
733da37f3a668c613d8c4a195baf00d62e485d49ebd5dd446944c59e6de760b2
1faafd7a0c7b434db5dd8e493aaa9de393cdaaa7e5b40764b5962e9cb7a3479f
de2e7e16762479f4f16bb312810b9fdd8fb015477934df6fdf0da37868e2f0d6
359b124fb9a806e88bd64e97565fdf38e649c27fa6566d7b22da4d3c3e0d7bfb
3eb2dd44cad31881c3a7753b19d3016b0dfd1edba7541b5aa27c3c3c479aebfc
32cbcde82a8c6169551b1f2b9ec715fcd09ad9075af1017bcebe2ab69a0181de
2c337a33bbc82e12ec362f06addc25557a097ecba0238f666b1e9b7f944662a6
25e0a315ffc4fe9a578952575b583895e870a60e93e1cc9577cdd2c151d09e97
6dfc208c797d0fe47b6bc9d6e79ea1b0542eda4526d6168992ff614707254ea1
bae0ae2b8003bbf576e6c1e6c0fd2587b392eb02419226069d4cd0e1f37db9dd
113f512642d3c7a53dcc1f3f627d487bc7f19c16b07aeef7151785bc7b120bbc
04a4827df3fabfd9ae9fca61e0ba72a4eb1c96009a33ca05f2e20c3ae5cbea3f
6fd5f7a8b5431335601d36723f27cd8bb93f3e057adbe8ed1eb81a0d00f450c2
81bababa8c8661cdcfbb48e9d81cb6914a8930bd6ba9fa90c00b59a26407c705
f7ae73a8b8e75e2f6ee93c3f6ab22394977bb7943430a5a9c75695e20993863b
8c9e27fcbcf3f32c99ed05b28a18db12dde434e5301fce235874fd4364257f2c
4102cb58490a01c92a3376dfdef4d82f706c34973e818b3bfd4ceac7173bad15
7c17538a79737823c035cabbdc25062dc6022e5996e8488a11d0b1c24563bee1
cb9a37a2d140a7e637b25b2f912d6096d3bca127b877bca342333cec93cd1b69

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-07-01T08:00:52.802393+00:00
50594153650692697208723377409943102669333353651460
24487772699637967671780674518663688569223726272810
84722003691514996423597678170072667326026271054425
48377801339693571247758623666180289545564732465815
16410194791390060937745066780170001584870968449854
97153300107114925934915617475953106292881096372761
95446347923323869634598535743035963416070274425258
86010513821815853382704455524211414646800155475814
32631525383979415038545710604448666865263759949472
77656110324987076911696852715208242017900607907222
64449239202297763541724546457283521561000805517757
62316940408513499771446266475732637536414243729443
27186658640518232076321978534725717897989563278942
33324885458395623747371661061369772035476840869164
48582662831219058667163046524261462955460089293482
32144808964827885908773054042981254500477232740990
06300425325080079328687038422864237802730688451340
72295615428319381707508935923520527515902737786757
80260523503445917198100907384425870162614107571888
20094241022683486465829594801629057515440351922106
06768829714218656613138216895182571827178418292773
79737626092086309239922246210311030553446841220211
50391397962840247245505007271919956138871577654044
54297471100811338945100852509040883754759673176956
53472222999628567725773902445408899193254808652525
88889940202394047771515014040538241471523376618108
88861839067750030293202589994174660424233710832872
47827249613514120790950388690123200151760555033609
70866077003902314678904589539376754738294477490305
58131634681437549839982183764551189533571334788608

From the PIN diode (digits):

2026-07-01T07:58:03.201631+00:00
01745663176297594085535067537766617013484295329021
15898748032457550323438359531407717162131440650410
63251349207345497297553532144094697070787343687590
66973451298997014646357205355291396923636955964684
33191790348989733945344897064113678477890163472446
03799253831517682398314701531930885502585278542807
08586967596250566165613231060180972922793452066697
21881011479974375698454978749955458811389945032707
65712657038639997830720666328828861050129459208927
96256203276784462693302051934493483089834039826494
28381282022889917037444239486629033192601900916484
12571450863050702051383079262306839572586058463965
43290403796340599977850386692941231561632758024097
61407425917500467293736805689758099678317022122367
77814273587057477067800700815046568363715946262218
36210779182911594376217121521113632004535518798568
06397851869556739427668609233477606213236278682429
95671759250107133067842790622460607154504240970585
27314358992154079001239042825401294451225187461854
47067337852209266035430207305527487098663763219654
87378287918856491266144749199381585109324021251523
07586176844669382237469771073778618674432803871893
92373579460265463806577625851763813866996561316398
25722399562276222123338823181188046430259174599786
14642850005451051258631168816719539629541463393985
63620522308426130080942986868640349787722882457437
48890769449211896200079905741568849447106063067835
48512383485248656999864909473459405839884453057838
24185248313588166700372744650288731001425118471208
52516229395976992359732124238338211520359253873706

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