プログラミング
 Computer >> コンピューター >  >> プログラミング >> プログラミング

真の乱数生成器(TRNG)とは?仕組みと乱数源をわかりやすく解説

真の乱数生成器(TRNG)とは

真の乱数生成器(TRNG:True Random Number Generator)は、非決定的なソースからランダム性を生み出す装置です。多くの場合、電離放射線のパルス検出器、ガス放電管、漏電コンデンサなど、予測不可能な自然現象を測定することで乱数を生成します。

Intelは、駆動されていない抵抗器の両端で測定される電圧から熱雑音をサンプリングする、市販可能なチップを開発しました。TRNGは真の乱数を生成するものであり、一般的にハードウェア方式によって実現されます。

TRNGが安全とされる理由

TRNGは物理的なソースに基づいて乱数を生成するため、その値を予測することは極めて困難です。同じ値を作り出すことも難しいため、TRNGから得られる乱数はセキュアな手法であるといえます。

コンピュータで利用できる乱数源

注意深く扱えば、コンピュータ上で真の乱数列を生成するために利用できる乱数源には、以下のようなものがあります。

音声・映像入力

多くのコンピュータには、マイクからの音声やカメラからの映像など、現実世界のアナログ信号をデジタル化する入力装置が搭載されています。

何も接続していない音声デジタイザや、レンズキャップを閉じたカメラからの「入力」は、本質的に熱雑音です。システムが十分なゲインを持っていれば、こうした入力から比較的高品質なランダムビットを得ることができます。

ディスクドライブ

ディスクドライブは、カオス的な空気の乱流により回転速度に微小なランダム変動が生じることが知られています。低レベルのディスクシーク時間を計測することで、このランダム性を含む一連の測定値を取得できます。

こうしたデータは一般に相関が高いため、大幅な処理が必要です。それでも、過去の実験では、適切な処理を施せば、当時の低速なコンピュータに搭載された遅いディスクドライブでも、毎分100ビット以上の優れた乱数情報を生成できることが示されています。

バイアス除去(デスキューイング)アルゴリズム

TRNGの出力には、「1が0より多い」といった形で偏り(バイアス)が生じる場合があります。ビットストリームの偏りを軽減または除去するさまざまな手法が開発されており、これらはデスキューイング(de-skewing)アルゴリズムと呼ばれます。

デスキューイングの一つの方法は、ビットストリームをハッシュ関数に通すことです。ハッシュ関数は任意長の入力からnビットの出力を生成します。デスキューイングでは、m ≥ n を満たすmビットずつの入力ブロックをハッシュ関数に渡します。

論理デバイスにおける物理的ノイズ源

TRNGは単調になりがちですが、一方で擬似乱数生成器(数式ベース)は豊富に存在します。TRNGは物理的・非物理的なノイズ源のいずれも利用できます。

論理デバイスは常に明確な状態にあることが求められるため、利用できる物理的ノイズ源は限られます。乱数を生成するには、制御不能なランダム現象が必要です。

論理デバイスで乱数生成に用いられる主な物理現象は以下の通りです。

  • クロックジッター: クロックエッジが理想位置からずれる変動のこと。
  • メタスタビリティ: 回路が不確定な状態をある期間維持し続ける性質のこと。
  • カオス: 初期条件に極めて敏感に反応する決定論的システムの予測不能な挙動のこと。
  • アナログ信号: ダイオードのショットノイズや熱雑音などが含まれます。
  1. Pythonの基本演算子一覧|7種類の演算子の使い方を徹底解説

    Pythonには、値や変数に対してさまざまな処理を行うための「演算子」が多数用意されています。演算子はその役割によって、算術演算子・比較(関係)演算子・論理演算子・ビット演算子・代入演算子・同一性演算子・メンバーシップ演算子の7種類に分類されます。この記事では、それぞれの種類ごとに使い方をわかりやすく解説します。 1. 算術演算子 数値の計算に使用する最も基本的な演算子です。 +:加算(足し算) -:減算(引き算) *:乗算(掛け算) /:除算(割り算)。結果は常に浮動小数点数になる //:切り捨て除算。小数点以下を切り捨てた結果を返す %:剰余(割り算の余り) a = 10 b = 3

  2. 乱数生成器(RNG)とは?仕組みからゲームへの活用まで徹底解説

    乱数生成器(RNG)とは? 乱数生成器(Random Number Generator、RNG)とは、その名の通り、必要なタイミングで毎回ランダムな数値を取得する仕組みのことです。以前に生成された数値からパターンを推測することはできません。この数値はアルゴリズムまたはハードウェアデバイスによって生成され、予測可能な結果を回避するために非常に重要です。まるで地球上での私たちの人生のようで、次の瞬間何が起こるか誰にも分かりません。誰も自分のRNGコントローラーがどこにあるのか知らないのですから。 乱数生成アルゴリズムはビデオゲームで広く使われており、プレイするたびに異なる結果をもたらします。同じス