ECDHE安全与充气城堡

时间:2013-10-26 08:00:06

标签: java cryptography bouncycastle elliptic-curve diffie-hellman

我在椭圆曲线密码学领域相当新颖且缺乏经验。经过一些研究,我确定与传统的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();

到目前为止,此代码有什么问题吗?

1 个答案:

答案 0 :(得分:1)

使用ECC加密技术,创建域参数需要很长时间。检查域参数的安全性也很困难,例如检查Daniel J Bernstein和Tanja lange的SafeCurves研究。生成自己的曲线可以完成,但可能不是实时的。此外,安全性可能低于预定义的安全性,您可能会在以后遇到兼容性问题。

曲线的大小显然很重要,但任何256位以上都应该提供足够的安全性。仍有可能 - 尽管不是 可能 - NIST曲线是使用可能削弱安全性的方案生成的。如果您对此感到担心,请从上面的站点选择一条曲线(例如BrainpoolP384r1曲线),或选择一条更“学术”的曲线。 F(p)曲线应该优于其他曲线。

虽然这不是代码审查网站,但您提供的代码似乎没有任何特别的错误。

相关问题