web-dev-qa-db-ja.com

暗号の安全な素数を生成するために、Rabin-Millerの反復をいくつ使用する必要がありますか?

私はDiffie-Hellmanタイプの鍵、pと(p-1)/ 2がどちらも素数であるようなpに対して2048ビットの安全な素数を生成しています。

Rabin-Millerの反復をpと(p-1)/ 2の両方で使用して、暗号学的に強力な鍵に自信を持つことができる回数はいくつですか?私が行った調査では、1024ビットの通常の素数の6から64反復まですべてを聞いたので、この時点で少し混乱しています。そしてそれが確立された後、通常の素数ではなく安全な素数を生成している場合、その数は変わりますか?

計算時間は貴重なので、これは実用的な質問です。基本的に、ほとんどの保証されたセキュリティを維持しながら、できる限り少ない数のテストを見つける方法を知りたいと思っています。

13
jnm2

t = 40)ランダム化された基底を持つM-Rの反復は、p(1024、t)<(2 ^ -80)では完全に不要です。ランダムなベースに対するSPRPは、複合奇数値の1/4以下です。 ((1/4)^ t)は非常に悲観的で、論文 [〜#〜] dlp [〜#〜][〜#〜] rbj [〜#〜] (後者もDLP予想を証明します:p(k、t)<(1/4)^ t、k> = 2、t> = 1の場合)、結果を組み合わせて(t = 3)反復はp(1024, t) < 2^-80を生成するのに十分です。参照: 応用暗号化ハンドブック ch.4、表.4.4。この同じ(t = 3)値は、OpenSSLライブラリの1024ビット値に使用されます。


20190202:これらの論文に基づいて、自分のコードへのリンクを追加することにしました。 mrtabユーティリティが重要ですが、その上に構築されたLUTおよびアサーションテストプログラムはすべてパッケージの一部です。 mrtab プロジェクトに関するフィードバックはいつでもいただければ幸いです。

4
Brett Hale

私はちょうどstackoverflowで同じ質問に答えたので、ここで私の答えを複製します(私は複製が行く方法だとは思わない;多分質問は移行されるべきです):


Miller-Rabinが言う素数のように見えるまでヒットするまでランダムな値を選択して素数pを選択するとします。 Miller-Rabin検定では、最大でnラウンドを使用します。 (いわゆる「セーフプライム」の場合、2つのネストされたテストを実行することを除いて、変更はありません。)

ランダムな1024ビット整数が素数である確率は、約1/900です。今、あなたは愚かなことをしたくないので、odd値のみを生成します(1024ビットの整数でさえ素数でないことが保証されています)。そして、より一般的には、ミラー・ラビン検定は、値が「明らかに」非素数でない場合、つまり小さな素数で除算できる場合にのみテストします。つまり、(平均して)素数に到達する前に、Miller-Rabinで約300の値を試すことになります。値が非素数の場合、Miller-Rabinは各ラウンドで3/4の確率で値を検出するため、1つの非素数の値に対して平均して実行するMiller-Rabinラウンドの数は1+(1/4 )+(1/16)+ ... = 4/3。 300の値の場合、これはnの選択に関係なく、約400ラウンドのMiller-Rabinを意味します。

Edit:実際、ランダムに選択された非素数の場合、Miller-Rabinはそれよりもうまく機能します(@Brettの回答を参照) )そして平均ラウンド数は400よりも300に近くなります。それは私の議論を実質的に変更しません。)

したがって、nを選択して、たとえば40とすると、nによって暗示されるコストは合計の10%未満になります計算コスト。ランダムな素数選択プロセスは、非素数でのテストによって支配されます。これは、選択したnの値の影響を受けません。ここでは1024ビット整数について話しました。より大きい数の場合、nの選択は、サイズが大きくなるにつれて素数がスパースになるため、それほど重要ではありません(2048ビット整数の場合、上記の「10%」は「5%」になります)。

したがって、n = 40を選択して満足することができます(または、少なくともnを削減してもとにかくあなたはあまり買わないことを知っています)。一方、40以上のnを使用しても、単純な誤計算のリスクよりも低い確率になるため、意味がありません。コンピュータはハードウェアであり、ランダムな障害が発生する可能性があります。たとえば、素数テスト関数は、素数以外の値に対して「true」を返す可能性があります。これは、宇宙線(宇宙を高速で飛んでいる高エネルギー粒子)が、適切なタイミングで適切なトランジスタに衝突し、 0( "false")から1( "true")までの戻り値。ありそうもないですが、確率2と同じくらい可能性があります-80。詳細については、 このstackoverflowの回答 を参照してください。要点は、整数が素数であることをどのように確認したかに関係なく、避けられない確率的要素がまだあり、Miller-Rabinの40ラウンドがすでにあなたが期待できる最高のものを与えているということです。

要約すると、40ラウンドを使用します。

16
Thomas Pornin

Miller-Rabinを高速化する上で最も重要な要素は、小さな素数のセットに対して単純な分割可能性テストを最初に使用し、合格した場合にのみMiller-Rabinに頼ることです。

ランダムなkビットの奇数の整数nが小さな素数で割り切れる場合は、ミラーラビン検定を使用するよりも試行分割によって候補nを除外する方が計算コストがかかりません。ランダム整数nの素数が小さい確率は比較的大きいため、ミラーラビン検定を適用する前に、候補nを、あらかじめ決められた境界B未満の小さい約数についてテストする必要があります。

http://cacr.uwaterloo.ca/hac/about/chap4.pdf (4.1.1)

1
Jared Deckard