围炉网

一行代码,一篇日志,一个梦想,一个世界

EdDSA签名机制(爱德华签名机制)学习纪要

  • EdDSA历史来源

    • 爱德华曲线族的研究比较晚,在爱德华数字签名机制出现之前,已经有了椭圆曲线签名 EcDSA 机制。基于 Weierstrass 曲线, 代表性的是 secp256r1 和 secp256k1,前者就是 NIST P256 椭圆曲线算法。

    • EdDSA签名算法由Schnorr签名发展变化而来,可以在RFC8032中看到它的定义实现,由曲线和参数的选择不同又可以划分为Ed25519和Ed448算法,顾命思义,它们两分别是基于curve25519和curve448曲线,一般用的比较多的是Ed25519算法,相比Ed448而言运算速度要更快,秘钥与签名空间也较小,二者的使用场景还是有点区别

    • Ed25519所使用的曲线由curve25519变换而来,curve25519是蒙哥马利曲线,经过变换得到Ed25519使用的扭爱德华曲线edwards25519,curve25519曲线的安全性是非常高的,可以在safecurves查看各椭圆曲线的安全指标,curve25519是其中为数不多所有指标都达标的曲线,curve25519常用于密钥交换的DH算法

  • EdDSA 可以克服传统的 EcDSA 的一些不足:

    • 签名过程中不安全的使用随机数【包括安全的随机数发生器实现的困难性与程序员正确使用随机数的困难性】,可能导致密钥泄露

      • 随机数对Schnorr与ECDSA签名的影响

        • Schnorr 与 ECDSA 签名过程中,都是用了随机数,潜在的安全隐患是:如果任意两次签名不幸使用了相同的随机值 k,则会暴露出私钥。

    • ECDSA 签名的可锻造性

    • 签名伪造:如果不需要提供签名消息, 可以根据已有签名值伪造对应私钥的签名值(Schnorr 签名算法对伪签名是免疫的)

  • EdDSA 签名机制优点

    • 实现上做了优化,可在多种计算平台上都能达到较高的性能;

      • EdDSA的运算速度也比ECDSA算法要快很多,优势可以说是非常明显的,门罗币和zcash等加密货币已经将算法切换到了EdDSA了,目前其也被确认为下一代椭圆曲线算法

    • 签名过程中不需要唯一的随机数,能够避免随机数引发的安全问题;

      • EdDSA是一种确定性的签名算法,不像ECDSA那样每次签名都根据选取的随机送的变化而不同,所以EdDSA的安全性也就不再依赖于随机数生成器

    • 无分支和秘密数据索引操作,对于侧信道攻击等具有更好的免疫效果;

    • 公钥和签名值都较小 (Ed25519 公钥为 32 个字节, 签名值为 64 字节),【注:这一点其实不明显,和 secp256r1 和 secp256k1 一样】

    • 计算公式是完备 (Complete), 无需对不相信的点执行点的验证操作;

    • 抵抗碰撞, 弱哈希函数的碰撞不会破坏签名机制 (PureEdDSA).

  • 比特币为什么没有采用?

    • 因为出现时间较晚!后来的一些区块链项目开始采用,包括 Stellar、Near Protocol 等。

  • EdDSA缺点

    • EdDSA也并不完美,由于EdDSA签名的特点:对于同一消息M,不论你对它签名多少次,得到的签名结果都是相同的。fault attack正是针对这一特性进行攻击。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

沪ICP备15009335号-2