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

2024-10-12T06:39:29.672219+00:00
0273dd01bdfbd26682700154b8c9b83eb60d60985b3a861580018866dd6305c0
4afd092f6ccef9bfead554abd8fb49bf1fb08fa23b3c4948b1d9f92425f419f9
62ae88f55ec7a8e2fd9ac3ff5fc541b02da43faf59e738812372c4c553fc7b01
74bfbd6effa52e3690c30fcc75444964d2fb727bcc5eab1f941d91ef431d120f
22f58abef22535d54f5a0661ad9040f8719bab83ece007589274c71e3c7f209b
95b695addb91cb2fbc98c0c1af24622bf14764561ac4b99588751920b8869497
34034a15117ad2ab3be13f2700816a160c9b455ec55ba87eb00210a9a55dd8ee
3498aba89408928339f743177579ca052f3d30e4d8de4bc4a6c6e119b383eec4
374ecc3900c3831e5922b1ee131a95e8cc8d6ad36c55a99f650a6e0e629d7140
9c0a782f047b46bd83684503e9ae4afad89f84e2b96e9b6767dfdfcd948a7cc3
b0eb3eec69417bb1d3eba0ca326c93272575b4bdf40e50ba5bf20a3e21c49173
db0a8d6097d92e46255a0d2c23d6e4358a655c26ee85a7652fd49bab395d1740
378158e0df3d8b7aff5f8dbf55b04c9f872967ac911b88ead59402d76ecfac74
59845110a56dbe455bac93c09e7951baa892b9fa7245d9e32d4dea96909f2e65
b361481b6f6790ec2c9e91f8c8cfc157cf1c366acd7513d962dd6f19c8da9ef2
d5c5b2eb243e47ee8f2816afc9a17fe079e94000018e2d915092a79f5b6b5892
b3d3de48678c8e6905f7a8ba27b992dab9590c6dc35c0c680ef21444437c07c7
4b9a73bcc4587e830288bf8289981ce6df5e0ab0acb373d06f167fba4e6bb30b
e572c64e5fcf09a9ef340203bf3420d4f809527cf7ada943f9535823760e5bed
33b0460b575b556f734248bd8ef882ccea212b0049f0608f4be183ed2c03c506
15353eff9aa1df2435080a1db1daa2ff2f6b99de370880a2bec5c30714ffd7d8
b23e568a640c90d2c036c09007af2884b33094d7a3b67ab1bf6ecec6c47ee521
eb5834ef4b7d2d2014565abde2b477d648508550162772788c3bceeac48fd25d
4ee60ae4c0b00ebd22ba9aa28bf69e7f1b00e926e1ecb44ec009a7dbc2c7d217
a17e0aeab93ccd0755591f3a2906727da6f7cb3236c39f06ad743196743d485d
a25cb292080b7508866516ebbd72679b728d72cc3051f0af69c5dea764bb2494
d09d21a7c777b0c92766dbb5528b8d9c3ce92f62c05db92fbf88a81a7f53c8c6
6f29951e5562a597791d0023c9e688704ce274cdda4857229b99309f44444e3c
704e46c985d869a5a97b00d626a4ea2efd69aadf212fa18273340677b98f8374
dd9a0e367f9f448a3403354205d5ec1f798941cb14b31068289d9a5e5e4a47f3
b341a1aaf3dabd72a4ac7b8d6d1785dbb5caca65fbc1f352e00343de71b27024
2d1a160c2f52fdd563e049dedbcd8540cd10ac06330d2a9aeb1c777b3ba9a88b

From the PIN diode (hex format):

