Diffie-Hellman鍵交換に適した素数とジェネレーターを生成するのは非常に難しいことに気づきました。
それらを生成する最良の方法は何ですか?また、1つ持っている場合、2回使用できますか?ウィキペディアによると、それらは「パブリック」と見なされます。
実際、それは難しいことではありません。計算上は少し高価かもしれません。
優れたDHモジュラスとジェネレーターは、DSAキーパラメーターを生成するときに得られるものです。 DSA仕様 を参照してください。サブグループの順序(q、素数)、モジュラス(p、p-1はq)の倍数であり、サイズのサブグループq。 OpenSSL がそれを行うことができます。プログラミング言語と環境が任意の長さの整数をサポートしていれば、自分で実装することはそれほど難しくありません(PythonとJavaは、Cはそうではありません。 [〜#〜] gmp [〜#〜] )として。
あるいは、いわゆる「安全な素数」を生成するためにいくらかの努力が費やされています。素数整数pこのような(p-1)/ 2も素数です。安全な素数はそのように呼ばれます。これは、いくつかの「弱い」モジュラスで離散対数を容易にする(または少なくとも簡単にする)可能性がある攻撃を受けないためです。ただし、ランダムに生成されたモジュラスは、圧倒的な確率で弱くなることはないため、ここでは本当の心配はありません。また、「安全な素数」には、g = 2をジェネレーターとして使用できるという利点があり、計算効率が向上します(多くはありませんが、それでも)。安全な素数を生成するには、安全な素数に到達するまで、適切なサイズのランダムな奇数の整数を試す必要があります。複雑でもなく、実装するのも難しいですが、完了するまでに数分かかる場合があります(400000に約1つの奇数の1024ビット整数は安全です)プライム)。または、 RFC 3526 のいずれかを使用できます。
何百万もの異なるキーペアに対して同じグループパラメータ(係数、ジェネレータ)を使用しても問題はありません。それらは確かに「公開データ」です。