当前位置:首页 > 知识 >

区块链推广|深入了解Schnorr签名

在上一章中,我们讨论了WisdomChain中使用的聚合签名,它是由使用Schnorr签名的各方生成的对各自密钥的签名的聚合。今天我们来了解一下Schnorr签名算法的起源和原理。

Schnorr签名算法最初是由德国密码学家Claus Schnorr于2008年提出的。在密码学中,它是一种数字签名方案,以其简单高效而闻名,其安全性基于某些离散对数问题的难处理性。Schnorr的原理如下所述:

通过小写字母表示数字,比如:a=42。同时,我们使用一些椭圆曲线上的点。这些点是满足椭圆曲线方程的大数对。

用大写字母表示这些点,比如: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=x×G,使用哈希函数获取一个用于验证的随机数字e=Hash(R,X,message),然后计算s=e×x+r。

Alice将点R、X、message以及点数值s发送给Bob,Bob验证s×G等于R+e×X。实际上,不仅Bob,任何人都可以独立验证这个证明。一旦s×G=R+e×X通过验证,就可以证明Alice持有私钥x,并生成了一个合法的签名:(s,e)。

最终,如果要从这个证明中生成签名,Alice需要定制一个哈希函数来对她签名的消息进行哈希计算。这样可以确保计算出的签名针对某个消息,不能被复用给另一个消息。

这个定制的过程可以简单地通过对R、X和签名信息进行哈希来完成。

一个良好的哈希函数,即使只有一个字符有所改变,也会返回完全不同的哈希值,使得计算出s的值是不可能的任务。

Schnorr签名协议的简洁描述如下:

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

猜你喜欢

微信二维码

微信