10

我目前正在研究使用 curve25519 进行签名。原始发行版C 实现(以及第二个 C 实现)。

Bernstein 建议为此使用 ECDSA,但我找不到任何代码。

4

4 回答 4

13

ECDSA 由 ANSI X9.62 指定。该标准定义了定义 ECDSA 的曲线类型,包括详细曲线方程、关键表示等。这些与 Curve25519 不匹配:使 Curve25519 比相同大小的标准曲线更快的部分优化依赖于特殊曲线方程,该方程不包含在 X9.62 形式中。相应地,ECDSA 不可能有任何既符合 ANSI X9.62 又使用 Curve25519 的实现。在实践中,我知道在 Curve25519 上没有实现类似 ECDSA 的算法。

简而言之,你是一个人。您可能希望通过遵循 X9.62 在 Curve25519 实现上实现 ECDSA(有一个 1998 年的草案,可以从多个地方下载,例如那里,或者您可以花一百美元从Techstreet获得真正的 2005 版本)。但请注意,您正在走在经过仔细分析的密码学路径之外;换句话说,我明确否认对这种 ECDSA 的安全性有任何保证。

我的建议是坚持标准曲线(例如 NIST P-256)。请注意,虽然 Curve25519 比大多数相同大小的曲线更快,但较小的标准曲线会更快,并且为大多数用途提供足够的安全性。例如,NIST P-192 提供“96 位安全性”,有点类似于 1536 位 RSA。此外,标准曲线已经在小型 PC 上提供了每秒数千个签名数量级的性能,我无法想象需要更高性能的场景。

于 2010-03-25T15:51:08.647 回答
9

要为此使用 Curve25519,您必须实现许多 AFAIK 目前尚未在该曲线的任何地方实现的功能,这意味着非常深入地研究椭圆曲线密码学的数学。原因是现有函数抛弃了点的“y”坐​​标,只使用“x”坐标。如果没有“y”坐标,点 P 和 -P 看起来是一样的。这对于 Curve25519 设计的 ECDH 来说很好,因为 |x(yG)| = |x(-yG)|。但是对于 ECDSA,您需要计算 aG + bP 和 |aG + bP| 一般不等于|aG - bP|。我研究了扩展curve25519-donna以支持此类计算所涉及的内容;这是可行的,但远非微不足道。

由于您最需要的是快速验证,因此我推荐Bernstein 的 Rabin-Williams 方案

于 2011-06-02T10:06:09.653 回答
4

我最近分享了我不久前开发的curve25519 库。它托管在https://github.com/msotodeh,与我测试过的任何其他可移植 C 库相比,它提供了更多的功能、更高的安全性和更高的性能。它在 64 位平台上的性能比 curve25519-donna 高出近 2 倍,在 32 位目标上几乎高出 4 倍。

于 2015-03-17T01:05:10.123 回答
2

在问这个问题多年后的今天,正确答案是签名方案Ed25519

于 2017-11-18T20:07:40.293 回答