环签名——精选推荐
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
环签名
在密码学中,环形签名是⼀种数字签名,可以由⼀组⽤户中的任何成员执⾏,每个⽤户都有密钥。
因此,⼀个带有环签名的消息是由特定⼈群中的某个⼈背书的。
环签名的安全特性之⼀是,不能通过计算确定哪个组成员的密钥才是签名。
例如,环签名可以⽤来提供⼀种来⾃“⽩宫⾼级官员”的匿名签名,⽽不透露是哪位官员签署了这条信息。
环签名适合这个应⽤,因为环签名的匿名性不能被撤销,⽽且⼀个环签名的是可以临时组成的(不需要预先设置)。
以上信息来⾃百科
环签名的任务
环签名所要达成的⽬标是:在签名过程中将与私钥相关的信息隐藏在众多公钥之中。
环签名的可⽤性
在签名过程中,每个公钥都对应这⼀个随机数(随机数会参与计算),⽽签名者由于拥有⾃⼰的私钥,所以可以计算出⼀个能够使的环闭合的那个特定的数(之后会放在随机数⾥),我们⽆法在⼀堆随机数⾥找到这个特定的数,也就是说⽆法确定是谁的私钥参与了计算。
但是可以确定这个签名⼀定是⾄少拥有这众多公钥之中某⼀个对应的私钥,不然是⽆法使环闭合。
这就可以保证⼀定是环中的某个成员所签名认证的。
利⽤众多的公钥依次对消息进⾏加密(其中掺杂这随机数,随机数与公钥存在⼀⼀对应关系)
环签名的特性
除了上⾯所说的匿名性以外,环签名的另⼀特点是签名者在完成签名之后⽆法证明改环签名是由⾃⼰所签。
因为在随机数列表中他⽆法证明那个特定的随机数是签名者⾃⼰产⽣的,实际上每个拥有对应私钥的⼈都可以说某个随机数是他产⽣的。
也都可以说是其他⼈产⽣的,因为从⼀个环的任意⼀点截断所得到的绳⼦⼀定是⼀样的。
通过现实案例解释环签名
例如你们需要实名举报你们某个⼈,但是谁都不想在这个签名纸上第⼀个签下⾃⼰的姓名(这相当与发起⼈),这时你提议所有⼈以某个点为圆形,在⼀定的半径上签名,在所有⼈都签完之后形成⼀个完整的环,这样也就⽆法确认这个环的⾸部在哪⾥。
当然这个案例所讲述的知识环签名的作⽤,在实际操作上与上述实例还是有很⼤的不同。
环签名的⼀种实现(利⽤各个公钥的加密算法)
签名者需要拥有:多个他⼈的公钥{P0,P1,P2.......Pn}注意这⾥的他⼈有n+1个,以及对应的加密算法Gi,⾃⾝的公私钥对
签名者⾸先计算待签名的哈希值⽤作签名,记做H
签名者为每个公钥产⽣⼀个对应的R,及产⽣{R0,R1,R2.......Rn}
签名者产⽣⼀个随机数V0,⽤做⾸次计算
签名者利⽤他⼈的公钥将Ri加密产⽣对应的Y,记做{Y0,Y1,Y2,Y3.....Yn}
依次计算V1=V0^Y0+H........最后的到V(n+1):这⼀步已经利⽤晚所有的公钥(这⾥本来是连续亦或,后来发现连续亦或有可能导致H被抵消掉)
现在已经形成⼀个链,如果V0和最后⼀个V相等则会形成⼀个环(现在是不等的)
于是我们可以计算出那个使环闭合的Y,V0=V(n+1)^Y^H,这⾥V0,V(n+1),H都已知可以得到这个Y
也就是说只要我有⼀个特定的R,使得⽤我的公钥加密后的结果为Y,那么这个R就会使环闭合
所以这⾥就到了签名最关键的⼀步,在已知Y的情况下,签名者⽤⾃⼰的私钥很容易就可以计算出这个特定的R,因为这个Y是⽤签名者⾃⼰的公钥计算出的。
将签名者的私钥放在listP的尾部,R放在listR的尾部
这⾥由于会暴露签名者在这个公钥链表的尾部,所以还不急着把V放进去,在已知这是⼀个环的情况下我们只需要将这个环随机的转动⼀下,也就是对listP,listR进⾏⼀个循环移位,然后将对应的V选取出来得到这个签名S(listP,listR,V)
上述签名的可⽤性原理
要说明这个签名的可⽤性主要是要证明这个签名⼀定是由公钥中的某个⼈所签的,他⼈可以验证的到这个签名是正确的
⾸先在上述签名过程中使环闭合的那个数是由签名者私钥计算得出的,也就是说签名者⾄少拥有listP中某⼀个或多个公钥所对应的私钥,这也就说明了签名⼀定来⾃与listP中的某个⼈,在listP之外的⼈是⽆法伪造签名的。
验证⼈只需要计算⽂件的hash然后利⽤计算出的H验证这个V成环。
先预约⼀下下次更新:go或者python实现环签名(实际上我已经⽤go⼤概实现了原理,但是go语⾔⾃带的rsa库中不能⽤私钥解密⼀个随机的数据,他还会验证数据是否可⽤,就是败在最关键的⼀步) ,最迟下周6更新。