乱数生成
[Wikipedia|▼Menu]
サイコロは機械的乱数発生器の一例である。通常、サイコロを振ると、1から6までの乱数が得られる。

乱数生成(らんすうせいせい、Random number generation)とは、多くの場合、乱数発生器(RNG:random number generator)を用いて、先験的に予測できないような数値や記号を生成する過程のことである。これは、特定の結果には、後知恵では検出可能だが先見性では予測不可能なパターンが含まれることを意味する。真の乱数発生器は、ハードウェア乱数生成器(HRNG:hardware random number generator)であり、各生成は、モデル化が実質的に不可能な方法で絶えず変化する物理的環境の属性の現在値の関数である。

ランダム化などの様々な応用により、ランダムデータを生成する様々な方法が開発されてきた。サイコロを転がす、コインをはじく、トランプをシャッフルする、易経鋸草の茎を使うなど、よく知られた例だけでなく、数え切れないほどの技法が古くから存在している。しかし、これらの技法は人力であり統計学で重要な十分な乱数を大量に発生させるには、多くの労力と時間が必要だった。そのため、結果が乱数表として集められ、配布されることもあった。

一方の、擬似乱数の生成手法もいくつも提案されている。それらが生成した結果がどの程度予測不可能であるか(=パターンがどの程度識別可能であるか)を測定することを目的とした乱数性の統計的検定も多数提案されているが、程度に差はあるものの、これを達成すれば「真の乱数といえる」というような唯一の指標といったようなものは無い(不可能である)。そのため、暗号などの用途によっては擬似ではない乱数が必要である。暗号でも用途によっては決定的な暗号論的擬似乱数生成器(CSPRNGS:cryptographically secure pseudorandom number generators)でもよく、それらは暗号技術で使用するために特別に設計され、必要な能力を持っている。
用途と使用法

乱数生成器は、ギャンブル、統計的サンプリングコンピュータシミュレーション暗号化、完全ランダム化設計等の予測不可能な結果を生成することが望ましい他の分野での使用が多い。一般的に、セキュリティのような予測不可能性を最重要機能とする用途では、必要な場合には、ハードウェア生成器が、一般的に擬似乱数よりも使用される。

擬似乱数は、モンテカルロ法によるシミュレーションを開発する際に非常に有用である。同じ種(シード。しばしばランダムシードと呼ばれる)から始めることで、同じ乱数列を再度実行することができ、デバッグが容易になるためである。暗号では、シードを秘密にし、また暗号的な強度のある乱数列生成器を使用する。送信者と受信者が同じシードを「鍵」として使用する(ストリーム暗号)。

擬似乱数の生成は、コンピュータ・プログラミングにおいて重要かつ一般的な作業である。暗号技術や他の数値アルゴリズムでは非常に高度な見かけ上のランダム性が要求されるが、多くの演算では、ある程度の予測不可能性があればよい。簡単な例としては、ユーザーに「今日のランダムな言葉」を提示したり、コンピューターゲームでコンピューター制御の敵がどちらに動くかを決定したりすることがある。アルゴリズムの視点からは、ハッシュ関数には用途により弱いあるいは強いランダム性が必要であり[1]乱択アルゴリズムではランダムさの品質が結果に影響することがある。

一見するとランダム化に適しているように見えるアプリでも、実際にはそれほど完全な乱数ではない。例えば、BGMシステムのために音楽トラックを「ランダムに」選択するシステムなどが例である。
「真の」乱数と「疑似」乱数の比較

乱数生成、すなわち乱数列の生成には主に2つの方法がある。1つ目の方法は、ランダムであることが予想される物理現象を測定し、測定過程で起こりうる偏りを補正する方法である。例えば、大気による電気回路の乱れ、熱による電気回路の乱れ、その他外部からの電磁現象や量子現象の測定が挙げられる。例えば、短い時間スケールで測定される宇宙背景放射や放射性崩壊は、自然エントロピーの発生源となる。

自然発生源からエントロピーが得られる速度は、測定される根本的な物理現象に依存する。したがって、自然に発生する「真の」エントロピーの発生源は、妨害していると言われるつまり、需要を満たすのに十分なエントロピーが採取されるまで、速度が制限されることになる。ほとんどのLinuxディストリビューションを含むいくつかのUnix系システムでは、擬似デバイスファイル/dev/randomは、環境から十分なエントロピーが採取されるまでブロックする[2]。このブロック動作のため、ハードディスクドライブをランダムビットで満たすような/dev/randomからの大規模な一括読み込みは、このタイプのエントロピーソースを使用するシステムでは、よく遅くなることがあるが決して不具合ではない。

2つ目の方法は、一見ランダムな結果の長いシーケンスを生成できる計算アルゴリズムを使用するもので、その乱数列は擬似乱数列と呼ばれる。擬似乱数列は、シード値またはキーとして知られる短い初期値によって完全に決定される。その結果、シード値がわかっていれば、一見ランダムに見えるシーケンス全体を再現することができる。この種の乱数発生器を、擬似乱数発生器と呼ぶ。このタイプのジェネレーターは非妨害性であるため、外部イベントによってレートが制限されることがなく、大規模な一括読み取りが可能である。

乱数システムによっては、利用可能な場合は自然値から採取したランダム性を利用し、定期的に再シード化されるソフトウェアベースの擬似乱数ジェネレータにをバックアップに利用するハイブリッドアプローチを採用している。フォールバックが発生するのは、希望するランダム性の読み取り速度が、自然なハーベスティング・アプローチの能力を上回った場合である。このアプローチでは、より低速で純粋な手法に基づく乱数生成器のレート制限によるブロッキング動作を回避することが可能である。

決定論のみに基づく疑似乱数生成器は、純粋な意味での「真の」乱数発生源と見なすことはできないが、要求の厳しいセキュリティアプリでも一般的に十分な場合もある[3]。そういった場合に必要とされる乱数生成器は暗号論的擬似乱数生成器と呼ばれ、Yarrow algorithmやfortunaのように、セキュリティ・クリティカルな暗号目的でも利用可能だと認証されている。それらは「FreeBSD」「AIX」「OSX」「NetBSD」などの /dev/randomが提供するエントロピーの基礎となっている。OpenBSDでは、「arc4random」として知られる擬似乱数アルゴリズムを使用している[4]
生成方法
物理的な方法「ハードウェア乱数生成器」も参照

サイコロ、コイントス、ルーレットなど、乱数を発生させる最も初期の方法は、統計学や暗号学のほとんどの用途には時間がかかりすぎる傾向があるが、その結果が出るまでの間での興奮や期待はときに、楽しさに変化する。


次ページ
記事の検索
おまかせリスト
▼オプションを表示
ブックマーク登録
mixiチェック!
Twitterに投稿
オプション/リンク一覧
話題のニュース
列車運行情報
暇つぶしWikipedia

Size:16 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)
担当:undef