理解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签名协议的简洁描述如下:

理解Schnorr签名算法_第1张图片

基于此,开发者在未来可以添加更复杂的概念,比如WisdomChain聚合签名。聚合签名优势就在于将一笔交易中所有涉及的输入只需要一个合并签名就可以完成,大大减少了数据处理量,使网络速度更快,更加高效。

你可能感兴趣的:(区块链)