【问题标题】:ECDHE Security with Bouncy Castle带充气城堡的 ECDHE 安全性
【发布时间】:2013-10-26 08:00:06
【问题描述】:

我是椭圆曲线密码学领域的新手,经验不足。经过一些研究,我确定与传统 DHE 不同的是,不应生成 ECDHE 参数,而是从预定义曲线列表中选择(示例包括“P-521”、“prime192v3”)。

在创建基于网络的安全敏感应用程序时,在运行时随机选择不同的曲线与使用单个硬编码曲线相比更好(甚至合乎逻辑)?

另外,在所有的曲线中是否有strongerweaker曲线这样的概念可供选择?

到目前为止,这是我启动 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();

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

【问题讨论】:

  • 大部分问题更适合crypto.stackexchange.com。您应该始终至少在问题中添加一个常见的标签,例如密码学,这个问题不为人知。

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


【解决方案1】:

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

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

虽然这不是一个代码审查网站,但您提供的代码似乎没有什么特别的问题。

【讨论】:

  • 关于预定义的命名曲线,我应该在运行时坚持一条还是从一组预定义的曲线中选择。本质上,“随机化”使用的曲线有什么好处吗? (特定交换中使用的曲线将在交换之前以明文形式传输给第二方,以便双方使用相同的曲线)
  • @CPUTerminator 不,这不会给您带来任何好处。实际上,如果其中任何一个被证明是弱的,你就会遇到问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-19
相关资源
最近更新 更多