Quantum Roulette · IBM Quantum
いちばん大事なところなので、実際に触って確かめてください。
コンピュータが出す「ランダムな数」は、種(シード)から計算された数列です。 掛けて、足して、あまりを取る。それだけです。 だから同じ種を入れれば、何度でも同じ「ランダム」が出てきます。
—
種を変えずにもう一度押してみてください。
これが疑似乱数です。見た目はバラバラですが、
種を知っている人には、次に何が出るか全部わかっています。
実際のプログラムが使う Math.random() やメルセンヌ・ツイスタも、
桁数と混ぜ方が複雑なだけで、やっていることは同じです。
暗号用の乱数(crypto.getRandomValues)はもう少しマシで、
マウスの動きや電気的な雑音といった外の世界のゆらぎを種に混ぜます。
それでも「種を集めて、決定的な計算にかける」という形は変わりません。
種が漏れれば、出力は全部わかります。
ここが量子との差です。 量子の測定結果は、測定より前のどんな変数からも決まっていません。 種にあたるものが存在しない。これは「まだ見つかっていない」ではなく、 ベルの定理という数学の定理で、実験でも確かめられています (この検証で2022年のノーベル物理学賞が出ました)。 だから量子ルーレットは、「回す前は誰にも分からなかった」を言えます。
いちばん疑うべきは、サーバが結果を選んでいないかです。 あなたが回した瞬間にビットを作るなら、サーバは選択肢を全部見たうえで、 好きな番号が出るビットを選べてしまいます。
そこで順番を逆にしました。あなたが回すより前に、サーバはビットを固定して、 そのハッシュだけを渡します。この時点でサーバは、あなたの選択肢が何個あるかも知りません。 選択肢の数を知らずにビットを決めているので、 「特定の選択肢に当てる」ことが原理的にできません。
回したあとにビットと塩が開示され、 ハッシュが合うかどうかを、あなたのブラウザの中で計算して確かめます(上の 04)。 合っていれば、後から差し替えられていないことになります。
正直に書きます。結果は、回り始める前にもう決まっています。 先にビットを開示して当たりを出し、 そこで止まるようにアニメーションを逆算しています。 くるくる回る絵が結果を作っているわけではありません。
ブラウザの中で「物理的に」ルーレットを回しても、
それは Math.random() が決めているだけで、量子とは何の関係もなくなります。
止まる場所を先に量子で決めるほうが、看板に嘘がありません。
回す前の「重なって光っている」表示も、比喩です。 本物の重ね合わせは IBM の実機の中で起きていて、この画面はその結果を受け取って描いているだけ。 ブラウザの中に重ね合わせがあるわけではありません。
32ビットの値をそのまま選択肢の数で割ると、小さい番号がわずかに出やすくなります (2の32乗は、たいていの数で割り切れないため)。 割り切れる範囲からはみ出した値は捨てて、引き直しています。 引き直したときは、その旨と引き直したビットも画面に出します。
「封をする意味」がいちばん早く分かるのは、封が無いとどうなるかを見ることです。 イカサマルーレットでは、当たりを先に選べます。 そして「使ったビット」も「割った余り」も、ちゃんと計算が合います。 当たりを決めたあとに、それに合う数を逆算しているだけだからです。
回している最中は、どちらがイカサマか絶対に見分けられません。 違いが出るのは、封を確かめたときだけ。 → イカサマルーレットを試す
全部書きます。ここを隠すと、透明性を売りにする意味がなくなるので。
ビットが本当に IBM の実機から来たのかは、あなたには確かめられません。 私が「実機だ」と表示しているだけです。 実機のジョブを投げているコードは公開していますが、 それが本当に動いているかは、私を信じるしかありません。
封の仕組みが守るのは「回したあとの差し替え」だけです。 封をする時点で、私はビットの中身を知っています。 選択肢の数を知らないので狙い撃ちはできませんが、そこが限界です。
もっと強い保証が要るなら、量子乱数ビーコンを見てください。 毎日きまった時刻にビットを公開し、翌日ぶんのハッシュを前日に出しています。 明日の乱数が今日の時点でもう動かせないことを、誰でも確かめられます。
ルーレットは記録を残しません。何度でも回せるし、回した証拠も出ません。 プレゼント企画のように「ちゃんと引いた」と示す必要がある場面には向きません。 そのときは量子抽選を使ってください。 参加者リストのハッシュと使ったビットが証書として残り、誰でも検算できます。
実機との接続部分も含めて GitHub に置いてあります。 toriumib/quantum-roulette(MIT)。 自分のところで動かす手順も書いてあります。
量子抽選(証書つき)、 量子乱数ビーコン(毎日きまった時刻にビットを公開。開発者向け)、 量子禅問答、 量子旅程ソルバー。