AlexiaChen / AlexiaChen.github.io

My Blog https://github.com/AlexiaChen/AlexiaChen.github.io/issues
88 stars 11 forks source link

盲签名,群签名与环签名 #132

Open AlexiaChen opened 3 years ago

AlexiaChen commented 3 years ago

前言

学习强国App真是个好物,很多Mooc学习资源它都有入口,看到电子科大有一门《现代密码学》所以就简单过了一遍。虽然平时是做区块链,但是涉及隐私计算这部分少,并且我们公司的技术并没有盲签名,群签名(组签名)的应用,所以还是打算简要介绍下。PlatON就是主要做隐私计算的,嗯。

正文

盲签名(Blind Signature)

盲签名是在发送者A和签名者B之间的双方协议,基本套路是:A发送一段信息给B,B对这和消息签名并返回给A,从这个签名中,A能够计算B关于A预先选取的消息m的签名。

以上说法有点绕,平时的签名我们接触到,就是签名者用自己的私钥对消息m(明文),进行签名,也就是签名者是知道消息m的内容的,这样暴露了消息隐私,那么有没有什么方法可以既不让签名者知道消息明文m,又可以对其进行签名并还不知道真实的签名数据呢?答案就是盲签名。盲签名的作用就是让签名者无法知道它对什么东西签了名,也无法知道其真实的签名,那么以后签名者B也不能将所签的消息和发送者A联系起来,也就是签名者貌似是把“眼睛”蒙蔽起来了。

那么盲签名具体有什么应用场景呢?

发送者A(客户)不希望签名者B(银行)能够将一条消息m及其签名Sig_B(m)与客户自己联系起来,可能消息m中有具体的金额数额,当m和Sig_B(m) 提交给B进行支付时,B无法推断原先接收签名的是谁。这就允许了A的匿名性,从而A的消费模式B也不知道。

大概的盲签名协议如下:

以上协议大致就这样,你看到第二条就知道了,关键就是函数f和g的选择,这样才可以满足第二条的等式关系,你可以从关系等式中看到,对消息明文m进行签名就等价于给消息m“加密“以后的签名再“解密“以得到最原始的签名,也就是签名者B签出来的名不是对原始数据的签名,这样A既达到了签名的目的,也没有泄露自己消息m的隐私。非常强大。

一个比较成熟的盲签名协议---Chaum盲签名协议

这个协议是基于RSA公钥体系的,也是最原始的盲签名协议

当然还有一些其他的盲签名方案,具体看参考。据了解,也有盲签名构造在BLS签名之上的,也有基于Elgamal签名的。盲签名在github上倒是能搜索到很多实现,js,golang的都有,也有基于盲签名构造以太坊上的电子投票。估计落地应用也很多了。

群签名(Group Signature)

1991年,Chaum等人提出了群签名的方法。该方案允许群里(组织)的某个成员以群的名义匿名地签名。满足以下三个条件:

这种机制也非常强大,一个应用就是匿名举报,比如一个单位某个人受贿贪污,在群中的成员可以匿名举报(对举报内容进行签名),并不用担心自己被泄露,如果最后更加上层的机构要奖励举报人,那么可以找到管理者把这个签名者恢复出来,这样就可以奖励举报人了。

一个群签名的基本协议为以下部分:

现在群签名的方案有哪些?

就是斯坦福Dan Boneh他们的成果,简称BBS签名(不是BLS签名,但是用到了Weil Pairing等东西),论文名为Short Group Signatures。Github搜了下这个论文标题,貌似几乎没有什么代码实现,也不知道性能怎样,落地没落地,crypto exchange上也有个哥们儿跟我一样有疑惑,https://crypto.stackexchange.com/questions/81238/practical-group-signatures 哈哈, 密码学的东西真是浩如烟好,都快看不完了,我还是先把BLS签名搞明白吧,毕竟这个是真有落地大量应用了。

环签名(Ring Signature)

现在有大量落地的是环签名(Ring Signature), 环签名是群签名的一种演化,消除了一些群签名的弊端,但是也增加了审计难度,门罗币这些有用到。

环签名中只有环成员没有类似于群签名的管理者, 不需要环成员之间的合作,签名者作为一个环成员,只要利用自己的私钥和其他成员的公钥集合就可以独立对消息m进行签名,任何人都可以通过环签名s,消息m和成员的公钥集合来校验这个签名是否合法。环签名对签名者有无条件匿名的优势,环中其他成员也不能伪造签名者的真实签名(在私钥不泄露的情况下)。

环签名的生成首先要生成一个签名环,环签名的原始方案就是基于RSA的,具体算法细节就不细细研究了。有空看wikipedia吧。

有三种环签名:

CryptoNote实现的是Fujisaki和Suzuki那篇论文里的Traceable ring signature。

参考