484 / 736TRNG

True Random Number Generator

物理乱数生成器

TRNG は、電気的なノイズなどの物理現象から乱数のもとを得ます。ウォレットを安全に作るには、装置がそのノイズを正しく測定・処理し、故障も検知できる必要があります。

True Random Number Generator(TRNG)は、物理現象を測定して新たな予測不能な入力を得ます。保存した状態から次の値を計算するだけの生成器とは、この点が異なります。実際には両者を組み合わせて使えます。ただし「true」は品質の保証ではありません。物理的な源も、設計が不適切だったり故障したりすることがあります。

回路は小さな電気的変動を測定し、数値に変換できます。重要なのは、測定結果のどれだけを攻撃者が予測できないかです。大量のデータを素早く作るだけでは十分ではありません。NIST SP 800-90B は、そのノイズ源、サンプリング、必要な処理、動作確認を評価します。物理現象の名前だけでは、この評価の代わりになりません。 [1]

源によっては、1 よりも 0 が多く出ることがあります。conditioning と呼ばれる処理は、この偏りを抑え、利用できるエントロピー、つまり攻撃者から見た不確実性を、より短い出力に集めるために使われます。ただし、足りない不確実性を作り出すことはできません。そのため NIST SP 800-90B は、出力で認められるエントロピーを入力と処理方法に結び付けています。ハッシュという、データから計算する指紋のような値も、元の値が予測不能だった証拠にはなりません。入力が分かれば、同じ指紋を再計算できるからです。 [1]

源が同じ値を返し続ける場合、装置はそれを見逃してはいけません。NIST SP 800-90B は Repetition Count Test で繰り返しを、Adaptive Proportion Test で異常な頻度を監視します。これらは特定の故障を探す検査で、すべての攻撃や欠陥を自動的に見つけるものではありません。持続的な故障を検知した後は、正常時のように出力を続けてはいけません。 [1]

TRNG が搭載されているだけで、ウォレットが安全だとは言えません。そのバージョンがデータをどう使い、エラーにどう対応するかも重要です。NIST SP 800-90C は、源とその後の生成器を一緒に扱います。ひとつの部品の評価は、ウォレット全体の評価ではありません。優れた乱数源でも、後から漏らしたバックアップを守ることはできません。 [4]

動き続けている装置を長時間記録する場合と、電源を切って起動し直すことを繰り返す場合では、見えてくる挙動が異なります。そこで NIST SP 800-90B は、再起動試験も含めています。評価は、その具体的な源と動作条件に対応する必要があります。あるサンプルで得た結果が、すべての装置や環境にそのまま当てはまるわけではありません。装置内部のプログラムであるファームウェアの変更によっても、再評価が必要になることがあります。 [1]

技術資料では RDRAND と RDSEED という命令が出てきます。Intel は、ハードウェア乱数生成器 DRNG のガイドでこれらを説明しています。RDRAND は、内部状態から次の値を計算する決定論的生成器の結果を提供します。RDSEED は、初期化、つまり生成器の開始状態を作るために、処理済みのエントロピーを提供します。どちらも物理的な源から始まることはありますが、それは未処理のノイズを直接読めるという約束ではありません。 [2]

プロセッサは、要求されるたびに結果を用意できるとは限りません。そのため Intel は、RDRAND と RDSEED の両方で状態フラグ CF を確認するよう求めています。1 は結果が利用可能、0 は利用できないことを示します。格納先レジスタというプロセッサ内の小さな記憶場所が数値のゼロかどうかを見るだけでは不十分で、成功を示すフラグを読む必要があります。命令に対応したプロセッサであることと、今回の要求が成功したことは別です。 [2]

Linux の hw_random インターフェースでは、/dev/hwrng を通じて、ファイルを読むようにハードウェア源のデータを読み出せます。ただし、その文書は、このインターフェース自体がデータの品質検査を行うわけではないと明記しています。故障したり改変されたりしたハードウェアが不適切なデータを返しても、アプリケーションはそれを読み出せる場合があります。読み出しの成功は、十分なエントロピーの証拠にはなりません。源と、その出力をプログラムがどう扱うかの両方を評価する必要があります。 [3]

理解を深めるには、この項目とあわせて次もお読みください Cryptographic Entropy, Random Number Generator, CSPRNG, Entropy Mixing. 次の項目からも参照されています Entropy Mixing.

DOC · 001NIST SP 800-90B — Entropy sources, conditioning and health tests仕様 DOC · 002Intel DRNG guide — RDRAND, RDSEED and CF文書 DOC · 003Linux kernel — Hardware random number generator interface文書 DOC · 004NIST SP 800-90C — Complete RBG constructions仕様
改訂日: 一次資料を優先 · 投資助言ではありません