真の乱数と擬似乱数:乱数生成器の仕組み

ウェブサイトの「生成」ボタンをクリックするとき、結果が完全にランダムであることを期待します。しかしコンピュータ科学の世界では、真のランダム性の達成は驚くほど難しいのです。デジタルのランダム性のほとんどは、実は「擬似乱数」です。このガイドでは、真の乱数生成器(TRNG)と擬似乱数生成器(PRNG)の違いと、この区別がサイバーセキュリティに不可欠な理由を解説します。

自分で試す

擬似乱数アルゴリズムの動作を見たいですか?無料の乱数生成ツールで、カスタム列を即座に生成できます。

目次

ランダム性とは?

数学では、認識できるパターンや順序を含まない数列がランダムとみなされます。真のランダム性とは、列の前の数字を知っても、次の数字を予測する上でまったく有利にならないことを意味します。

人間が乱数生成に致命的に向かないことは有名です(数字の繰り返しを避け、特定のパターンを好みます)。一方、コンピュータは本質的に決定論的な機械です。命令をプログラムされたとおりに正確に実行します。では、「1」と「0」しか理解しない機械は、どうやってランダム性を生み出すのでしょうか?

擬似乱数生成器(PRNG)

ウェブツール、ビデオゲーム、ソフトウェアアプリケーションの大多数はPRNGを使っています。PRNGは、初期値(「シード」と呼ばれる)を取り、複雑な方程式に通して、ランダムに見える数列を生成する数学的アルゴリズムです。

Next Number = MathAlgorithm(Previous Number, Seed)

PRNGは数学に依存するため、決定論的です。今日も明日も10年後もまったく同じシードを与えれば、毎回まったく同じ数列を出力します。

これは非常に効率的です。PRNGは信じられないほど高速で、毎秒数百万の数字を生成できます。Spotifyのプレイリストのシャッフル、ゲーム内のデジタルダイス、統計シミュレーションには、PRNGで完全に十分です。JavaScriptの標準Math.random()関数はPRNGです。1〜10の乱数生成ツールで試せます。

パスワードを生成していますか?

セキュリティには真の予測不可能性が必要です。パスワードに標準的なPRNGを使ってはいけません。代わりに、安全なパスワード生成ツールをご利用ください。

真の乱数生成器(TRNG)

真の乱数生成器は数学に依存しません。代わりに、現実世界の予測不可能な物理現象からランダム性を抽出します。

現代のTRNGは、電子回路の熱雑音、光電効果、さらにはユーザーのキー入力のタイミングなどを測定します。最も有名なTRNGサービス、Random.orgは、大気ノイズ(ラジオのノイズ)を使って数字を生成しています。

これらの物理的事象は量子力学に支配されているため、根本的に予測不可能です。TRNGはシードを使わず、数列は何があっても再現できません。

セキュリティにとって違いが重要な理由

チーム分けツールで抽選の当選者を選んだりプレイヤーを分けたりするだけなら、PRNGは完全に安全です。「疑似」というランダム性は問題になりません。

しかし暗号技術では、予測可能性は脆弱性と同義です。ハッカーがPRNGが使っている数学的シードを解明できれば、コンピュータが生成するすべての「ランダムな」数字、つまり秘密鍵やパスワードまで再現できます。

だからこそブラウザは、window.crypto.getRandomValues()のような暗号論的に安全な擬似乱数生成器(CSPRNG)を開発しました。これらのアルゴリズムも数学を使いますが、「シード」を高度に予測不可能なシステム変数(マウスの動きやCPU温度など)から収集し、厳格な統計的ランダム性試験に合格することが数学的に保証されています。これが、パスワード生成ツールのようなセキュアなツールを支えるバックエンド技術です。

イベント用に、重複のない一意な数字を保証付きで生成する必要がある場合、PRNGは完璧です。重複なし乱数生成ツールでお試しください。

よくある質問(FAQ)

JavaScriptのMath.random()関数は本当にランダムですか?

いいえ。Math.random()は擬似乱数生成器(PRNG)です。数学的アルゴリズムと初期シード値を使って、ランダムに見える数列を生成しますが、実際は完全に決定論的で予測可能です。

PRNGとTRNGの違いは何ですか?

PRNG(擬似乱数生成器)は数学を使い、ランダムに見えて決定論的な数字を作ります。TRNG(真の乱数生成器)は、大気ノイズや放射性崩壊のような予測不可能な物理現象からランダム性を抽出するため、真に予測不可能です。

擬似乱数生成器はパスワードに使えますか?

いいえ。パスワードや暗号鍵に標準的なPRNGを使ってはいけません。PRNGは決定論的なため、シードを推測できたハッカーはあなたの正確なパスワードを再現できます。必ず暗号論的に安全な擬似乱数生成器(CSPRNG)またはTRNGを使ってください。