485 / 736MIX-H

Entropy Mixing

エントロピーの混合

Entropy Mixing は、秘密を作る際に複数の入力を組み合わせます。役立つ場合もありますが、源が二つあれば安全性も自動的に二倍になるわけではありません。攻撃者の知識と、源同士の関係が重要です。

Entropy Mixing は、生成器が複数の入力をまとめて処理する方法です。一つの源だけに依存せず、異なる源の不確実性を利用することが目的になります。ただし、データの追加はエントロピーの追加と同じではありません。既知の情報のコピーは、新たな秘密を加えません。安全性は具体的な源と、検証された組み合わせ方に左右されます。

同じ出来事を記録した二つのファイルを考えてください。名前が違っても、二つ目の記録が独立した未知の情報を増やすわけではありません。同様に、パケットの到着時刻とディスクへのアクセス時刻には関係がある場合があります。NIST SP 800-90B は、依存する源のエントロピー推定を単純に足せないと注意しています。まず、攻撃者がほかの入力も知ったときに何が不確かなままかを調べる必要があります。 [1]

ハッシュは、データから計算する指紋のような値です。 しかし、攻撃者がすべての入力を知っていれば、同じ結果を計算できます。長いハッシュや公開された定数の追加で、既知の入力が秘密になることはありません。RFC 4086 は、存在する不確実性の混合と、決定論的に値を増やすことを区別します。適切な混合は源が実際に持つものを活用しますが、足りないエントロピーの代わりにはなりません。 [2]

XOR はビットを比較し、同じなら 0、違えば 1 を返します。したがって X XOR X = 0 です。この場合、値をそのコピーと組み合わせると不確実性は消えてしまいます。一方、一つの入力が一様にランダムで、もう一方から独立していれば、結果も一様になります。RFC 4086 はこの例で前提条件の重要性を示しています。ウォレット用生成器を自作する手順ではありません。 [2]

具体的な設計を評価するときは、入力がどこから来て、攻撃者が何をできるのかを確認します。暗号鍵を導出する方法である HKDF は、salt という補助入力を使います。秘密である必要はありませんが、RFC 5869 は元の鍵素材から独立していることを前提とし、攻撃者が選んだり変えたりできないようアプリケーションに求めています。Salt はここではパラメーター名です。源の一覧やランダムに見える出力だけでは、源が故障したときの安全性を保証できません。 [4]

NIST SP 800-90B は、主となるノイズ源を前提にします。他の源の出力をそのデータに連結することも認めていますが、まとめて conditioning と呼ばれる承認済みの処理を通す必要があります。この評価方式では、追加した源のエントロピーは加算しません。入力が増えても、認められる値は自動的には増えないのです。これは特定の評価規則であって、他の源が決して役立たないという意味ではありません。 [1]

違いが分かる例が OpenSSL 3.5 です。これは、プログラムが暗号化や乱数などを扱うために使える暗号ライブラリーです。RAND_add() はバッファ、つまりデータを置くためのメモリー領域から入力を混ぜ込みます。num は読むバイト数を指定し、randomness はそのエントロピーをゼロから num までの範囲でバイト単位に見積もります。メモリー領域の大きさは、その推定の証拠にはなりません。標準の生成器は通常、自動で初期化し、システム由来のエントロピーを補充します。 [3]

生成器に新しいエントロピーを補うことを reseeding と呼びます。任意のデータを加えることとは違います。OpenSSL 3.5 の文書によれば、暗号モジュールの規則に従う FIPS モードでは、アプリケーションからのデータを信頼されたエントロピー源として扱いません。追加入力として混ぜるだけで、完全な reseed には数えません。したがって、RAND_add() を呼び出しただけでは、その更新を行った証拠になりません。 [3]

RFC 5869 の HKDF は、処理を HKDF-Extract と HKDF-Expand に分けます。前者は入力にあるエントロピーを中間の鍵に集め、後者はその鍵から必要な長さのデータを導出します。そこで別の独立した秘密を得るわけではありません。info は出力を使い道に結び付けられるパラメーターで、たとえば導出した鍵の用途を示せます。この文脈情報は、良質な初期データを代替せず、新しいエントロピーが生まれた証拠にもなりません。 [4]

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

DOC · 001NIST SP 800-90B — Additional noise sources仕様 DOC · 002RFC 4086 — Mixing and randomness requirements仕様 DOC · 003OpenSSL 3.5 — RAND_add and FIPS reseeding文書 DOC · 004RFC 5869 — HKDF extraction, expansion and independence仕様
改訂日: 一次資料を優先 · 投資助言ではありません