ウェブアプリ

自作の量子乱数生成器を使った占いアプリ「A Quantum Magic 8-Ball」


研究者でエンジニアのデビッド・ノエル・ン氏が「光子がどちらの検出器に届くか」という量子測定の結果を利用して乱数を生成する装置を自作し、その乱数で占いの回答を選ぶウェブアプリ「A Quantum Magic 8-Ball」を作成しました。

Building the Beam Universe Splitter I: A Quantum Magic 8-Ball | David Noel Ng
https://dnhkng.github.io/posts/building-the-beam-universe-splitter/

A Quantum Magic 8-Ballは上記サイトの末尾に設置されています。入力欄に占ってほしいことを打ち込んで、「ASK」をクリック。


中央の巨大な球体の周囲に並ぶ5つの黒い球の中で、0と1が点滅します。


「Outlook Good.(見通しはいい)」というお告げが表示されました。ただし、この回答はAIで入力内容を精査しているわけではなく、もともと用意されている20種類の回答からランダムに1つを表示しているだけ。


Magic 8-Ballは、ビリヤードの8ボールに似たプラスチック球の玩具で、中に液体とさまざまなメッセージが書かれた正20面体のサイコロが入っています。占いたいことを問いかけてからボールをよく振り、球ののぞき窓を見るとサイコロが浮かび上がってメッセージを表示する仕組みです。1946年に発明されたMagic 8-Ballはアメリカでは歴史のある玩具で、映画『トイ・ストーリー』にも登場します。

Don't count on it! - YouTube


A Quantum Magic 8-Ballで回答を選ぶ乱数は、ン氏が自作した量子乱数生成器から取得されています。質問欄に入力した内容は量子乱数生成器へ送られず、「ASK」をクリックする操作をきっかけに、装置から処理済みの乱数を受け取る仕組みです。アプリ側の役目は、受け取った乱数に20種類の定型回答を対応させて表示することだけです。


回答の選択には0と1からなる5ビットの乱数を使います。5ビットで表せる数は0〜31の32通りですが、Magic 8-Ballの回答は20種類しかないため、0〜19を回答に割り当て、20〜31が出た場合は捨てて次の5ビットを読み込みます。この「棄却サンプリング」という処理により、20種類の回答がどれも同じ確率で選ばれるようになっています。

乱数を生み出す装置は、光子がどちらのPMTで検出されたかをコイントスの表裏に見立てる仕組みです。紫外線LEDと蛍光による光を弱めて、紫外線域で使える50:50のビームスプリッターに当てます。ビームスプリッターを透過した光はPMT A、反射した光はPMT Bという2台の光電子増倍管へ届き、PMT Aが反応すれば0、PMT Bが反応すれば1として記録されます。


光電子増倍管は、ごく弱い光を検出し、電気信号へ変換する部品です。ただし、この装置は単一光子を1個ずつ確実に発生させる光源を使っているわけではなく、LEDと蛍光による光を十分に弱めて利用しています。そのため、複数の光子が近い時間に到着する可能性があり、PMTの反応をそのまま0と1に置き換えただけでは、偏りや短時間の相関が残るおそれがあります。

2台のPMTは、もともとタンパク質の構造解析に使われていた装置から取り出された浜松ホトニクス製の部品です。元の装置には、波長によって光を2方向へ振り分けるダイクロイックミラーが搭載されていましたが、ン氏はこれを紫外線対応の50:50のハーフミラーへ交換しました。タンパク質の状態を調べるための光学系を、光子の進路をランダムに読み取る装置へ作り替えたというわけです。


A Quantum Magic 8-Ballの乱数生成器には「Universe Splitter」という名称がつけられています。ン氏によれば、これは量子測定の結果ごとに宇宙が分岐するという多世界解釈を意識した表現とのことで、もちろん実際に宇宙を分岐させる装置という意味ではありません。

各PMTが出力する電気信号は、ADCとFPGAを搭載するRed Pitayaというボードへ入力されます。FPGAは一定のしきい値を超えた電圧の立ち上がりを光子の検出と判断し、あらかじめ定めた短い時間内に片方のPMTだけが反応した場合にビットを記録します。2台がほぼ同時に反応したイベントは、複数の光子が同時に到着した可能性などを除外するため棄却します。さらに、一度受理した検出の直後は両方の入力を一定時間無視し、PMTの後続パルスや回路の信号の揺れが次の乱数に混ざることを防いでいます。

片方のPMTの感度が高かったり、ビームスプリッターの分岐比が厳密に半々でなかったりすると、生の0と1には偏りが生じます。ン氏は、ビットを2個ずつ扱って偏りを取り除くフォン・ノイマン法で捨てられる情報を、再帰的に利用するPeres法を使って偏りを抑えました。続いて、Peres法を通した1024ビットをToeplitz抽出器で896ビットに圧縮し、残る偏りや相関をさらに抑えています。この処理は乱数を秘密化するためではなく、物理装置由来の不完全さを考慮して、出力をより均等な乱数に近づけるためのものです。


生成した乱数列は、NIST Statistical Test Suiteを使って検証されています。より強く圧縮する保守的な設定では6億ビット、圧縮を緩めて出力を増やす設定では10億ビットを対象に統計テストを実施し、後者でも系統的な問題は見つからなかったとン氏は述べています。

ただし、こうしたテストに通過しても、乱数が量子由来であることや、暗号用途での安全性を完全に証明するものではありません。最終設定での出力速度は毎秒約2.28kbitで、占いの回答を1つ選ぶには十分な速度です。

FPGAから出力された乱数は、Red Pitaya上で動作する「qrngd」というソフトウェアが読み出し、TCPポート5000経由で外部へ提供します。乱数を蓄えるバッファは古い順ではなく新しい値から取り出す設計で、長時間前に生成されたデータより、直近の乱数をインタラクティブな用途へ優先して渡せるようになっています。公開サーバーのREST APIは、この乱数をウェブアプリへ届け、回答の選択に使います。


なお、ン氏は「正20面体のサイコロに用意した20種類の回答では複雑な質問に対応できない」として、将来的に自然言語で結果を伝える仕組みを扱うつもりだと述べています。

この記事のタイトルとURLをコピーする

・関連記事
コンピューターはどうやって乱数を生み出しているのか? - GIGAZINE

「真の乱数」を生成するためにCloudflareが波マシンを設置 - GIGAZINE

Cloudflareは乱数生成のリスクヘッジとしてオフィスにラバライトや二重振り子を置いている - GIGAZINE

放射性物質を用いて量子乱数を生成してしまう猛者が現れる - GIGAZINE

in 動画,   ハードウェア,   ソフトウェア,   レビュー,   ウェブアプリ, Posted by log1i_yk

You can read the machine translated English article A fortune-telling app called 'A Quantum ….