データの暗号化やプログラミングでも使用される乱数は、定量的なアルゴリズムを用いて生成する擬似乱数や、CPUや通信機器のノイズを用いて生成する物理乱数がありますが、いくつかの乱数の中でも最も信頼性が高いとされる量子乱数を、放射性物質を用いて生成してしまう猛者がGitHub上に現れ、乱数作成機器の仕様とソースコードを公開しています。

GitHub - nategri/chernobyl_dice: A quantum random number generator with a Cold War aesthetic.

https://github.com/nategri/chernobyl_dice

「Chernobyl Dice(チェルノブイリのサイコロ)」は、エントロピー源として弱放射性物質の核分裂反応を利用した量子乱数生成器です。Chernobyl Diceは基板となるArduino Nano、放射線測定器のガイガー・カウンター、ウランガラス6つ、ニキシー管で構成されており、下記のようなプログラムで動作します。

1.ガイガー・カウンターが反応したかどうかによって、1ミリ秒ごとに0か1がリングバッファに記録される。

2.フォン・ノイマンの安定性解析を用いて、生成された初期の乱数のバイアスを除去する。

3.2ステップ目で生成したビット群を、デバイスの電源を入れてから経過したマイクロ秒単位の時間を4で割った値のmod2でXORすることで、さらにバイアスを除去する。

Chernobyl Diceが動作している様子が以下のムービー。

回しを「CL」に合わせると現在時刻を表示するクロックモードになります。乱数の生成を繰り返しUSBから出力するストリーミングモード、ボタンを1回押すと1つの乱数が表示されるダイスモードの3つのモードがあります。



回しを「DC」に合わせると、ボタンを一回押すたびに一つの乱数が表示されるダイスモードになります。



ノブをあげた数字の合計と生成される乱数の範囲が対応しています。4と8のノブをあげた場合は0から12の範囲で乱数が生成されます。



ボタンを押すと……



ニキシー管に二進数が表示され、乱数の生成が始まります。



今回は「2」が生成されました。



回しを「ST」に合わせると、乱数の生成を繰り返しUSBから出力するストリーミングモードを使用できます。



Pythonに備わっている統計テストを実施してみると、すべてのテストをクリアできたとのこと。Chernobyl Diceが非常に偏りのない乱数生成器であることを示しています。



Chernobyl Diceを作成するためのパーツリストも公開されています。



実際にChernobyl Diceを組み立てている様子はこんな感じ。エンクロージャーにスペーサーを取り付けます。



ロジックボードを組み付け。



ニキシー管をロジックボードと接続して……



エンクロージャーに組み付けます。



ガイガー・カウンターをエンクロージャに組み付けます。



続いてウラングラスマーブルを取り付けます。



コントロールパネルボードを接続したらあとはボタン類を取り付けていけば完成。



なお、Chernobyl Diceの動作中にウラングラスマーブルが紫外線によって緑色に光りますが、これは放射性物質とは何も関係がなく、かっこいいから光らせているそうです。