EdDSA数字签名算法

目录

1. 算法简介

2. 算法原理

2.1 公私钥生成

2.2 签名流程

2.3 验证流程

3.总结

4. 参考资料


1. 算法简介

        EdDSA签名算法由Schnorr签名发展变化而来,EdDSA也属于椭圆曲线密码学,不同的是它采用扭曲爱德华兹曲线(Twisted Edwards curves)作为椭圆曲线和不同于ECDSA算法的签名机制。根据曲线和参数的选择不同有Ed25519和Ed448等算法,它们分别基于curve25519和curve448等曲线。其中,由著名密码学家Daniel J.Bernstein等人设计实现的Ed25519算法,由于采用的曲线参数完全公开,并说明了曲线选取意义,保证曲线中未内置后门,具有运算速度快、密钥较短、安全性高等优点,使用得较多。

2. 算法原理

        Ed25519公私钥生成与签名验证的方式如下:

2.1 公私钥生成

        设Ed25519的私钥d_{A}的长度为l比特(一般取l=256),选取生成元Gn为生成元G的阶,使用输出长度为2l的哈希函数(一般选择SHA-512),M为待签名消息。

        (1)随机选取一个长度为l比特的二进制数作为私钥s

        (2)计算d_{A}的哈希值,产生一个长度为2l比特的值H\left ( d_{A} \right ),取H\left ( d_{A} \right )的前l比特(二进制表示)记为h,并置h_{0}h_{1}h_{l-1}为0,置h_{l-2}为1,将置位后的结果作为x,将H\left ( d_{A} \right )的后l比特作为y

        (3)计算公钥P_{A}=\left [x \right ]G

2.2 签名流程

        签名时,需要持有私钥d_{A},执行公钥生成算法后得到公钥P_{A}和参数y,具体步骤如下:

        (1)计算哈希值r=H\left ( y,M \right )

        (2)计算倍点R=\left [ r \right ]G

        (3)计算s=\left ( r+H\left ( R,P_{A},M \right )x \right )\,mod\,n,得到数字签名\left ( R,s \right )

2.3 验证流程

        验证签名时,验证者只需知道公钥P_{A}、签名\left ( R,s \right )和消息M,验证方式如下:

        (1)计算倍点\left [s \right ]G

        (2)计算R+H\left ( R,P_{A},M \right )P_{A}

        (3)判断\left [s \right ]G是否等于R+H\left ( R,P_{A},M \right )P_{A},相等则验证通过,否则验证不通过。

3.总结

        EdDSA算法使用相同的私钥d_{A}对同一待签名消息M进行签名,得到的签名信息\left ( R,s \right )是固定的,也就是说EdDSA是一种确定性的签名算法,不同于SM2和ECDSA算法每次签名都会因使用的随机数不同而变化,EdDSA的安全性不依赖于随机数生成器。

4. 参考资料

[1]高承实,王永娟,于刚. 区块链中的密码技术[M]. 浙江大学出版社: 2021. 86-87.

[2]RFC 8032 - Edwards-Curve Digital Signature Algorithm (EdDSA) (ietf.org).

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值