【问题标题】:What Elliptical Curve support exists in .NET? Can I define my own curves, or replicate SEC standards?.NET 中存在哪些椭圆曲线支持?我可以定义自己的曲线,或复制 SEC 标准吗?
【发布时间】:2013-10-26 14:05:35
【问题描述】:

.NET 中的 Microsoft 椭圆曲线支持有哪些限制?我仅指 System.Cryptography 命名空间的可能性。

使用该命名空间,我是否可以实现自定义曲线,还是仅限于框架中硬编码的不同子集?

我特别感兴趣的一条曲线是 secp256k1,但我不想局限于此。

为什么我不使用 Bouncy Castle,而只关注 Microsoft?原因是因为微软实现的 Hash 函数比 Bouncy Castle 快很多倍,所以我认为是基于自定义椭圆曲线的加密。

我不介意是否需要更新注册表或 ini 文件以添加对其他曲线的支持,或构建低级类;我只是想看看有哪些可能性和限制。

【问题讨论】:

  • @weston 我已经看到了那个链接,以及它所引用的 C# 代码。不,它只显示了 Bouncy Castle 的实现...我有兴趣使用仅限 Microsoft 的库来实现 EC
  • @makerofthings7:如果只有 MS 的东西真的值得一试,为什么很难找到围绕第三方的示例图书馆?
  • @cHao 因为涉及第三方库的现有示例并不总是能说明问题的全部。恰当的例子:Java 中的默认加密提供程序将 AES 密钥大小限制为 128 位。对于需要 256 位密钥的人来说,直接的答案是使用 Bouncy Castle 提供程序。由于许多原因,安装一个复制标准功能的额外 2MB 库并不是最理想的,但似乎没有人有更好的解决方案。最终,经过几个月(断断续续)的研究,我设法在不涉及第三方库的情况下解决了这个问题:stackoverflow.com/a/18437016/2424896

标签: c# .net cryptography logarithm bitcoin


【解决方案1】:

.NET 唯一支持的曲线是(并且一直是)由 NIST 在 Suite B 中定义的 P-xxx 曲线。任何其他曲线均不受开箱即用的支持。您定义了一条特定的非 NIST 非素数曲线(Koblitz 曲线),因此 CNG 不支持该曲线。

更准确地说,CNG only supports the following domain parameters 用于 ECDSA 和 ECDH 密钥。这些参数也仅在用于“命名曲线”时才受支持:

P-256、P-384、P-521

注意:由于我没有与 Microsoft 签订 NDA 或类似协议,因此我无法检查这些值是否是硬编码的,但我认为这很有可能。

【讨论】:

  • 所有推荐的曲线都被 NSA “后门”了。不要使用它们。
  • @RedHotScalability 不要传播 FUD。没有人找到一种方法来查看如何利用当前参数。随机数生成有点可疑,所以最好使用safe curve。我们唯一可以确定会被后门访问的是 Dual EC 随机数生成器
猜你喜欢
  • 2021-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-17
  • 1970-01-01
相关资源
最近更新 更多