目录
1. 算法简介
EdDSA签名算法由Schnorr签名发展变化而来,EdDSA也属于椭圆曲线密码学,不同的是它采用扭曲爱德华兹曲线(Twisted Edwards curves)作为椭圆曲线和不同于ECDSA算法的签名机制。根据曲线和参数的选择不同有Ed25519和Ed448等算法,它们分别基于curve25519和curve448等曲线。其中,由著名密码学家Daniel J.Bernstein等人设计实现的Ed25519算法,由于采用的曲线参数完全公开,并说明了曲线选取意义,保证曲线中未内置后门,具有运算速度快、密钥较短、安全性高等优点,使用得较多。
2. 算法原理
Ed25519公私钥生成与签名验证的方式如下:
2.1 公私钥生成
设Ed25519的私钥的长度为比特(一般取),选取生成元,为生成元的阶,使用输出长度为的哈希函数(一般选择),为待签名消息。
(1)随机选取一个长度为比特的二进制数作为私钥;
(2)计算的哈希值,产生一个长度为比特的值,取的前比特(二进制表示)记为,并置、、为0,置为1,将置位后的结果作为,将的后比特作为;
(3)计算公钥。
2.2 签名流程
签名时,需要持有私钥,执行公钥生成算法后得到公钥和参数,具体步骤如下:
(1)计算哈希值;
(2)计算倍点;
(3)计算,得到数字签名。
2.3 验证流程
验证签名时,验证者只需知道公钥、签名和消息,验证方式如下:
(1)计算倍点;
(2)计算;
(3)判断是否等于,相等则验证通过,否则验证不通过。
3.总结
EdDSA算法使用相同的私钥对同一待签名消息进行签名,得到的签名信息是固定的,也就是说EdDSA是一种确定性的签名算法,不同于SM2和ECDSA算法每次签名都会因使用的随机数不同而变化,EdDSA的安全性不依赖于随机数生成器。
4. 参考资料
[1]高承实,王永娟,于刚. 区块链中的密码技术[M]. 浙江大学出版社: 2021. 86-87.
[2]RFC 8032 - Edwards-Curve Digital Signature Algorithm (EdDSA) (ietf.org).