Linux でオンラインカジノの核になっている乱数ジェネレーターを考える。

今回は乱数ジェネレーターを取り扱ってみます。

乱数ジェネレーターは乱数を発生させるアルゴリズムです。これ自体は目新しい技術では全くありません。乱数を発生させるだけのコードであれば、C++でも、Pythonでも、

Ramdom

的な乱数を発生させるためのコードが用意されており、誰でも1度はチュートリアルで触れたことがあるのではないでしょうか。

 

この乱数ジェネレーターはオペレーションシステムのセキュリティーに非常に重要な役割を果たしていると言う事は、セキュリティー関係者の間では常識でしょう。私たちが普段使っているIDがパスワードといった認証技術に深く関わっています。

 

Linuxでは、仮想デバイスのためのエントロピーを用意するコードである

virtio-rng

が用意されています

このコードは、/dev/hwrng に chardev を作成してそれを開き、乱数を送ります。

実装は次のようになります。

code

次に乱数ジェネレーターによって生成される結果について考えていきましょう。
乱数ジェネレーターのアルゴリズムによって生成される結果が本当にランダムである事は実は保証されていません。例えば1から10をランダムに発生させた場合、ある一定の数字に変化が生じることがあり得ます。

この現象は偏差と呼ばれ、実際にカジノように偶然性に支配される業界においても発生しています。これを是正して正規分布を行う方法はいくつかあります。ここではPythonのライブラリであるNumpyを使って乱数を発生させるサンプルを見てみましょう

 

import numpy as np

3つの数字がランダムに発生します
次に正規分布に従う乱数を発生させてみましょう。

random normal

normalオプションは正規分布を表します。そのカッコ内の手順左から平均、偏差、出力したい件数になります。

このように正規分布と、指定の偏差を設けることにより、結果のランダム性が担保されることになります。

さらに発生する乱数をあらかじめ固定することも可能です。コードを見てみましょう

random.speed

このseedと言うのはシードと読み、文字通り乱数発生するための種にする値を設定します。ここでは種を32にして設定して実行しています。

このように見ていくと、乱数の生成と言うのは非常に恣意的な形で操作することが可能であることがわかります。特に偏差を設定したり、種を固定することで、生成する側の人間の希望する数値が出やすくなることになります。

オンラインカジノやパチンコのように偶然性をベースにした社交的な娯楽は、日々乱数の生成の設定を行っています。何故かと言うと、標準偏差や、これまでに出てきた数字を全て分析していれば、次に出てくる数字というのがある程度予測できてしまうからです。つまり乱数の結果が必ずしも優秀なビデオ乱数ではなくなってきます。この事態を防ぐために毎日設定をリセットして新しい乱数を生成しているのです。

また娯楽性を高めるための設定も日々行われています。ときにはジャックポットが出やすくすることもあるし、逆に努力することもあるでしょう。しかしこれを許せばカジノが一方的に搾取することも可能になってしまいます。そこでオンラインカジノのような会社には、第三者機関がこの乱数発生装置の公平性について監査する仕組みができあがっています。

オンラインカジノで使用している乱数発生装置は消してここにあるようなシンプルなものではありません。またその公平性を担保する第三者の監査も入っており、さらにそのセキュリティーは万全なものになっています。処理ややりとりの全てがSSLで暗号化されるため、金銭的なやりとりの安全性も十分に担保されています。そのことから銀行決済やカード決済が多数用意されている事でもわかります。つまりちょっとした金融機関並みのセキュリティーを備えているオンラインカジノなのです。オンラインカジノの最先端のセキュリティーや、高い技術についての詳細はこちらのまとめ記事へどうぞ

Related Post

HitoFudeAIRダウンロードHitoFudeAIRダウンロード

[airbadge] HitoFudeAIR, https://www.riaxdnp.jp/wp-content/uploads/2009/01/hitofudeair1.air, 1.07,https://www.riaxdnp.jp/wp-content/uploads/2009/01/hitofude_download.png[/airbadge] HitoFudeAIRダウンロード HitoFudeAIRは、リレー形式で一筆書きを描いて共有するアプリです。 前の人が描き終わった点から、自分の一筆書きを描きます。 一筆書きで”しりとり”をしたり、みんなで協力して大きな一筆書きを描くこともできます。

RIAxDNPチームのUIデザイン10のポイントRIAxDNPチームのUIデザイン10のポイント

たまには方法論的なトピックです。これまで多くの得意先の受注案件や自社サービスのRIA案件のユーザーインターフェース開発を担当させて頂きましたが、RIAxDNPチームがUIデザインを行う上で、気を付けている/気を付けたいポイントを10コまとめてみました。 (01)実現したい目標、目的の「その先」を把握する(02)最初は手書きのスケッチから始める(03)UIデザインパターンを利用する(04)一度ルールを決めたら一貫性を保つ(05)全てのことに意味を考える(06)技術的な裏付けをもつ(07)最終的な判断は発注者に委ねる(08)UI設計上の議論の中で「UI系ワード」を使わない(09)シンプル&スモールからフィードバックを得て改善する(10)ある程度の妥協を許容する UI設計の参考書やUIコンサル系のWebサイトに書いてあるようなことではなくて、ノウハウというより自分たちへの心構えという意味合いが強い感じです。 (01)実現したい目標、目的の「その先」を把握する 開発するシステムによって「データ入力効率が10%向上した」、「コンバージョンが20%上がった」といった「目標・効果」のKPIは開発案件で設定されることがあるかと思います。それも大事なのですが、もう一歩踏み込んで「効率化した時間を何に活かすのか?」「ユーザーがそのサービスをもう一度使いたいと思うには?」といった内容をステークホルダーで議論すると、UIにもうひと工夫できるし、「価値」が生まれるかなと思っています。ちなみに案件によってはペルソナも用意しますが、マーケティングリサーチのためのペルソナでなく、ユーザーターゲットのためのペルソナとして妥当な範囲に留める様にしています。 (02)最初は手書きのスケッチから始める いきなりPowerPointやPhotoshopを使ってUI検討のためのワイヤーフレームを作るのではなく、まずは紙とペンでフリーハンドでプランニングするようにしています。最初からアプリケーションを使うと、「見栄え良くする」「綺麗にそろえる」とかに時間を費やし、なんだかドキュメント化することが目的になるからです。そうなると、バリエーションを考えることが疎かになったり、修正が億劫になったりという自体になったりします。手書きのスケッチからすぐモックアップ、それがマスターになれば画面設計書さえ不要なこともあります(現実的には仕様書で発注者に確認…というケースが多いですが)。 (03)UIデザインパターンを利用する

秀英体100展に写心機 ver.2を出展します秀英体100展に写心機 ver.2を出展します

お正月明けのギンザ・グラフィック・ギャラリーで開催される企画展「秀英体100」にて、ふたたび「株式会社ワンパク」とともにデジタルインスタレーション、「写心機」のver.2を出展致します。 2011/1/21 追記:ビデオを載せました! 2009年11月に行われた、Make:Tokyo Meeting 04で好評を得たver.1「写心機 Prototype」から2年、全く異なる構成で、新たに今回の企画展「秀英体100」にて「写心機 {Font}