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-08-27T06:16:20.629988+00:00
f093c9eac42da5e0890a4906e089528e9e7a64e6ca1e67cce40deaf8eee0a523
620c1159a77042a6180b34d6e04223fc4758b0a9dbf840e43578147f1be1a716
14e9afa73d87be53b11eec5b0f77e9022d25bdf7de2d82c44e1fbbec376a6d23
89601bce59f3e6aa18b6be6e12fd24cc9a57342e95a94fb496b99bbc2ae08b17
fab01d5d89db342262e93bee8d19082e9c4d9d298e779d3fb3d440d811db8bac
6a251c47ff088fd4d46fbdd36b3e7c36a723a84954449b157e21c64a3606be0f
c8d7334eeb574f1771adc82bc950911d0a87d5d1dc1eb205066c3fc0f4f6d17a
ad56f7b0e6ad4f850e524d66c2397044b9a4888696460aeb4ecd016eb50987ec
38c63e91f331428e9e9e652aaaf12c8454dc955ff6a5ce875965ce6dc39c74fb
af7a2a8e67f331e605d80afe22f2d76bb156dfeb126a7cc77fb9de847035f186
478e6668310f746faa79074f7afb815dfcdcfade4977ca9a1e1e3a5335a27541
4c47f1799274eb31ceb55943974aea72c46f12e1915283295f9b62a964669fb8
c6a82138b8b4583537312369e5bf3ca81b08ced88342769684d6a408b7cd83ac
b5f4b6582fb4e9a4c8cad772230948e079c22d0d9fbab0e7578aa57adfe96dd0
825b2000870a4a6edc022cf49b3de46a9354d12cf1b2d171dac75e9fc0247b5c
19174c834a554cb97885a595517422073cd377e1beae482af6cb432719e6aa21
b9664a7863399d2c5650753a0671fd618f852b676de90712cc042e2bbe336b06
1575e812e527131343d0700aef1cb2d7eeea56f4d0bdc0a0c8b9dcf1b41218a8
1fd4a7a674189f5c3ccd001ab48ff62bd758ccbb90fb12d59df120a29d7a5307
afe3cc4d93c41d5c6c1f0604829a609780a4c98fa4ae88ce0d02107be28cbf3a
87b89846f10e2e3a422d6369ee0f867c900d4c50cd80a32e14fda77c5f40130f
8c649ebcb8618c37bcc904ab448a55a7a54a8cc5b266331f8ee1a481f5b69b25
20e347d699ecb271c2a47acd5f196a2b412685c64e872851b7ffa57d1c517d29
5e7a0ce4c9bc0109a59d41f15efcdaba6989cec0297d8d7a6919b51a06985e1e
dbd6e6d839182bfe1affdc26b3078358e764ba4695767dd55932e5ecf6ebca4e
80bd42510dfc8862b2a0d65b888acf8c20aa0458a168b56059be313197b45c9b
c8bb259f8fd8f85f40a324f61e880e08646fd9532a21bf46b021a4b35e2119eb
d5dc85824bc8ac5f593d00dd437d5b9254264efb8fbad5e3d64c8779b35acad0
58377003d75afadbf88940b0365fe2096d0576e04ec7f68b0fe95471da1721f6
9f641b42301f093e1d8bf4c1755bb458daecf3ad78fc36fbb778bf11dd2263cf
f857876ed7a78b5b97888716475368c76547a2804c4086fe3cef48cccc951f7c
bf910070589e3215c82023bd1606b0a5758ebbf16da4d72c15454d2cb47b213e

From the PIN diode (hex format):

