web-dev-qa-db-ja.com

乱数ジェネレーターの弱点は、暗号プロセス全体の妥協にどのようにつながりますか?

ニュースには、いくつかの記事( ここここおよび技術的な観点 )があり、これは乱数ジェネレータ。

問題はやや二重です。 弱いRNGはどのような症状を示しますか?これは、たとえば、いくつかの異なるシードが同じ結果を与えることを意味しますか?または、「弱い」という意味が欠けていますか?

そして、弱いRNGがあることを理解してから、暗号化されたトラフィックを完全に解読する方法を教えてください

14
Rubber Duck

秘密鍵を生成するときは、ランダム性のソースを使用して行います。そのランダム性のソースが[〜#〜] n [〜#〜]異なるビットストリームを出力できる場合、せいぜい[〜#〜] n [〜 #〜]別の秘密鍵。ここで、entropyについて説明します。これは、その大きさの尺度です[〜#〜] n [〜#〜 ]です。ランダム性のソースが「100ビットのエントロピー」を提供すると言われている場合、それは(おおよそ)N = 2100

攻撃者はあなたの秘密鍵を取得しようとします。 [〜#〜] n [〜#〜]の弱いソースを使用していることを彼が知っている場合(たとえば、40ビットのエントロピーのみ)、彼は自分のマシンで列挙できます。ランダムなソースからのすべての可能な出力と、対応する秘密鍵を計算します。

たとえば、マイクロ秒で表された現在の時刻をシードしたPRNGを使用したとします。これは、マシンで認識されている時間です。攻撃者は、あなたのマシンが現在の時間でかなり適切に設定されていると想定しています。たとえば10秒以内です。したがって、攻撃者の観点から、PRNGのシードは10秒の範囲内でわかります。 PRNGはマイクロ秒単位の時間を使用するため、N = 100000可能なシードが残ります。その後、攻撃者は自分に次のように言います。「その男がシード値として使用された場合xである場合、そのコードは秘密鍵の値Kバツ;それが彼の公開鍵と一致するかどうか見てみましょう...したがって、彼はxを使用しませんでした。 x + 1を使ってもう一度試してみましょう(など)。 "

したがって、弱いPRNGはそのような状況では致命的です。

弱いPRNGをどのように検出できますか?まあ、ほとんどの場合、それはできません。非常に貧弱なPRNGは最初から貧弱に見えるかもしれません。たとえば、2つの秘密鍵を生成して2度同じになる場合、おそらく何か問題があります...しかし、「シードとしての時間」の例が示すように、これは常に簡単に検出できるわけではありません。種子を再利用しないでください。しかし、これは弱いです。弱さは、ランダムソースの内部状態を推測するのがいかに難しいかに起因するため、統計的にバイアスされているのと同じではありません。

大きな統計的バイアスis検出可能であり、明らかな弱点です。しかし、PRNGは、そのように検出されずに弱い可能性があります。

悪者であり、検出できない弱いPRNGを作成したい場合は、優れたブロック暗号を使用できます(たとえば、 [ 〜#〜] aes [〜#〜] )、いくつかのキー値[〜#〜] k [〜#〜]を選択し、0から始まるカウンターの連続する値を暗号化します。これは、疑似ランダムバイトの非常に長いストリームを生成します。これは、AESが暗号化においてgoodであるため、ランダムではないことを証明することはできません。しかし、あなたは悪者として[〜#〜] k [〜#〜]を知っているので、自分でストリーム全体を簡単に予測できます。

弱いPRNGを検出する唯一の信頼できる方法は、PRNGが機能する正確な方法を、詳細まで調べます:収集する物理イベント、なぜこれらのイベントを「ランダム」と見なすことができるのか、それらを暗号アルゴリズムと組み合わせて疑似ランダムバイトを生成する方法。不透明なハードウェアRNGを使用してそれを行うことはできないため、現在のうわさは増えています。

17
Thomas Pornin

弱いRNGは定義上、検出が困難です(ランダムストリームでは、すべてのシーケンスが等しく可能性があるため、ランダムでないことを証明するために無限ストリームが必要になります)、適切な定義は、(明らかに)次の桁を確実に予測できるかどうかですランダムストリームでは、「チャンス」よりも優れています。繰り返しますが、これは無限のストリームがある場合にのみ証明できますが、暗号を解読する場合、これは観測からの弱いRNGを想定し、仮定を使用して実際に暗号化を解く(つまり、 (疑似)ランダムパターンが生成されます。これは、無限ストリームが生成されるのを待って、配信のためにテストするよりも、弱いRNGを証明するためのより良い方法です)。

ランダムストリームのパターンを予測する方法を決定または推測した後、そのストリームがキーまたはワンタイムパッドの生成に使用されている場合、予測分布を使用して(の検索スペースを削減する方法として)秘密)鍵の推測または転置暗号などでの分布の検索。1回限りのパッドの場合、パッドを反転させる方法があるため、特に問題になります(かなりの量の鍵を知っている場合は簡単です)。

すべての暗号化アルゴリズムは、当然のことながら、程度の差こそあれランダム性が低下しやすく、「疑似」で十分な場合もあります。

3