- Ed25519 算法
- 基础
- 圆曲线签名算法 ECDSA
- EdDSA (Edwards-curve Digital Signature Algorithm)
- 什么Ed25519
- ed25519开源实现
- 使用 Ed25519 算法生成你的 SSH 密钥
椭圆曲线数字签名算法(ECDSA)是使用椭圆曲线密码(ECC)对数字签名算法(DSA)的模拟。ECDSA于1999年成为ANSI标准,并于2000年成为IEEE和NIST标准。
数字签名算法(DSA)在联邦信息处理标准FIPS中有详细论述,称为数字签名标准。它的安全性基于素域上的离散对数问题。椭圆曲线密码(ECC)由Neal Koblitz和Victor Miller于1985年发明。它可以看作是椭圆曲线对先前基于离散对数问题(DLP)的密码系统的模拟,只是群元素由素域中的元素数换为有限域上的椭圆曲线上的点。
ECDSA是椭圆曲线签名算法的简称,本质上是DSA(数字签名算法)的变种,它使用的是特定的、椭圆曲线加密技术。这种形式的密码学围绕着有限域上代数结构的椭圆曲线展开。
平常我们见的比较多的应该是ECDSA签名,比如比特币使用的基于曲线secp256k1的ECDSA签名
目前主流的签名机制是基于secp256r1或者secp256k1曲线的ECDSA签名机制,而应用ECDSA签名机制时,稍有不慎就会引发各种安全问题。
美国国安局发布的曲线其实是 secp256k1。
不过NIST P-256曲线,也就是secp256r1,因为默认使用的Dual_EC_DRBG随机数生成器一直被怀疑存在NSA隐藏的后门,到了13年斯诺登的曝光更是将这件事推上了风口浪尖,所以大家也就失去了对这一算法的信任,所以当年比特币选择了比较小众的secp256k1曲线还是有自己的考量。
熟悉ECDSA签名的朋友应该也都知道ECDSA签名算法的安全性是比较依赖于安全的随机数生成算法的,如果随机数算法存在问题,使用了相同的k进行签名,那么攻击者是可以根据签名信息恢复私钥的,历史上也出过几次这样的事故,比如10年索尼的PS3私钥遭破解以及12年受java某随机数生成库的影响造成的比特币被盗事件,所以说ECDSA签名在设计上还是存在一些问题的, 这也激励了新的EdDSA算法的出现。
EdDSA (Edwards-curve Digital Signature Algorithm)EdDSA 签名机制是 Bernstein 等人在 2012 年设计的基于爱德华曲线 (Edwards Curves) 的数字签名算法. EdDSA 签名机制是 Schnorr 签名机制的一个变种, 其设计初衷是在不牺牲安全性的前提下提升签名/验签速 度, 并同时解决前述的 ECDSA 在应用方面存在的一些问题。
EdDSA签名算法由Schnorr签名发展变化而来,可以在RFC8032中看到它的定义实现,由曲线和参数的选择不同又可以划分为Ed25519和Ed448算法,他们的分别是基于curve25519还是curve448曲线,一般用的比较多的是Ed25519算法,相比Ed448而言运算速度要更快,秘钥与签名空间也较小。
总结: 在公钥密码学中,爱德华兹曲线数字签名算法( EdDSA ) 是一种数字签名方案,它使用基于扭曲爱德华兹曲线的Schnorr 签名变体。它被设计为比现有的数字签名方案更快而不牺牲安全性。
什么Ed25519ed25519数字签名系统:https://ed25519.cr.yp.to/
数字签名机制 - ED25519
参考URL: https://master–eager-lamarr-59a89f.netlify.app/2018/12/28/cryptography/ed25519/
深入理解Ed25519: 蒙哥马利与扭曲爱德华曲线
参考URL: https://zhuanlan.zhihu.com/p/76783431
Ed25519的目标是在保证安全的前提下,提升性能。
和ECDSA 类似,EdDSA(Edwards-Curve Digital Signature Algorithm,爱德华兹曲线数字签名算法)也属于椭圆曲线密码;和ECDSA不同的是,EdDSA采用了不同的椭圆曲线和签名算法。
EdDSA 采用了Twisted Edwards曲线作为椭圆曲线,签名算法采用了Schnorr算法作为签名的生成和验证。
Ed25519是一种EdDSA的实现 ,由 Daniel J. Bernstein 等人设计,采用的曲线参数完全公开,并说明了参数选取的意义,保证曲线中并未内置后门。
在 ED25519 的算法设计中,通过使用密码学哈希函数来代替伪随机数发生器,避免了签名算法的使用者因为采用的随机数生成器不够随机化而产生的安全问题。ED25519 的实现除去私钥的生成之外,签名过程已经完全脱离对随机数发生器的依赖,避免了因为随机化问题而导致密钥的泄露与安全性问题。
Ed25519使用了扭曲爱德华曲线,签名过程和Schnorr,secp256k1, sm2都不一样,最大的区别在于没有使用随机数,这样产生的签名结果是确定性的,即每次对同一消息签名结果相同。
Ed25519 从某种意义上来说也属于椭圆曲线密码学,不同的是它采用扭曲爱德华兹曲线作为椭圆曲线,同时采用的签名机制也不同于 ECDSA 算法。
[推荐阅读](high-speed high-security signatures)
ed25519开源实现Rust实现的快速有效的ed25519签名和验签。
Ed25519实现
Go实现版本
C实现版本
libsodium 是c写的,现代,便携式,易于使用的加密库。Sodium是一个新的,易于使用的软件库,用于加密,解密,签名,密码哈希等。
python版本
python库-密码学库pynacl,PyNaCl 是 libsodium C库绑定封装。
使用 Ed25519 算法生成你的 SSH 密钥
参考URL: https://zhuanlan.zhihu.com/p/110413836
用过ssh的朋友都知道,ssh key的类型有很多种,比如dsa、rsa、 ecdsa、ed25519等,那这么多种类型,我们要如何选择呢?
rsa是目前兼容性最好的,应用最广泛的key类型,在用ssh-keygen工具生成key的时候,默认使用的也是这种类型。不过在生成key时,如果指定的key size太小的话,也是有安全问题的。
Ed25519 的安全性在 RSA 2048 与 RSA 4096 之间,且性能在数十倍以上。
ed25519是目前最安全、加解密速度最快的key类型,由于其数学特性,它的key的长度比rsa小很多,优先推荐使用。
只要你的服务器上 OpenSSH 版本大于 6.5(2014 年的古早版本),就可以利用 Ed25519 算法生成的密钥对,减少你的登录时间。如果你使用 SSH 访问 Git,那么就更值得一试。



