3.8 数据库的密码保护

    任何组织的成员数据库都是有价值的。一方面,你想把数据库分配给所有成员,他们互相通信,交换想法,互相邀请吃黄瓜、三明治。另一方面,如果把成员数据库分配给每个人,副本必定会落入保险商人之手和其他恼人的垃圾邮件供应者之手。

    密码学能够改善这个问题。可以加密数据库,使它易于提取单个人的地址,而难于提取所有成员的邮件名单。

    [550,549]的方案是直截了当的。选用一个单向hash函数和对称加密算法。数据库的每个记录有二个字段。索引字段是成员的姓,用单向hash函数进行运算。数据字段是全名和成员的地址,用姓作为密钥对数据字段它加密。除非你知道这个人的姓,否则你不可能解密数据字段。

    搜索一个指定的姓是容易的。首先,对姓进行hash运算,并在数据库的索引字段中搜寻散列值。如果匹配,那么这个人的姓就在数据库中。如果有几个匹配,那么就有几个人同姓,最后,对每个匹配的项,用姓作为密钥解密出全名和地址。

    在[550]中,作者采用这种系统对6000个西班牙动词的字典进行保护。加密只引起很小的性能降低。[549]附加的复杂性就是处理搜寻多个索引,但思想还是相同的。这个系统的主要问题是当你不知道怎么拼写他们的名字时,就不可能搜寻所要找的人。你可以试各种拼法,直到你找到正确的拼法为止,但是当你搜寻“Schneier”时,扫描所有以 “Sch”开头的名字并不实际的。

    这种保护并不完善。某个特别固执的保险商人通过试所有可能的姓,就可能重构成员的数据库。如果他有电话数据库,他就可以把它作为一个可能的姓氏表来建立数据库。在计算机上做此事可能要花费几星期时间,但却是可行的。在垃圾邮件社会中,做这种工作更难,而且“更难” 很快会变成“太贵”。

    文献[185]提供了另一种途径,允许统计数字编辑在加密的数据中。