乱数とは、予測不可能なプロセス—サイコロや熱ノイズのような物理的なもの、あるいはランダムさを模倣するコンピュータのアルゴリズム—によって生成される値です。真の乱数生成器(TRNG)と疑似乱数生成器(PRNG)の大きな違いが、あなたのアプリが本当に安全なのか、それとも単にランダムに見えるだけなのかを決定づけます。くじ引き用のサッとしたピックが必要な場合でも、暗号学的に安全な鍵が必要な場合でも、信頼できる乱数生成器を使うことで大きな違いが生まれます。本ガイドでは基礎知識、失敗した場合の現実のリスク、そして2026年にあなたの状況に合った適切な生成器の選び方を解説します。
乱数とは何か?(そしてなぜ重要なのか?)
乱数は実際の値で定義されるのではなく—元になるソースがどれほど予測困難かで定義されます。サイコロを振るとき、結果がランダムになるのは、サイコロが転がり、表面に当たり、空気抵抗を受けるという物理プロセスが、精密にモデル化するには複雑すぎるからです。コンピューティングにおいて、ランダムさは情報理論の用語であるエントロピーによって測られ、予測不可能性を定量化します。ソースのエントロピーが大きいほど、次の数を当てるのは難しくなります。
日常的なランダムの概念は、計算的なそれとは異なることがよくあります。「1 2 3 4 5」のような数列は人間にはランダムでないように見えますが、乱数に関するWikipediaの記事が指摘するように、「最初の数列がランダムではないと断言することはできません……偶然に生成された可能性もあります。」重要な性質は、数列中の各数が他の数から独立しており、過去の出力から予測できないということです。
生成器には大きく2つのクラスがあります:
– 真の乱数生成器(TRNG) – ハードウェア乱数生成器(HRNG)とも呼ばれ—本質的に予測不可能な物理現象から数を取り出します。
– 疑似乱数生成器(PRNG) – 決定論的な数学アルゴリズムを使用します。ランダムに見えますが、初期状態(シード)を知っていれば完全に再現可能です。
この区別を正しく理解することが、アプリを安全に保つ第一歩です。数にとどまらない様々な種類のランダム化ツールをより広く見たい方は、当サイトの包括的なナンバーランダムジェネレーターガイドをご覧ください。

