盲签名与盲签名协议
Matrix67真的是一个非常聪明的人,在短时间内就体会到密码学的真谛——密码学关注更多的并不是加密解密的各种数学算法,而是在已有数学算法上如何实现各种安全需求。这个结论非常棒,早在高中时候我就看了应用密码学,也没能组织出这么言简意赅的话来。
比如说盲签名和盲签名协议就是很好的例子。
盲签名是一种技术手段,一种实现某个目标的数学算法。这个目标很简单——A让B签署一份文件,但是在签署文件的过程中,B不能知道文件的内容。
盲签名协议则是一整套对算法的使用方案。如果参与者遵循协议的约定1,就可以达成仅仅使用算法无法达成的目标——B愿意为A签署一份文件,B也不关心文件的具体内容,只要文件的要求对他来说是合理的。
这看起来似乎不可思议,如果B不能看见文件的内容,怎么知道文件的要求是合理的?
在考虑盲签名协议的时候,我们并不关心盲签名算法的具体细节。因此,我们不妨对它进行一个抽象。A把需要签名的文件连同一张复写纸一起装入一个信封。B在信封上签名,
下面是盲签名协议的过程:
- A打印出N份文件,这些文件是合理的,但它们在需要对B保密的细节上不同。
- A把它们连同复写纸一起各自装入信封,提交给B。
- B任意选择其中N-1份信封,要求A打开他们。
- A向B提供打开那N-1份信封的钥匙。
- B打开信封。如果这些文件都是合理的,B在剩下的信封上签名,并把信封交还给A。
- A打开信封得到需要签名的文件。
在整个协议中,如果A对B作假,他仅有1/N的几率可以得逞。而无论何种情况,B都无法知道最后被签署的文件的内容。
就像在暗黑破坏神中,三个无暇的钻石可以合成为一个完美的钻石,在密码学中,一些简单的协议也可以合成为一个复杂的协议。在这种情况下,简单的协议就被看作一种算法,复杂协议不关心它具体的实现过程,只要它满足特定的性质即可。
事实上,可以直接使用盲签名算法的场景几乎是没有的,因为没有人愿意为别人签署一份不知道内容的文件。可以直接使用盲签名协议的场景也是不多的,因为最后需要签署的文件是不确定的。但是,合成自盲签名协议的复杂协议却是满地都是,而且大多前途辉煌。比如数字现金、匿名投票等。
在数字现金中,银行需要一个唯一编号(unique id, uid)来确保被签署的电子现金不会在两家商店重复使用。而客户不想被银行通过这个uid追踪2。在这种情况下,需要签名的文件就是现金金额和uid。客户不关心他最后得到的数字现金的uid是什么,只要它可以被使用,并且不会被银行追踪。实际的数字现金协议比这个复杂很多,但都是基于盲签名协议的。而密码学中的各种协议,就是这样一砖一瓦的盖建。数学家找到一些算法来完成一些很基本的事情,密码学家通过堆砌算法和简单协议来实现更广阔的目标。
注1:如果不遵守怎么办?一个设计良好、没有被扔进回收站的协议可以保证其他人会发现有作弊者存在。不过,在多方协议中,能够提供足够的证据指出哪一方是作弊者的倒是不多,这一点确实非常难以实现。
注2:信用卡的出现可能已经让我们忘记了使用现金的好处了。使用现金通常是一种匿名的过程,银行只有在理论上追踪它们,比如对罪犯。但是存在于硬盘中的信息,确实可以让银行以一种非常小的代价追踪你的隐私。比如你每隔多久在什么超市购买了一盒杜蕾斯。只有银行并不拥有这些信息,我们才可以更放心。
你可能会感兴趣
on December 16th, 2008 | 1 Comment »

你这个咖啡馆的咖啡喝得我好晕啊 呵呵