Encryption Curve25519在ECDSA中的使用

Encryption Curve25519在ECDSA中的使用,encryption,signature,elliptic-curve,Encryption,Signature,Elliptic Curve,我目前正在调查使用curve25519进行签名。和a(和a) Bernstein建议对此使用ECDSA,但我找不到任何代码 ECDSA由ANSI X9.62规定。该标准定义了定义ECDSA的曲线类型,包括详细的曲线方程、关键点表示等。这些与Curve25519不匹配:使Curve25519比相同大小的标准曲线更快的部分优化依赖于特殊的曲线方程,该方程不包含在X9.62形式中。相应地,不存在既符合ANSI X9.62又使用Curve25519的ECDSA实现。实际上,我知道在Curve25519上

我目前正在调查使用curve25519进行签名。和a(和a)


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

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

简而言之,你只能靠自己。您可能希望通过遵循X9.62在Curve25519实现上实现ECDSA(有一份1998年的草案,可以从多个地方下载,例如,或者您可以花费100美元从购买2005年的正版)。但要注意的是,你正走在经过仔细分析的密码学的道路之外;换句话说,我明确否认任何关于ECDSA安全性的保证


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

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


由于您最需要的是快速验证,我推荐。

我最近分享了我不久前开发的curve25519库。它托管在,提供了比我测试过的任何其他portable-C库更多的功能、更高的安全性和更高的性能。它在64位平台上的性能比curve25519 donna高出近2倍,在32位目标上的性能比curve25519 donna高出近4倍。

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

非常感谢。我的目标是获得紧凑的签名,最好是快速验证。与此同时,我看到一些文章报道rsa签名的验证速度可能比ECDSA签名快5倍。这对于我的应用程序类型是有问题的,因为签名必须由消息中继服务器检查。NIST P-192有没有代码建议我可以使用和benchamrk?试试OpenSSL()。它既是一个库,也是一个命令行工具。命令行工具(包括在每一个像样的Linux版本中)有一个运行基准测试的“速度”选项。如果您想要快速验证,请使用Bernstein的基于Rabin的签名方案和概率验证——速度非常快。到目前为止,有一个名为Ed25519的签名方案在同一条曲线上工作,但在不同的表述中,这是否也适用于ECDH;i、 例如,在允许指定曲线的TLS等协议中,曲线25519可以用作自定义曲线吗?由于有人提出了这一问题,Bernstein开发了Ed25519作为使用该曲线进行签名的一种方法。