根本的な問題: なぜコンピュータは「真に」ランダムになれないのか
コンピュータは決定論的な機械です。すべての命令は固定された順序に従います。乱数を生成するには、外部のエントロピー源か、ランダムさをシミュレートするアルゴリズムに頼らなければなりません。数学者のジョン・フォン・ノイマンが1951年に語った有名な言葉があります。「乱数を作るために算術的な方法を考えようとする者は、当然ながら、罪を犯している状態にあるのです。」
乱数生成に関するWikipediaの記事に保存されているこの言葉は、ある根本的な真理を捉えています: 算術(アルゴリズム的)な方法は真に予測不可能な数を決して生み出せません。統計的検定にランダムに_見える_数列しか生み出せません。本物の予測不可能性を得る唯一の方法は、物理世界—抵抗器の熱ノイズ、大気ノイズ、放射性崩壊、あるいはラバランプのカオス的な模様—からエントロピーを収穫することです。
真の乱数生成器(TRNG)対 疑似乱数生成器(PRNG): 決定的な違い
核心的な違いは予測不可能性のソースに帰着します:
| 機能 | TRNG(真のRNG) | PRNG(疑似RNG) |
|---|---|---|
| ソース | 物理エントロピー(熱ノイズ、量子効果など) | 数学的アルゴリズム |
| 決定論的? | いいえ – 各出力は物理プロセスに依存 | はい – 同じシードは常に同じ数列を生成 |
| 再現可能? | いいえ | はい(シードが既知の場合) |
| 速度 | 通常遅く、エントロピー収穫によりレート制限 | 非常に高速 |
| ブロック? | エントロピーが枯渇するとブロックする可能性 | 非ブロック |
| 用途 | 暗号、セキュリティ鍵、宝くじ | シミュレーション、ゲーム、非セキュリティ用途 |
TRNGは物理現象を直接測定します。一般的なソースには、抵抗器の熱ノイズ、電子回路のジッタ、半導体のショットノイズ、そして光電効果のような量子現象があります。実用的なTRNGは通常、ノイズ源、デジタイザ、品質を改善するコンディショナー(ランダムネス抽出器)、およびソースがまだ機能していることを確認するためのヘルステストを含みます。
PRNGはランダムシード(多くの場合TRNGから取得)と呼ばれる初期値から始まり、次の数を生成するために数学的変換を繰り返し適用します。数列は決定論的であり、シードを知っていれば全く同じ数を再現できることを意味します。この再現性はシミュレーションのデバッグには有用ですが、攻撃者がシードを発見したり推測したりできれば、セキュリティ的には壊灭的な結果をもたらします。
第3のカテゴリーである暗号学的に安全な疑似乱数生成器(CSPRNG)は両者の長所を融合します: TRNGを使って高エントロピーシードを取得し、慎重に設計されたアルゴリズムを使って、真のランダムさと計算的に区別できない無限の数のストリームを生成します。標準的な暗号設計はこのハイブリッド手法を採用しています(Wikipediaの記事で説明されています)。
TRNGはどのように真の予測不可能性を生み出すか
真のRNGは物理環境からランダムさを取り込みます。有名な例がCloudflareによるもので、サンフランシスコオフィスにラバランプの壁があります。Cloudflareのブログ記事(2017年)が説明するように、ラバランプの絶えず変化し予測不可能な模様が撮影されハッシュ化されて、高エントロピーの乱数が生成されます。ラバランプは斬新なアプローチですが、ほとんどのTRNGは逆バイアスされたダイオードの熱ノイズのような、よりコンパクトなソースを使用します。
別の最近のホビイストプロジェクト、Joshua ColemanによるNeon Entropy Random Number Generator(2026年5月)は、3つのヴィンテージネオンランプを使用します。エネルギーを与えられたネオンランプの放電率は予測不可能に変動し、光学センサがこの変動を捉えます。Raspberry Pi Pico Wがアナログ信号を読み取り、ランダムシードとして使用できるSHA-256 64ビット値を生成します。作者はこのシステムは「特性が不十分」であり検証が必要だと認めていますが、物理プロセスからエントロピーを抽出する原理をうまく示しています。
なぜPRNGがコンピューティングの主力なのか
PRNGは高速、再現可能、実装が容易なため、あらゆる場所で使われています。Wikipediaの記事は、PRNGが「シミュレーション(例: モンテカルロ法)、電子ゲーム(例: 手続き型生成)、暗号などの応用において中心的である」と指摘しています。シミュレーションでは、同じシードから開始することで同じ乱数列を再実行できることがデバッグに不可欠です。暗号では、シードが秘密に保たれている限り、PRNGは安全になり得ます。
最も広く使われている汎用PRNGはMersenne Twister(MT19937)で、優れた統計的性質と長い周期(2^19937 − 1)で知られています。多くのプログラミング言語(Python、Ruby、PHP)は非暗号用途のデフォルトの乱数生成器としてMersenne Twisterを使用しています。しかしMersenne Twisterは暗号学的には安全ではありません—攻撃者は約624個の連続した出力を見た後に内部状態を再構築できます。セキュリティ関連のあらゆる用途にはCSPRNGが必要です。特定の言語で構築する場合、Python乱数生成器、Java乱数生成器、C++乱数生成器のようなツールが、各プラットフォームの正しいアプローチを案内します。
現実世界の影響: 乱数が失敗したとき(宝くじ不正事件)
弱い乱数生成器の結果は壊灭的になり得ます。最も劇的な例は、Wikipediaの記事に記載された米国宝くじ不正事件です。Multi-State Lottery Association(MUSL)の情報セキュリティ責任者が、定期メンテナンス中にセキュアなRNGコンピュータに密かにバックドア型マルウェアをインストールしました。数年にわたり、彼は宝くじの番号を予測して合計1,650万ドルを当選しました。この攻撃が成功したのは、バックドアによりRNGが事実上予測可能になったためです—侵害された、あるいは弱い生成器に依存するという典型的な失敗です。
悪意のあるバックドアがなくても、欠陥のあるランダムさは広範な被害を引き起こせます。乱数に関するWikipediaの記事は2012年の事故事例を引用し、あるオンライン暗号化方式における99.8%(完全な100%ではない)のランダム性欠陥が、ある大手サービスの推定27,000人の顧客に悪影響を及ぼしました。このような欠陥は、真のランダムさからのわずかな偏りでさえ大きな結果をもたらし得ることを示しています。
もう一つの有名な事例がDual EC DRBGバックドアです。このNIST認証の暗号学的に安全な疑似乱数生成器には、NSAによって挿入されたバックドアが含まれている疑いがあり、理論が正しければNSAが内部状態を特定し、それに依存する暗号化を破ることができました。Wikipediaの記事が指摘するように、NSAバックドアが2013年に確認されるずっと前からDual EC DRBGは「非常に貧弱でバックドアの可能性のある疑似乱数生成器」であったにもかかわらず、実際にはセキュリティ企業のRSA Securityを含む多くの場面で大幅に使用されていました。
話を変えると、オンライン乱数ツールの人気は、人々がいかにそれらに依存しているかを示しています。Wheel of Namesによると、2026年時点で同サイトは462,479,318回のホイールスピンと128万時間以上のスピンを記録しています。同サイトはユーザーに真の予測不可能性を保証するため、暗号学的に安全な関数(crypto.getRandomValues())を使用しています。ユーザーの多くはくじ引き、教室での選択、ストリーミングのプレゼント企画を行っています。この規模の利用は、乱数生成器が失敗したときに数百万人に影響を及ぼすことを示しています。

