在ECDSA中使用Curve25519

时间:2010-03-25 13:38:30

标签: encryption signature elliptic-curve

我目前正在研究使用curve25519进行签名。 Original distributionC implementation(以及second C implementation)。

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

4 个答案:

答案 0 :(得分:12)

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

简而言之,你是独立的。您可能希望通过遵循X9.62实现ECDSA而不是Curve25519实现(1998年的草案可以从几个地方下载,例如there,或者您可以花费一百美元从中获取真正的2005版本Techstreet)。但请注意,您正走在经过仔细研究的密码学路径之外;换句话说,我明确否认了这种ECDSA的安全性。

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

答案 1 :(得分:9)

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

由于您最需要的是快速验证,我建议Bernstein's Rabin-Williams scheme

答案 2 :(得分:4)

我最近分享了我开发了一段时间的curve25519库。它托管在https://github.com/msotoodeh,提供了比我测试过的任何其他便携式C库更多的功能,更高的安全性和更高的性能。它在64位平台上的性能几乎是曲线25519-donna,在32位目标上几乎是4倍。

答案 3 :(得分:2)

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