2024-10-12T06:27:16.065172+00:00
d6ee1293a46cd1d95715ae33687de4b8ccedd5e6042fa3fffcf85b3c1f5804ea
32c24e113649b05eb16c9c818b9da7ceff25a1daebc938088a89814b6fd7b581
beb4a4b36eb55c2b6490113ca2d1846f9c2cdc21279081aba7bb8290579d171b
0a164722c67ba0df4d52e60f3e682b7d2ba89f08b9ec2a2439a6b5fe8fbc591e
fedd477520a866fd87f8468e5b91f61ad57b72faaf99f4868bfa65ac4103ed98
87328e51f0e163fc09731bc2b0df3619b985f5ef3c5b786d83fc88eb10db2e02
8710448b5a051b620a4dc7007c8c44ea51205e8630914a21e3d97df5753d7199
a60294c57e7083a2de30b03bcbe1912285809820490e6cf548f94fdc9075c3e6
c2c53b2a0f89dd0893079f8dd37d46cac1165c2c35f87aad823e7ba28af6735e
e609dd90ac419549bf044f3c3ccb2a6e22cd4c9b3426c2e197bab341291adb64
20a621fd1d5965a56d0e37ef20eb17d60ed9dea97974c98ccd15fb8cc8d5e916
eb9adb2c4cfbc113c884b0b06959b225135a8a255f3963cb51b72bce7ccbd317
f8a8d33bca5e881238d4834a954e92abfac1ab8849f2dacbe579a0d380ab55c4
64b6d916830dcbd1559a356f5d41c21a9737f0e328f8cb91b30a1133aa181329
627a80bd25d0cb86425736698703d92e89b6acbc33789c6c609281b0df81ca70
e924bcf313f41a5b281201c4a6cc7cfdb9438581607adedc3e47bcac38fa162a
7f90e710785e288517ee512b1fed66df1f732f382df878fc2b31e8bea5e33c8a
4f28789db2d49e5d120cd9b6ab1b35a6095069df93ea766c1b149f8d63554ee3
8d5cda0f4313fade5e6174245677ed3b30b3ef21186109b5af383c99ad9e8321
4f49d0748d1e0c1549aa8f7a246b1f4b41c424e9bc80ee451edd2ac24300b19a
70ca8a86f558da4684ed82d79693480ac600afaa84d86b21348f90c32eee9320
a78cbc9467d3ebfe637bdd487f0d0cf431633247950d750bed1027d156387e66
37d049b4b5f9ead82e79d047842fe3149b84067cd6b0c59d345f503d81634bcf
77955c4cfd3875846f8abb11b9ed365a69a01877a76c765864b828ecd598bc5b
054e829c35830645fc02838358b88d08157beb4d8c71ab3c0ce4184d93212f79
babe41fd8848589044f1e93f9cec2f942f9ce579efecd97fb15885ef46d36d76
6e0a6b46922549166aa1498950a33a6d2daa469a091c62249e55a2cd3b6f7069
a3b8d22914e7ebb7e10308fad4fa68c10735e29e4384bc9959f92c234a5b491d
76482a019a5b0b1a11162292fc56692a75c3cb006ac3c7c377e1823c30724289
a4d02220a6ff3e53f5f81627cfbd78afdda409b88235de9dba6020638e196403
99802f1cbd75e533b081c463e0ad571f0164cfe20d7e675dbdcdf5699d47dfda
799339a0da18e2fdd9229b61e49d36c9eff6b9c64a3b7228dbbf2510a0d93216

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

2024-10-12T06:39:29.672219+00:00
02150189023012018484846282139652915834212801360299
05927409470891847173913176436259607372773637259874
36949968549595976576456463758956293514969783230116
91891065465444951517687300142394713148294567291815
34389037537990069773446413557131078846169930602732
55498249734547885292937536984371008626968549361725
32843448515203742117227159633900290622125569949791
68267602166965935252716848084631576723172105476148
75966698257931965578570095313089347719264941060885
69590110101498571364561020470423708931046903747459
32851055030348382495766205652377605008473937178089
14808691106233964515104196514670379013443553380192
38336701475571579323645529886139229541918576765935
41037245273648021072168932811665099069917247925821
81866846851469457750445946017997722711034444584593
87285406171998112558977836627143402275612721640001
42454580466759910788467972034042050568863985468589
12099592120414206867240799755415889688263102369130
37522894107672791511222786780779111498789509695202
03915232098224736967838835181491517670118791851115
66728942303343007396437531440397062153625461365308
10297762470753550828629097950720786286380012449254
92440775403279484863822277911098962633885275254532
20869089801972803380223914204059964393781092761489
34865462395827270038807892096794992361261085600785
89315841061425665054955906731649501661729362927846
08111708340122891403551441144881750597670087364857
33679919763902818239415660479892938547913668262783
98114149308598655121290035361276167287345553485968
68786012787033056569230038644605703347613015520619

From the PIN diode (digits):

2024-10-12T06:27:16.065172+00:00
18476408872174510425840447639160318804509478175473
76947708562939576737615608383729751181299080647910
81924300441760623211564433394429716787304487572327
10227134982360778215620443254368590885423657668143
88893071173268023570429145262314755334390172650352
35504281990915279476542585336091200931361646023516
68399005279810779900244068813294344845743325176113
53660248972612316248765945343328523273140872794417
95949759421537084707594125709322924453227330622362
38159409447265497391047960604210347655523894518679
65412600326633298901650914553223146921164021402254
44769319327676058978371990383795579981834324236859
94361856317449784671937136732160287185960082223113
85545311936594265155404579101751702419419822288937
34668754053503463782728851205608964629762912368819
26914018019666248567332996226271887256224227441620
94403323814331023115475645204349906560387940205778
58931812827127536609800547180827205941998578419215
67199497163686195948793324970981755660537358313379
73164130122173704322360731756596368828693042946700
77541238348870323050477210980075703207335243449546
47326740884803992372271312499950714913171116398656
26025573808146217132472055320624769757529580612999
75194992765617321138871785549005602419670818880084
40528891057830565331066902313188844108212377401371
60122477473347218690653672884468635647484756212777
88337009181010077046377322066173378063580945707054
09289836588562591112056384412083030804930753586732
88538944357491732918724201549111261722344686054217
95000695999519306048146637643432666283223989207564

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 2024