2026年のあなたのユースケースに合った乱数生成器の選び方
適切な乱数生成器の選択は、アプリケーションのセキュリティ、速度、再現性のニーズに依存します。以下の判断フレームワークを使ってください:
暗号用途: CSPRNGの必須利用
アプリケーションが暗号鍵、認証トークン、セッションID、その他のセキュリティ機密データを扱う場合、暗号学的に安全な疑似乱数生成器(CSPRNG)を必ず使用しなければなりません。これらの目的には絶対にMath.random()、random.randint()、あるいはMersenne Twisterを使用しないでください。予測可能性の結果—金銭的窃盗、データ漏洩、アカウント乗っ取り—はあまりに深刻です。
推奨ツール:
– Webブラウザ: Web Crypto API(crypto.getRandomValues())を使用。Wheel of Namesがランダムさを保証するために使っているものです。
– Unix/Linuxシステム: /dev/urandomから読み出してください。ハードウェアエントロピーでシードされた非ブロック型のCSPRNGを提供します(注: /dev/randomは十分なエントロピーが利用可能になるまでブロックするため、大量読み出しには推奨されません)。
– Windows: CryptGenRandom()またはRNGCryptoServiceProviderを使用。
– Intelプロセッサ: RDRAND命令はオンチップのハードウェア生成器から乱数を返しますが、多くのセキュリティ重視のシステムは潜在的なバックドアへの防御のため、その出力を他のエントロピー源と混合しています。

シミュレーションとゲーム用途: PRNG(Mersenne Twisterなど)の速度
モンテカルロシミュレーション、科学技術計算、ビデオゲーム、手続き型コンテンツ生成では、暗号学的なセキュリティよりも速度と統計的品質が重要です。ここでは、Mersenne Twister(MT19937)や新しいPCGファミリーのような高速なPRNGがうまく機能します。これらの生成器は1秒間に何十億もの数を生成し、ほとんどの統計的検定に合格します。
- 再現性は重要な利点です: 同じシードから始めると同じ数列が得られ、これはデバッグや実験の再現性を確保する上で不可欠です。
- 注意: お金、本人確認、アクセス制御を伴うものにはこれらを使用しないでください。
宝くじと公正さの用途: ハードウェアベースのエントロピーの必要性
宝くじ、懸賞、抽選、そして公正さが法的または倫理的に要求されるあらゆるシステムは、ハードウェアベースのエントロピー(TRNG)か、少なくとも物理エントロピーでシードされた適切に設計されたCSPRNGを使用しなければなりません。宝くじの不正事件は、シードやソフトウェアが改ざんされれば「安全な」RNGさえも侵害され得ることを示しています。大気ノイズ(Random.orgなど)による物理的ランダムさ、量子乱数生成器、または専用のハードウェアモジュールが、予測不可能性の最も強い保証を提供します。
テスト用のランダムな電話番号の生成のような日常的なタスクでは、ランダム電話番号生成器が、暗号ハードウェアの複雑さなしに素早く信頼できる結果を提供します。
高い利害が絡む用途では:
– 物理ソース: 専用のHRNG(例: 熱ノイズや量子光子放出に基づくもの)を使用。
– ハイブリッド手法: 速度向上のためハードウェアエントロピーとCSPRNGを組み合わせる。
– 監査: 出力の均一性と独立性を定期的にテストする(第6節を参照)。
ランダムさの最前線: 最新の研究とツール(2026年アップデート)
基本的なTRNG/PRNGの違いは確立されていますが、最近の研究は速度、効率、適応性の限界を押し広げています。_Scientific Reports_に発表された注目すべき2026年の研究は、DMARS_WGO(Dual-Mode Adaptive Reinforced Switching Walrus-Gazelle Optimizer)を導入しています。これは強化学習を用いて探索と活用を動的にバランスさせるハイブリッドメタヒューリスティックアルゴリズムです。
論文DMARS_WGO: a deep reinforcement-driven hybrid metaheuristic for intelligent adaptive optimizationによると、このアルゴリズムはCEC2017スイートの29個のベンチマーク関数のうち26個で第1位、CEC2022の12個の関数のうち8個で第1位を達成しました。DMARS_WGOは主に最適化アルゴリズム(汎用RNGではない)ですが、機械学習がランダム探索プロセスの品質をいかに向上できるかを示しており—シミュレーションにおけるより良いランダムさの直接的な利点です。
日常の開発者にとって最も重要な2026年のベストプラクティスは、オペレーティングシステムレベルのCSPRNGに依存することです。モダンなCPUで利用可能なIntelのRDRAND命令は、コードから直接アクセス可能なハードウェアベースの乱数生成器を提供します。Linuxカーネルの/dev/urandomは現在、高速かつ安全なChaCha20ベースのCSPRNGを使用しています。Web Crypto API(crypto.getRandomValues())はクライアントサイドのJavaScriptセキュリティの標準となっています。
モダンなCPUはどのように乱数を生成するか(RDRANDとそれ以降)
IntelおよびAMDのモダンなプロセッサには、RDRAND命令を通じてアクセス可能な内蔵ハードウェア乱数生成器(HRNG)が含まれています。この生成器は、MOS(金属酸化物半導体)トランジスタの熱ノイズのようなオンチップのエントロピー源を使用してランダムビットを生成します。1秒間に数千の乱数を提供できます。
しかし、ハードウェアは理論的に改ざんされ得るため(Dual EC DRBGの事例が示す通り)、多くのセキュリティ重要なアプリケーションはRDRAND単独では使用しません。Wikipediaの記事は「Linuxでの乱数生成において、IntelのRDRANDハードウェアRNGをRDRANDの出力を他のエントロピー源と混ぜ合わせずに使用することは容認できないと見なされている」と指摘しています。「ホワイトニング」と呼ばれるこの手法は、複数の独立したソースを組み合わせて隠れたバックドアのリスクを減らします。
あなたの数の「ランダムさ」をテストする方法
よく設計されたRNGを使用する場合でも、その出力が期待される統計的性質を示すことを検証すべきです。2つの主要なチェックは等確率性(各値がほぼ均等に現れる)と独立性(連続する値の間に予測可能なパターンがない)です。
PsychicScience.orgの乱数生成器ページによると、ブラウザのMath.random()メソッドを、選択した範囲内で100,000個のオープンシーケンス整数を生成することでテストできます。同ページは「偶然により、ランダム性チェックは10回に約1回の割合で非ランダムなシーケンスを示します」と指摘しています—10%の偽陽性率は正常です。
カイ二乗検定を簡単に解説
ランダムさに関する最も一般的な統計的検定はカイ二乗(χ²)適合度検定です。実践では次のように機能します:
- RNGからN個の数の数列を生成します(例: 1から6の間の1,000個の整数)。
- 各値が現れる回数を数えます。
- これらの観測度数を期待度数と比較します(一様分布の場合、各値はN/6回現れるはずです)。
- カイ二乗統計量を計算します: 全カテゴリーにわたり((観測 − 期待)² / 期待)の和。
- 解釈: このカイ二乗値に関連する確率が0.10(典型的な閾値)より大きい場合、ランダムさからの有意な偏りの証拠はありません。
2つ目のペアワイズ独立性のテストは、連続する数の考えられる各ペアの頻度が等しくあり得るかどうかをチェックします。例えばサイコロを振る場合、ペア(1,1)、(1,2)、…、(6,6)はそれぞれ似た頻度で現れるはずです。カイ二乗分割表検定は、高い値と低い値を交互に繰り返す傾向のようなバイアスを検出できます。
PsychicScience.orgのツールを含む多くのオンラインツールが、組み込みのカイ二乗チェックを提供しています。本格的な検証には、NIST Statistical Test Suite(STS)が頻度、連、ブロック頻度テストを含む15種類のテストを提供しています。
結論
TRNGとPRNGの違いを理解することは、アプリを保護し、情報に基づいた意思決定を行うための第一歩です。TRNGは物理エントロピーを収穫し、PRNGは決定論的なアルゴリズムとシードを使用し、CSPRNGはセキュリティのために両者を組み合わせます。1,650万ドルの宝くじ不正事件が示すように、間違ったものを選んだ場合の現実世界での結果は、金銭的損失、法的責任、レピュテーションの損失になり得ます。
実行可能なアドバイス: 今日からコードベースを監査し、Math.random()がセキュリティ、認証、トークン生成のいかなるコンテキストでも使用されていないことを確認してください。すべての機密操作をCSPRNGに移行してください。シミュレーションやゲームにはMersenne Twisterのような高速なPRNGで問題ありませんが、再現性の要件を常に意識してください。そして宝くじ、抽選、公正さが重要なシステムを運営する場合は、専用のハードウェアRNGか、監査可能なエントロピー源を持つ適切に検証されたCSPRNGに投資してください。2026年のDMARS_WGO研究の言葉を借りれば、「検索力学を賢く自己適応させる」能力が最先端ですが—ほとんどの開発者にとって、単に適切な既存ツールを選ぶことが最もインパクトのある一歩です。
FAQ
真の乱数生成器(TRNG)と疑似乱数生成器(PRNG)の違いは何ですか?
TRNGは物理プロセス(熱ノイズ、量子効果、ラバランプ)を使用して、本質的に予測不可能な数を生成します。PRNGは数学的アルゴリズムと開始シードを使用します。出力はランダムに見えますが完全に決定論的です。セキュリティには、TRNGまたはCSPRNGが必要です。
ウェブサイトが生成する乱数は本当にランダムですか?
ほとんどのウェブサイトは決定論的だが統計的にランダムなPRNGを使用しています。暗号や宝くじ向けの信頼できるサイトは、ハードウェアベースのエントロピーまたはCSPRNG(例: Web Crypto API)を使用します。ネームピッカーのような非セキュリティ用途では、単純なPRNGで通常十分です。
暗号学的に安全な乱数を生成するにはどうすればよいですか?
ブラウザではWeb Crypto API(crypto.getRandomValues())のような専用APIを使用してください。Unix/Linuxシステムでは/dev/urandomから読み出してください。セキュリティ目的には絶対にMath.random()を使用しないでください。大量生成には、ChaCha20のようなモダンなCSPRNGが高速かつ安全です。
コメントを残す