メモ

コインやダイスとカップを使って暗号的に安全な乱数を作れる


乱数をなんとか手動で作りたいというとき、頭で思い浮かべるだけでは偏りが発生したり、何らかの法則が入ってしまって予測される数になってしまったりする恐れがあります。しかし、コインとカップ、メモするペンさえあれば、暗号化グレードの乱数を作れる、巧妙な数学的トリックがあることがわかっています。なんだか難しそうですが、慣れれば子どもでもカンタンに乱数を作ることができます。

Generating Cryptographically Secure Random Numbers With Coins and A Cup | by David Vorick | Dec, 2020 | Sia Blog
https://blog.sia.tech/generating-cryptographically-secure-random-numbers-with-coins-and-a-cup-4e223899509e


この方法は、開発者向けの分散型CDN、およびファイル共有プラットフォームである「Skynet」のデビッド・ボリック氏が紹介しているものです。

ランダムに「0」か「1」かを決める方法としては、たとえばコイントスを行い、表なら「0」、裏なら「1」とする方法が考えられますが、この方法では表裏に偏りが出るため、「フォン・ノイマントリック」と呼ばれるテクニックが存在します。


フォン・ノイマントリックは、コインを2回投げて「表・表」「裏・裏」のときは数えず、「表・裏」のときを「表」、「裏・表」のときを「裏」として扱うというもの。ただ、このトリックは数学的には問題がないのですが、現実世界では「どんなコインか」「誰がコイントスを行うか」といった要素が入ってくるため、安全な乱数生成には使えません。

そこでボリック氏が唱えるのが、5枚のコインと大きなカップを使った生成方法です。やり方はカンタンで、カップにコインを入れてしっかり混ざるように振るだけ。振ったのち、コインの表裏の状態を確認し、表の枚数が偶数なら「0」、表の枚数が奇数なら「1」を記録します。暗号的に安全な乱数は少なくとも128ビットなので、これを128回繰り返せばOKだとのこと。なお、コインはすべて異なる形、大きさにすればなおよいそうです。


コイントスは、やっているうちに空中での回転回数をコントロールできるようになってしまいますが、この方法であればコインはカップの中でランダムに跳ねるので、コントロールできないというところが強み。また、カップを振る回数を多めに設定してしっかりカウントすることで、試行ごとにじわじわカップを振る回数が減ることを防げます。

なお、コインは表と裏しかないので180度ひっくり返さないと異なる面になりませんが、ダイスなら90度転がれば別の面が出るので、ダイスを使う方法のほうがオススメだとのこと。ダイスを使う場合、5つのダイスの出目の合計が偶数なら「0」、奇数なら「1」とします。

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

・関連記事
世界の硬貨(コイン)の図柄にはその国らしい特徴があって見惚れてしまう - GIGAZINE

世界最強かもしれない日本の500円玉を世界中の通貨と比較してみた - GIGAZINE

QRコード・クトゥルフ神話・24世紀などユニークすぎるデザインてんこ盛りのサイコロ「Dice Empire」レビュー - GIGAZINE

in メモ, Posted by logc_nt

You can read the machine translated English article here.