乐趣区

关于区块链:理解Schnorr签名算法

在上一章中咱们谈到 WisdomChain 中应用的的聚合签名是应用 Schnorr 签名的各方生成的对各自密钥的签名聚合,那么明天咱们来理解下,Schnorr 签名算法的前世今生。

Schnorr 签名算法最后是由德国明码学家 ClausSchnorr 于 2008 年提出的,在密码学中,它是一种数字签名计划,以其简略高效著称,其安全性基于某些离散对数问题的难处感性。Schnorr 的原理形容如下:

上面用小写字母示意数字,比方:a=42。同时咱们将应用一些椭圆曲线 (ellipticcurve) 上的点。这些点是一些满足椭圆曲线方程的大数对。

咱们将用大写字母来示意这些点,比方:A=(4,68)。椭圆曲线上的点可进行一些代数运算。其上两个点能够相加能够失去近似随机的第三个点,示意为:C=A+B。某个点能够与本身相加屡次:D=C+C+C。

当咱们讲一个点与本身相加屡次时,咱们称其为“乘以一个数”:D=3 C。不言而喻的,如果将一个点 A 与本身相加很屡次(或者说将其乘以一个很大的数)而后失去一个点 B,如果咱们只是晓得原始点 A 和后果点 B,计算出与 A 相乘的这个大数是相当艰难的。这里的“艰难”意思是,如果要计算出这个“大数”,咱们不能简略的用 B 除以 A,只能一直的猜想一个值 x,计算是否 x A 等于 B。

所以如果这个 x 的值十分大,甚至大于宇宙中所有原子数目的和,猜想这个 x 的值将破费一个难以承受的工夫。同时如果某人持有正确的 x,计算 x * A 是十分迅速的。这种非对称性将作为咱们探讨的前提。

Alice 持有私钥 x,而后抉择一个随机数 r,以及椭圆曲线上的原点 G,计算出 R:=r G,公钥 X:=xG,应用哈希函数获取一个随机的用于验证的数字 e:=Hash(R,X,message),而后计算 s:=e*x+r。

Alice 给 Bob 发送点 R,X,message,和点数值 s,Bob 验证 s G 等于 R +e X。事实上,不仅是 Bob,这个世界上的任何人都能够单独对这一证实进行验证。一旦 s G=R+e X 通过了验证,既能够证实 Alice 持有私钥 x,并生成了一个非法的签名:(s,e)。

最终,如果要将签名从这一证实中发明进去,Alice 须要定制一个哈希函数来对她签名的音讯的进行哈希计算。这样的话须要确定针对一个音讯所计算出的签名,不能被复用给另外一个音讯。

这个定制过程能够简略的通过将 R,X 和签名信息进行哈希来做到:

e:=Hash(R,X,Message)

一个良好的哈希函数,会在哪怕仅有一个字符有更改的状况下,也会返回齐全不同的哈希值,使得计算出 s 的值是不可能的工作

Schnorr 签名协定的简洁形容如下:

基于此,开发者在将来能够增加更简单的概念,比方 WisdomChain 聚合签名。聚合签名劣势就在于将一笔交易中所有波及的输出只须要一个合并签名就能够实现,大大减少了数据处理量,使网络速度更快,更加高效。

退出移动版