Cryptology Academy · レッスン

真の乱数と擬似乱数

ハードウェアのエントロピー源とソフトウェアのPRNGを区別します。

レッスン 1/413 ステップ

「真の乱数と擬似乱数」はCoddyKit上の無料Cryptology Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCryptology Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Cryptology Academyコースには全4レッスンが含まれています。

乱数が重要な理由

暗号学的安全性は、予測不可能性に根本的に依存しています。攻撃者が鍵、IV、またはnonceを、たとえ部分的にでも予測できると、暗号システム全体が破綻する可能性があります。弱い乱数が、現実世界で壊滅的な被害をもたらした例は数多くあります。

真の乱数生成器(TRNG)

TRNGは物理的なエントロピーを収集します。たとえば、抵抗器の熱雑音、逆バイアスダイオードのショットノイズ、放射性崩壊、マウスの動き、キー入力のタイミング、ディスクシークの遅延などです。これらは本質的に予測不可能な物理現象です。

エントロピープール

OSはエントロピープールを維持します。これは、物理的なノイズのサンプルをXORし、まとめてハッシュ化したものです。Linuxでは、/dev/randomと/dev/urandomがこのプールからデータを取得します。システムの稼働中、プールは継続的に補充されます。

疑似乱数生成器(PRNG)

PRNG(Deterministic RNG / DRNGとも呼ばれます)は、決定論的なアルゴリズムを使って短いシードを長い疑似乱数バイト列に拡張します。同じシードを与えると、同じ出力を生成します。真のエントロピーでシードされない限り、暗号用途には適していません。

PRNGとCSPRNGの比較

PRNGには、検出可能な統計的偏りがあったり、観測した出力から予測できたりする可能性があります。暗号学的に安全なPRNG(CSPRNG)は、(1)前方秘匿性(現在の状態から過去の出力を予測できないこと)と、(2)バックトラッキング耐性(過去の出力から将来の出力を予測できないこと)を備えています。

識別器テスト

PRNGは、真にランダムな系列と比べて、その出力を1/2を大幅に上回る確率で識別できる多項式時間アルゴリズムが存在しない場合に、暗号学的に安全です。これは次ビット予測不可能性基準です。

各プラットフォームのエントロピー源

Linux:/dev/urandom(初回のシード設定後はノンブロッキング)、getrandom()システムコール。Windows:CryptGenRandom()、BCryptGenRandom()。macOS/iOS:SecRandomCopyBytes()。ブラウザー:window.crypto.getRandomValues()。いずれもOSのエントロピープールに入力されます。

統計的テスト

NIST SP 800-22は、乱数性に関する15種類の統計的テストを提供しています。頻度、ブロック頻度、ラン、Maurer's universal、線形複雑度などです。統計的テストに合格しても、暗号学的安全性が証明されるわけではありません。明らかな偏りがないことを示すだけです。

シードの品質

弱いエントロピー(例:現在時刻を秒単位で表した値)でシードされたCSPRNGは予測可能です。攻撃者がシードを知ると、出力全体を復元できます。必ずOSのエントロピーからシードしてください。Pythonではos.urandom(32)を使い、time.time()やrandom.random()は使わないでください。

ハードウェア乱数生成器

Intel RDRAND(x86命令)は、チップ上のTRNGからハードウェアで生成されたランダムバイトを返します。AMDやARMにも同等のハードウェアが存在します。LinuxはRDRANDの出力を/dev/urandomに混合します。信頼性に関する懸念があるため、単独のソースではなく補助的なエントロピーとして使用されます。

量子乱数生成器

QRNGは、光子の到着時刻や真空ゆらぎなどの量子力学的現象を利用して、証明可能なランダム出力を生成します。商用のQRNG(ID Quantique、Quantis)は、高セキュリティ用途で使用されています。一般用途にはコストが高すぎます。

確認問題

CSPRNGと通常のPRNGを区別する特性は何ですか。

まとめ

TRNGは物理的なエントロピーを収集し、PRNGはシードを決定論的に拡張し、CSPRNGは真の乱数と識別できません。OSのエントロピープールは、これらを組み合わせます。次は、実際に使用されている具体的なCSPRNGの設計について学びます。

無料で開始

AI チューターと学ぶ Cryptology Academy — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
67
レッスン
261

よくある質問

「真の乱数と擬似乱数」レッスンは無料ですか?

はい。「真の乱数と擬似乱数」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Cryptology Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Cryptology Academyコースには全4レッスンが含まれています。

「真の乱数と擬似乱数」で何を学びますか?

ハードウェアのエントロピー源とソフトウェアのPRNGを区別します。 ブラウザで直接実行するハンズオンコードでCryptology Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Cryptology Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのCryptology Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「真の乱数と擬似乱数」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このCryptology Academyレッスンでコードを書いて実行できますか?

はい。すべてのCryptology Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 真の乱数と擬似乱数
  2. 暗号学的に安全なPRNG
  3. エントロピー枯渇と脆弱な鍵のバグ
  4. 鍵、ノンス、IVを安全に生成する
← Cryptology Academyに戻る