26

区块链中的数学 - Ed25519签名机制

 3 years ago
source link: https://learnblockchain.cn/article/1663
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Ed25519使用了扭曲爱德华曲线,签名过程和之前介绍过的Schnorr,secp256k1, sm2都不一样,最大的区别在于没有使用随机数,这样产生的签名结果是确定性的,即每次对同一消息签名结果相同。

写在前面

上一节说了 蒙哥马利曲线&Curve25519实例 ,如果仔细看,会发现其中两点之和的几何意义与Weierstrass曲线完全一样,实际上蒙哥马利曲线是Weierstrass曲线族的一员。 何以见得?Weierstrass曲线的射影方程是

7rmEVfJ.jpg!mobile

考虑到平面上方程,Z坐标隐去,得到:

Qzy2um2.jpg!mobile

所以蒙哥马利方程是其中的一个实例:$a_1=0,a_3=0,a_6=0$ 说到这,大家对椭圆曲线的范围应该有了新的理解。

有了这些基础,本节说下与蒙哥马利曲线和Curve25519相关联的Ed25519签名机制。

Ed25519

Ed25519是基于Edwards曲线的数字签名算法(EdDSA),结合 SHA-512/256哈希算法,采用扭曲爱德华曲线:

7raMvaB.jpg!mobile

系数a = -1, $d= -\frac{121655}{121656}$. 比现有的数字签名方案更快,且不损失安全性。 具体参数如下: $q =2^{255} − 19$ B: 基点, y坐标为4/5,x坐标为9 H:SHA-512 b = 256 【注:如果H使用SHA-256则b=128】 l: 群的阶,值为$ 2^{252} + 27742317777372353535851937790883648493$,

密钥生成

私钥:如同之前一样,使用随机数发生器生成随机数k作为私钥。 公钥: (1)计算私钥摘要: $H(k) =(h_0,h_1,...,h_{2b-1})$ (2)计算整数:

eAZjM3i.jpg!mobile

(3)公钥生成:A = aB

先看一下具体签名过程再来分析其效率和安全性。

签名与验证

签名生成

M:待签名消息

  1. 计算$r = H(h_b,...,h_{2b-1},M) ∈ { 0, 1, . . . , 2^{2b}− 1}$
  2. 计算R = rB
  3. 计算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签名算法更多内容!

欢迎关注公众号:blocksight

相关阅读:

区块链中的数学-蒙哥马利曲线&Curve25519实例

区块链中的数学-扭曲爱德华曲线

区块链中的数学-迪菲-赫尔曼密钥交换D-H

区块链中的数学-爱德华曲线基本方程和点运算规则

区块链中的数学-RSA签名和安全分析-计时攻击

区块链中的数学 - 基于椭圆曲线的VRF证明验证过程

区块链中的数学-Schnorr签名及Schnorr群

区块链中的数学 - Uniwap核心算法解析(中)

写在前面

上一节说了 蒙哥马利曲线&Curve25519实例 ,如果仔细看,会发现其中两点之和的几何意义与Weierstrass曲线完全一样,实际上蒙哥马利曲线是Weierstrass曲线族的一员。 何以见得?Weierstrass曲线的射影方程是

7rmEVfJ.jpg!mobile

考虑到平面上方程,Z坐标隐去,得到:

Qzy2um2.jpg!mobile

所以蒙哥马利方程是其中的一个实例:$a_1=0,a_3=0,a_6=0$ 说到这,大家对椭圆曲线的范围应该有了新的理解。

有了这些基础,本节说下与蒙哥马利曲线和Curve25519相关联的Ed25519签名机制。

Ed25519

Ed25519是基于Edwards曲线的数字签名算法(EdDSA),结合 SHA-512/256哈希算法,采用扭曲爱德华曲线:

7raMvaB.jpg!mobile

系数a = -1, $d= -\frac{121655}{121656}$. 比现有的数字签名方案更快,且不损失安全性。 具体参数如下: $q =2^{255} − 19$ B: 基点, y坐标为4/5,x坐标为9 H:SHA-512 b = 256 【注:如果H使用SHA-256则b=128】 l: 群的阶,值为$ 2^{252} + 27742317777372353535851937790883648493$,

密钥生成

私钥:如同之前一样,使用随机数发生器生成随机数k作为私钥。 公钥: (1)计算私钥摘要: $H(k) =(h_0,h 1,...,h {2b-1})$ (2)计算整数:

eAZjM3i.jpg!mobile

(3)公钥生成:A = aB

先看一下具体签名过程再来分析其效率和安全性。

签名与验证

签名生成

M:待签名消息

  1. 计算$r = H(h b,...,h {2b-1},M) ∈ { 0, 1, . . . , 2^{2b}− 1}$
  2. 计算R = rB
  3. 计算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签名算法更多内容!

欢迎关注公众号:blocksight

相关阅读:

区块链中的数学-蒙哥马利曲线&Curve25519实例

区块链中的数学-扭曲爱德华曲线

区块链中的数学-迪菲-赫尔曼密钥交换D-H

区块链中的数学-爱德华曲线基本方程和点运算规则

区块链中的数学-RSA签名和安全分析-计时攻击

区块链中的数学 - 基于椭圆曲线的VRF证明验证过程

区块链中的数学-Schnorr签名及Schnorr群

区块链中的数学 - Uniwap核心算法解析(中)

本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

  • 发表于 13小时前
  • 阅读 ( 5 )
  • 学分 ( 0 )
  • 分类:入门/理论

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK