在密码学中,环形签名是一种数字签名,可以由一组用户中的任何成员执行,每个用户都有密钥。因此,一个带有环签名的消息是由特定人群中的某个人背书的。环签名的安全特性之一是,不能通过计算确定哪个组成员的密钥才是签名。
例如,环签名可以用来提供一种来自“白宫高级官员”的匿名签名,而不透露是哪位官员签署了这条信息。环签名适合这个应用,因为环签名的匿名性不能被撤销,而且一个环签名的是可以临时组成的(不需要预先设置)。
以上信息来自百科
环签名所要达成的目标是:在签名过程中将与私钥相关的信息隐藏在众多公钥之中。
在签名过程中,每个公钥都对应这一个随机数(随机数会参与计算),而签名者由于拥有自己的私钥,所以可以计算出一个能够使的环闭合的那个特定的数(之后会放在随机数里),我们无法在一堆随机数里找到这个特定的数,也就是说无法确定是谁的私钥参与了计算。但是可以确定这个签名一定是至少拥有这众多公钥之中某一个对应的私钥,不然是无法使环闭合。这就可以保证一定是环中的某个成员所签名认证的。
利用众多的公钥依次对消息进行加密(其中掺杂这随机数,随机数与公钥存在一一对应关系)
除了上面所说的匿名性以外,环签名的另一特点是签名者在完成签名之后无法证明改环签名是由自己所签。
因为在随机数列表中他无法证明那个特定的随机数是签名者自己产生的,实际上每个拥有对应私钥的人都可以说某个随机数是他产生的。也都可以说是其他人产生的,因为从一个环的任意一点截断所得到的绳子一定是一样的。
例如你们需要实名举报你们某个人,但是谁都不想在这个签名纸上第一个签下自己的姓名(这相当与发起人),这时你提议所有人以某个点为圆形,在一定的半径上签名,在所有人都签完之后形成一个完整的环,这样也就无法确认这个环的首部在哪里。
当然这个案例所讲述的知识环签名的作用,在实际操作上与上述实例还是有很大的不同。
要说明这个签名的可用性主要是要证明这个签名一定是由公钥中的某个人所签的,他人可以验证的到这个签名是正确的
首先在上述签名过程中使环闭合的那个数是由签名者私钥计算得出的,也就是说签名者至少拥有listP中某一个或多个公钥所对应的私钥,这也就说明了签名一定来自与listP中的某个人,在listP之外的人是无法伪造签名的。验证人只需要计算文件的hash然后利用计算出的H验证这个V成环。
先预约一下下次更新:go或者python实现环签名(实际上我已经用go大概实现了原理,但是go语言自带的rsa库中不能用私钥解密一个随机的数据,他还会验证数据是否可用,就是败在最关键的一步)??,最迟下周6更新