��码学:素数的秘密生活 密码学便是关于密码(cipher,机密的代码)的学问。让我向你介绍一些虚拟角色吧,他们经常出现在密码学所考虑的各类情境中。我们设想爱丽丝(Alice)和鲍勃(Bob)想互相通信,但不想让窃听者伊芙(Eve)听见。我们也许会本能地同情爱丽丝和鲍勃,而将伊芙想象成坏人。但是这可能与真相相反,伊芙或许代表了正义的警方,努力保护着我们免受鲍勃和爱丽丝的邪恶计划的伤害。 无论参与者的道德立场如何,爱丽丝和鲍勃都可以运用一个古老的方法,将伊芙排除在对话内容之外,哪怕伊芙截取了他们之间传递的信息。方法就是用密钥(cipher key)来加密数据,而这个密钥只有爱丽丝和鲍勃自己知道。他们可以预定在一个**的环境会面,交换一个秘密数字(比方说57),然后各自回家。当时机到来时,爱丽丝想要发送一条信息给鲍勃。这里为了叙述方便,我们假设信息可以用一个1~9 之间的数字来表示。在那个重大的日子,爱丽丝想将信息“8”发给鲍勃。她取出信息,加入秘密数字。也就是说,她通过加上57 把真实的数值掩藏了起来,然后将信息8+57=65 通过一个未经保护的渠道发给鲍勃。鲍勃收到这条信息,减去秘密数字,从而获取爱丽丝的明文65-57=8。 不过,不怀好意的伊芙很清楚这两个人在干些什么,并且她也确实截获了加密过的信息65。但是她能对它做什么呢?她可能像我们一样,知道爱丽丝发送给鲍勃九种可能的信息1,2,3,…,9中的一个,也知道她通过将信息加上一个数进行了加密,这个加密数(enciphering number)一定在65-9=56 到65-1=64之间。然而,因为她不知道这九个数字中的哪一个被使用了(她被排除在这个秘密之外),她没法进一步搞清楚爱丽丝给鲍勃发送的明文信息。九种信息中的每一种都有相同的可能性。她知道的全部就是爱丽丝给鲍勃发送了一条信息,但是不知道信息的内容。 看起来爱丽丝和鲍勃对伊芙已经防得滴水不漏,他们似乎可以使用这个奇妙的数57 来掩藏所有想说的内容,从而不受限制地通信。但是,实际并非如此。他们*好换一换这个数,实际上每次都使用一个新的密码会更好,不然这套系统就会开始泄露线索给伊芙。比如说,在未来某一周爱丽丝想向鲍勃传送一条相同的信息8。每件事都会与之前一样,再一次伊芙从电波中截获了神秘的数65,但这次会让她读出一些东西。伊芙会知道,无论这条信息是什么,这和爱丽丝**周发给鲍勃的是一样的—而这类事情正是爱丽丝和鲍勃所不希望伊芙知道的。 当然,对于爱丽丝和鲍勃来说,这看起来也不是什么大问题。当他们**次见面“互换密钥”时,爱丽丝可以不只是约定一个密码,而是提供给鲍勃一张长长的有顺序的列表,里面有上千个密码。他们可以依次使用这些密码,从而避免了在公开通信中出现有意义重复的可能性。 我们确实也是这样操作的。这种密码系统在业内被称为一次性密码本(one-time pad)。发送者和接收者从密码本中找到一个一次性的数,用以掩藏他们的明文。当信息被发送和解密后,密码本中的那一页会被发送者和接收者一起撕掉。一次性密码本代表了一种彻底**的系统,因为在公共领域传输的不**文本不含有任何关于明文内容的信息。为了解码,拦截者需要拿到密码本才能获得加密/解密的钥匙。