4.12 单向累加器

    Alice是Cabal公司的一个成员,有时候,她必须在光线暗淡的旅馆与其他成员会晤。问题是旅馆的光线非常暗,以至于她难于知道桌子对面的人是否也是他们的成员。

    Cabal公司可以选择几种解决方案。每个成员可以携带一个成员名单,这有两个问题。一是现在每人必须携带一个大的数据库,二是他们必须很好地保护成员名单。另一种选择,一个值得信任的秘书能够发布数字签名的身份卡。这样做增加了让外来者验证成员的好处。(例如,在本地食品店打折),但是它需要可信任的秘书,在Cabal公司没有人能够被信任到那种程度。

    新的解决方案是使用叫做“单向累加器”的东西[116]。除了可交换外,它类似单向hash函数。也就是说,用任何顺序对成员数据库进行hash,都得到相同的值,这是可能的。而且,把成员加入到hash中,得到新的hash,它也是与顺序无关的。

    那么,这儿是Alice做的事情。她计算除她自己外的每个成员名字的累加和。然后,她把那个值与她的名字存在一起。Bob和其他每个成员都做和Alice一样的事。现在,当Alice和Bob在光线暗淡的旅馆会面时,他们简单的互相交换累加值和名字,Alice确信Bob的名字加上他的累加值等于Alice的名字加上她的累加值。Bob做同样的事情。现在他们两人知道另一个是公司成员。同时,没有人能够知道任何其他人的身份。

    甚至更好,非会员能知道每个人的累加值。现在Alice能够对非会员验证他的会员资格(也许,在他们的本地反间谍商店为会员打折),非会员不可能计算出全部会员资格的名单。

    只要到处发送新会员的名字就可把新会员加入到累加值中。不幸的是,删除会员的唯一方法是给每个会员发送新名单并让他们重新计算他们的累加值。但是如果有人辞职,Cabal公司需要那样做;死亡的会员可以保留在名单上(很奇怪,这绝不会有问题。)

    在没有集中签名者的情况下,无论什么时候你想要与数字签名有同样的效果时这是一个聪明的想法,并已得到应用。