区块链中的数学(四十九)
写在前面
上一节说了蒙哥马利曲线&Curve25519实例,如果仔细看,会发现其中两点之和的几何意义与Weierstrass曲线完全一样,实际上蒙哥马利曲线是Weierstrass曲线族的一员。
何以见得?Weierstrass曲线的射影方程是
考虑到平面上方程,Z坐标隐去,得到:
所以蒙哥马利方程是其中的一个实例:, 说到这,大家对椭圆曲线的范围应该有了新的理解。
有了这些基础,本节说下与蒙哥马利曲线和Curve25519相关联的Ed25519签名机制。
Ed25519
Ed25519是基于Edwards曲线的数字签名算法(EdDSA),结合 SHA-512/256哈希算法,采用扭曲爱德华曲线:
系数a = -1, d= -. 比现有的数字签名方案更快,且不损失安全性。
具体参数如下:
q = − 19
B: 基点, y坐标为4/5,x坐标为9
H:SHA-512
b = 256 【注:如果H使用SHA-256则b=128】
l: 群的阶,值为 + 27742317777372353535851937790883648493,
密钥生成
私钥:如同之前一样,使用随机数发生器生成随机数k作为私钥。
公钥:
(1)计算私钥摘要:
H(k) =
(2)计算整数:
(3)公钥生成:A = aB
先看一下具体签名过程再来分析其效率和安全性。
签名与验证
签名生成
M:待签名消息
计算r = H ∈ { 0, 1, . . . , − 1}
计算R = rB
计算S = (r + H(R,A,M)a) mod l 【注:l是群的阶】
得到签名结果(R,S)
签名验证
验证过程很简单:
只需要验证 8SB = 8R+8H(R,A,M)A 是否成立。
原理如下:
8SB = 8(r + H(R,A,M)a)B = 8rB + 8H(R,A,M)aB = 8R + 8H(R,A,M)A
小结
Ed25519使用了扭曲爱德华曲线,签名过程和之前介绍过的Schnorr,secp256k1, sm2都不一样,最大的区别在于没有使用随机数,这样产生的签名结果是确定性的,即每次对同一消息签名结果相同。
一般说来随机数是安全措施中重要的一种方法,但是随机数的产生也是安全隐患,著名的索尼公司产品PS3密钥泄露事件,就是随机数产生的问题导致的。如果你对之前绍过的Schnorr,secp256k1,sm2等签名过程比较熟的的话,就容易理解如果在签名过程中出现了这个相同的随机数r,那么私钥将很容易被计算出来,造成泄露。
这种事情发生过不止一次,包括以太坊出现类似的问题,感兴趣的可以自行搜索,有时间的话专门写写这个问题。
另外我们说Ed25519与蒙哥马利曲线Curve25519相关联,到底是什么关系呢?
好了,下一篇继续说Ed25519签名算法更多内容!
欢迎关注&在看, 疑问请留言!
相关阅读:
区块链中的数学(四十八) 蒙哥马利曲线&Curve25519实例
区块链中的数学(四十七) 扭曲爱德华曲线
区块链中的数学(七) 迪菲-赫尔曼密钥交换D-H
区块链中的数学(四十六) 爱德华曲线基本方程和点运算规则
区块链中的数学(十六) RSA签名和安全分析-计时攻击
区块链中的数学(四十四) 基于椭圆曲线的VRF证明验证过程
区块链中的数学(二十二) Schnorr签名及Schnorr群
区块链中的数学(四十) 目录整理,快速发现你感兴趣的内容!
区块链中的数学(三十七) Uniwap核心算法解析(中)