web-dev-qa-db-ja.com

Diffie-Hellmanの素数はどこで入手できますか? 2回使用できますか?

Diffie-Hellman鍵交換に適した素数とジェネレーターを生成するのは非常に難しいことに気づきました。

それらを生成する最良の方法は何ですか?また、1つ持っている場合、2回使用できますか?ウィキペディアによると、それらは「パブリック」と見なされます。

28
Stefano Palazzo

実際、それは難しいことではありません。計算上は少し高価かもしれません。

優れたDHモジュラスとジェネレーターは、DSAキーパラメーターを生成するときに得られるものです。 DSA仕様 を参照してください。サブグループの順序(q、素数)、モジュラス(pp-1q)の倍数であり、サイズのサブグループqOpenSSL がそれを行うことができます。プログラミング言語と環境が任意の長さの整数をサポートしていれば、自分で実装することはそれほど難しくありません(PythonとJavaは、Cはそうではありません。 [〜#〜] gmp [〜#〜] )として。

あるいは、いわゆる「安全な素数」を生成するためにいくらかの努力が費やされています。素数整数pこのような(p-1)/ 2も素数です。安全な素数はそのように呼ばれます。これは、いくつかの「弱い」モジュラスで離散対数を容易にする(または少なくとも簡単にする)可能性がある攻撃を受けないためです。ただし、ランダムに生成されたモジュラスは、圧倒的な確率で弱くなることはないため、ここでは本当の心配はありません。また、「安全な素数」には、g = 2をジェネレーターとして使用できるという利点があり、計算効率が向上します(多くはありませんが、それでも)。安全な素数を生成するには、安全な素数に到達するまで、適切なサイズのランダムな奇数の整数を試す必要があります。複雑でもなく、実装するのも難しいですが、完了するまでに数分かかる場合があります(400000に約1つの奇数の1024ビット整数は安全です)プライム)。または、 RFC 3526 のいずれかを使用できます。

何百万もの異なるキーペアに対して同じグループパラメータ(係数、ジェネレータ)を使用しても問題はありません。それらは確かに「公開データ」です。

23
Thomas Pornin