今回は乱数ジェネレーターを取り扱ってみます。
乱数ジェネレーターは乱数を発生させるアルゴリズムです。これ自体は目新しい技術では全くありません。乱数を発生させるだけのコードであれば、C++でも、Pythonでも、
的な乱数を発生させるためのコードが用意されており、誰でも1度はチュートリアルで触れたことがあるのではないでしょうか。
この乱数ジェネレーターはオペレーションシステムのセキュリティーに非常に重要な役割を果たしていると言う事は、セキュリティー関係者の間では常識でしょう。私たちが普段使っているIDがパスワードといった認証技術に深く関わっています。
Linuxでは、仮想デバイスのためのエントロピーを用意するコードである
virtio-rng
が用意されています
このコードは、/dev/hwrng に chardev を作成してそれを開き、乱数を送ります。
実装は次のようになります。
次に乱数ジェネレーターによって生成される結果について考えていきましょう。
乱数ジェネレーターのアルゴリズムによって生成される結果が本当にランダムである事は実は保証されていません。例えば1から10をランダムに発生させた場合、ある一定の数字に変化が生じることがあり得ます。
この現象は偏差と呼ばれ、実際にカジノように偶然性に支配される業界においても発生しています。これを是正して正規分布を行う方法はいくつかあります。ここではPythonのライブラリであるNumpyを使って乱数を発生させるサンプルを見てみましょう
3つの数字がランダムに発生します
次に正規分布に従う乱数を発生させてみましょう。
normalオプションは正規分布を表します。そのカッコ内の手順左から平均、偏差、出力したい件数になります。
このように正規分布と、指定の偏差を設けることにより、結果のランダム性が担保されることになります。
さらに発生する乱数をあらかじめ固定することも可能です。コードを見てみましょう
このseedと言うのはシードと読み、文字通り乱数発生するための種にする値を設定します。ここでは種を32にして設定して実行しています。
このように見ていくと、乱数の生成と言うのは非常に恣意的な形で操作することが可能であることがわかります。特に偏差を設定したり、種を固定することで、生成する側の人間の希望する数値が出やすくなることになります。
オンラインカジノやパチンコのように偶然性をベースにした社交的な娯楽は、日々乱数の生成の設定を行っています。何故かと言うと、標準偏差や、これまでに出てきた数字を全て分析していれば、次に出てくる数字というのがある程度予測できてしまうからです。つまり乱数の結果が必ずしも優秀なビデオ乱数ではなくなってきます。この事態を防ぐために毎日設定をリセットして新しい乱数を生成しているのです。
また娯楽性を高めるための設定も日々行われています。ときにはジャックポットが出やすくすることもあるし、逆に努力することもあるでしょう。しかしこれを許せばカジノが一方的に搾取することも可能になってしまいます。そこでオンラインカジノのような会社には、第三者機関がこの乱数発生装置の公平性について監査する仕組みができあがっています。オンラインカジノで特におすすめするのはベラジョンカジノです。
オンラインカジノで使用している乱数発生装置は消してここにあるようなシンプルなものではありません。またその公平性を担保する第三者の監査も入っており、さらにそのセキュリティーは万全なものになっています。処理ややりとりの全てがSSLで暗号化されるため、金銭的なやりとりの安全性も十分に担保されています。そのことから銀行決済やカード決済が多数用意されている事でもわかります。つまりちょっとした金融機関並みのセキュリティーを備えているオンラインカジノなのです。オンラインカジノの最先端のセキュリティーや、高い技術についての詳細はこちらのまとめ記事へどうぞ