私は楕円曲線暗号の分野ではまったくの初心者であり、経験もありません。調査の結果、従来の DHE とは異なり、ECDHE パラメータは生成されるべきではなく、事前定義された曲線のリストから選択されるべきであると判断しました (例には、「P-521」、「prime192v3」が含まれます)。
ネットワークベースのセキュリティに敏感なアプリケーションを作成している間、単一のハードコードされた曲線を使用するよりも、実行時にランダムに異なる曲線を選択する方が良い (または論理的でさえある) でしょうか?
また、選択できるすべての曲線の中で、強い曲線と弱い曲線という概念はありますか?
これまでのところ、これは ECDH 交換を開始するための私のコードです。
//For readability purposes exception checking code not shown, all code is properly exception-handled
SecureRandom rnd = SecureRandom.getInstance("SHA1PRNG", "SUN");
X9ECParameters curve = ECNamedCurveTable.getByName("prime192v3");
ECDomainParameters domain = new ECDomainParameters(curve.getCurve(), curve.getG(), curve.getN(), curve.getH(), curve.getSeed());
ECKeyGenerationParameters ecgen = new ECKeyGenerationParameters(domain, rnd);
ECKeyPairGenerator kpgen = new ECKeyPairGenerator();
kpgen.init(ecgen);
AsymmetricCipherKeyPair kp = kpgen.generateKeyPair();
これまでのところ、このコードに問題はありますか?