在ECDSA中使用Curve25519

chm*_*ike 10 encryption signature elliptic-curve

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

伯恩斯坦建议使用ECDSA,但我找不到任何代码.

Tho*_*nin 13

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

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

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


Pau*_*ley 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方案.