2026-08-27T06:19:46.630967+00:00
6527926da10f139a1fab339ba38f929582d19357d24afe111a37272e6f39d653
7cf27514545da00207f3da871bfc05069ac82817f563175b2057f675ce935c7d
2c3f4ca070637e65b8f0bc7f10a1528dd1c609af99dbd59d11aa028898cbcce2
caee04bcf7aa2b0da2de8131025c95c06520e5fba59fdcf745c1d3852fc872ea
646ebe69da868904db7c81ceb3f81be18737be7a34fd75a4d616ab01be04ad8e
d23ff5e8f9688fe4630325e004daaed71d89043031b3c43541f06cb7914c3053
aa8edac808047b9d170505a458ac3666faf5e611f352968d4d5f9ad9c800ee7d
0a7a39693bf8b276dda0abf7b0ef66f415aef92ab4cba28e73a503e6b62fe463
864730a5e437db0604d6f2b7d5584da3b01738597d801d3ce9c2f651f7808b81
aac172eb2e346ca2e436fe153bd5b5e9357d0c5b132b5e48cc83443c7d3bd3c7
71db7a79381fe5f70f89737bf77356e5c8dcf1cd3f6445155b9d271b863820d5
dffafe24233c8ff34c03b67a2139930a46f15f35a0b27096e1e04841490a2dfa
2a89cdd84f9a6088438df31f2cb6cc1c567118a7d050ad013cf28466905cc8f4
d6bea02887f7fea2dffde666c662acdee9531dcefa5fe26ec64ad12aaa93786e
f2c25bb04ed4514a135535b60fc9d9b5e9bd6b8f15e4eccb05b55cf53622c343
794daf8e32e46d942b26ffd1e75b3d0b5d7d2f6bdf26799598540df372c4105a
54ba237cd5a30506794721c52ea6a436a7904ea70d0c6496d0224939ab343a55
1e4524e351a8fa4cc1202ad1fe797c1536a0a2dfdab546c4eccfdb7e0ab1fdef
e4223ca46778077af484fecae65b2584153e0aaccfed6d6db072dec6352e3716
a5518c515d66da6f0afe5f86311ed5378bbab3b20f77c470174ea80d18fd3abc
bac21933d801e41c468f882770ca0fb0b433a21d5d46f269eefa3c1039944f90
642df7d187abcd3eafa2d36fabbbcb6cb3dfdb92ff98568af1b2c5fc9fe5ea5c
cfcea8dd506d92136b69951786e7d120f8cf46c978c6ce01ba854bc27fa77c25
0c39fe0d83f9f6e81ee2f01f28c4e5f9767a1f5a351ab76b946ed548b7071ba5
4f8746980721656ca100c2eb8595c34ee1ee5a6f680d3138c62542c7b3ee505f
55056eef4517b85f53a9fb798d9d8cd1e4cb3cb540e99ad98b9a06447cc73878
404880e5d7ba6dbdbfc1d8c843b623fd3a4c845b4aa4365297d9306520aab627
63ac3915d0905c07c5d05a07bd2bc121d2501d691af976d193425567ef947a30
c08eea484179a70f0619306946b305228741d2b58f45167d5707ab0713e9191d
9ea7d037aeb8b0daa8d71e525778d03725b676fc72405fb413099b7b810571c3
c5a9a2c97de505a2b9ce45c308aed55db27c8088ab04b1dd446daba0f32d5f59
6c857244585fdc163d61883c45219c818195d615a673adf01a2e416f4be33339

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-08-27T06:16:20.629988+00:00
47964565371073063782425822003003136535981217896712
66662411526635718876696453202027276722207567613590
83773091151902453789453096783187550609353796278970
24829010183654875246496979805085558842392376299337
52349859412508465677574142195763796417397206372871
08431189076224546735687384685521263398745406901551
78877923137343804529103530780506086392227386767379
33148277029457126885643634507010780110810935569862
45496642585801427044328449956535890109955616752242
42034905103407778618062499278532125334714202044915
16117021077922299373195430305883536217657671214616
49818967517414961118458231419555986900025984986833
56848088535549350591606827083166185032640883317281
82884780641435097221944513598676873865220930913200
35107410024455610647844478139994599236239225237631
74857685203365498116340760199074724267392570338502
74209957574486801758061397433343030907180446439051
07062117183919196712102878868992608580182468316766
16245992600026804343888744185732625722830775774796
29920831060430549651286443647436130216234091583584
52701446586645990515342444137680286346206724956419
15400058888497405588047168388567657440977802513142
64298255373271537813946422952506436538339878354081
83652528812541942212880109655765948605379241254122
05258126065294305724432638790731880086704918258950
78288966811336987860913638403270048861048196899049
49518092558737594395646336303614080011834233917076
33647994332533307572958961006725914684387843867635
21799088551203903764765495090905187899391584132333
59002766483109622939931791808873205483209117349987

From the PIN diode (digits):

2026-08-27T06:19:46.630967+00:00
01394609611519543171515563434649304787741726553946
11578324172084936002073527050654402399239132871747
92254463766012992601848827166182419809755357177002
36520488704313622949029249920132655969933347140010
90053437042429792735559022521764227101900473426304
43990337047429370448497996536508834576488370420804
23572305056488725402178250417795540025102257055978
18607176022174428062421565038247993471486555060483
88776376235689252829609481283929709314465208625421
59815325129119439472316860255999132221563115371523
15866300692191573927345632363560437603822233574710
70955360781250726573104542377954963667413144822886
13246780730160320244929060403562029898728329951098
74427047201094917678817419855382158189074321058192
54349567217775425009484338916111932547073821495284
13149616908486352463050621713397466664546744786713
12005034735771525885306936816876933242212421546062
81709626107734606403200722329137322162107209097614
98534655226581408193021110953449305539867978151996
12237868132458888694255101287043363912157680516229
93700560165748794400453571627562117187087946528638
78975992688009461907054923343270209801863375942767
24371257133130314096182231905326830748107283072765
79357052073301086100943349957890110413495698376699
79809585051069238495836921415740608164543954066824
99562064722886098991936782355876329174645482514801
32708239997257214492079790078943933380290526184766
85034822489242726521671506254805707905343565814369
22258707710719252958675574847668308287205537821814
64958019095523290513959769622505628569950874937824

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