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的聚合签名。聚合签名的优势在于,一个交易中涉及的所有输入只需要一个合并签名就可以完成,大大减少了数据处理量,使网络速度更快、更高效。
本站所有软件信息均由用户上传发布,版权归原著所有。如有侵权/违规内容,敬请来信告知邮箱:764327034@qq.com,我们将及时撤销! 转载请注明出处:https://czxurui.com/zx/40948.html
发表回复
评论列表(0条)