如果你正在使用网络浏览器(即你的电脑中能让你看见来自互联网的数据的程序)阅读这些文字,你手头拥有的加密工具很可能会比第二次世界大战(简称二战)期间大多数军人和间谍手中的加密工具还好。当你访问购物网站时,今天典型的网络浏览器使用加密和其他密码学技术保护你的隐私。这让互联网信用卡交易比电话交易还安全。这是因为这些技术能阻止窃密及其他形式的干预。
几百年来,尤其是二战以来,密码学发展迅速。在密码学的大部分历史上,密码只能由小群需要安全、私密通信的人共享。这一共享秘密可能是一本密码册,它把重要的词汇、短语转译成短而无意义的词汇。这样不仅能隐藏一条信息的意义,而且让信息变得更短。在电报流行的岁月里,密码册也流行于富人和大公司之间。因为电报委托人必须为电文中的每个字付款,所以设计得很好的电报密码就可能降低电报费用。私人公司制作密码册,卖给有需求的顾客。最有效的密码册是定制的,只限少数商业伙伴共享,这些商业伙伴为密码册严格保密。
在电报流行的时代,商业负责人经常很担忧电报的安全性。与自动传输、不受人为干预的电话不同,每一份电报都必须由发送端的报务员键入,由接收端的报务员转录,有时候还要由电报传输路径上的其他报务员转录。在一些国家,报务员的工资偏低,一些报务员受贿。导致敏感的电报信息落入电报委托人的竞争者手中。因此,秘密电报密码就向商人们保证他们的通信是私密和安全的。
然而,秘密不一定总能保证安全。400多年前,苏格兰女王玛丽就得到了这方面的教训。当时,英国女王伊丽莎白一世手下的间谍破获了玛丽的支持者针对伊丽莎白的一个阴谋。玛丽使用密码册与手下联络,但伊丽莎白的间谍通过阅读多份加密信息,猜测信息内容,并以尝试破译其他信息来系统性测试自己的猜测。最终成功破译了玛丽的密码册。虽然伊丽莎白的间谍并未完整破译玛丽的密码册,但他们还是破译了玛丽的秘密信息当中的不少内容,最终由此辨认和抓捕要犯。这些犯人在狱中揭露了玛麗的密码册的未被破译部分,玛丽最终被判叛国罪。
玛丽的密码册算不上复杂,无法抵御系统性攻击,但今天的密码却能。现代密码尤其是用于电脑的密码,一般由两部分组成:加密程序(即算法)和密钥,密钥告知算法如何干扰(即加密)信息。算法或许是公开的,但密钥总是被保密的。基本上,加密信息的安全性完全依赖于密钥的安全性。你无需担忧怎样为信息保密,只需保证你自己能守住密钥,保证密钥不泄密。
例如,今天任何人都可以购买一对小型电子加密装置,它们能加密在两部电脑(A和B)之间通过电话线传输的信息。如果这对加密装置共享相同的密钥,电脑A就只能明白由电脑B传输的信息。第一台加密装置使用这一共享密钥来加密信息,第二台加密装置使用同样的密钥来解密信息,让信息对接收者来说可读。
人们通常不用担忧电话被窃听。尽管我们都知道窃听是可能的,但这却常常并非真正需要担忧。不幸的是,窃听在互联网上很猖獗。追踪互联网安全事件的机构,经常接到互联网服务提供商发来的有关未经允许访问者的报告。窃听者找到潜入一个提供商网络的办法,并且安装“密码嗅探器”程序。当信息经过嗅探器所在部分时,嗅探器会搜集用户姓名及密码。嗅探器的主人会利用窃取的用户姓名及密码登录其他电脑,假装成合法用户。对这类窃密风险有一个简单解决办法:对密码进行加密。不幸的是,许多系统依然在依赖未加密的密码。
幸运的是,许多购物网站已经在对通过互联网传输的信用卡号和密码进行加密。如果它们不这么做,犯罪分子就可能使用前述嗅探器采集这些号码,用于非法目的。大多数商业网站采用被称为“安全套层(SSL)”的特殊软件来为网页加密,这些网页可能包含用户的私人信息。你能知道哪些网页被加密了,因为这些网页的全球资源定位器(URL)以“https:”而非“http:”开头。一个很仔细的网站会加密你键入私人密码的网页,或者当你通过提供你的地址和信用卡号来完成订单时为网页加密。网站运用这一信息来确定你是否真的是信用卡的主人,只有在这被确认之后,网站才会向你给他们的卡号收费。
这就出现了一个有趣的问题:当你的浏览器加密和解密它与一个网站共享的信息时,密钥从哪儿来呢?当你网上购物时,你或许会注意到“https:”前缀或浏览器正在确保安全的其他指针,但你一定不会注意到任何有关共享密钥的东西。如果浏览器的SSL软件只是简单地把密钥发送给网站,窃听者就可以拦截它,并且用它破译你的加密信息。那么,浏览器是怎样解决这个问题的?
答案在于公共密钥加密学。可以说。这是过去几十年中最重要的密码学发明。公共密钥密码学提供了一种安全而又简单的途径,让SSL软件与你的浏览器和你访问的网站共享一个密钥。正如常规加密的情况一样,这个过程采用公共密钥算法和独立密钥来运作。然而,公共密钥算法采用两个不同的密钥——一个公共密钥和一个私人密钥。公共密钥可以公开传输,私人密钥却总是被其主人(一个网站或一个人)保密。任何由公共密钥加密的内容,都只能由私人密钥解密。这就让我们使用一个公共密钥去加密一条信息,而只有相应的私人密钥的主人才能解读这条信息。
SSL同时运用公共密钥加密和常规密钥加密来实现速度、安全和便捷度之间的最佳平衡。例如,你正在亚马逊网站购买一本书。首先,亚马逊网站向你的浏览器发送该网站的公共密钥。接着,你的浏览器随机采用一个密钥,并且使用亚马逊网站的公共密钥加密它。SSL把这一加密过的密钥传回亚马逊网站,该网站对它进行解密。当这一交流完成后,SSL使用这一共享密钥来加密在你的浏览器和亚马逊网站之间传输的网页数据。
这一策略让SSL能最佳运用公共密钥加密,而无需受制于任何数学限制。相比公共密钥算法,秘密密钥算法速度快得多,能更安全地传输大量信息。最好的是,正在使用浏览器的人无需为加密密钥操心。不管是秘密密钥还是公共密钥都不需要。整个过程自动建立在安全和私密的连接中。
相比伊丽莎白间谍时期,这一过程能防御系统性攻击的能力有多强?换句话说,如果有人想拦截网站密码和信用卡号,这个人得花多大力气呢?如果有铅笔、纸和很好的耐心,二战期间的译码员就能破解典型的密码。虽然浏览器使用的SSL加密完全能对抗这样的破译,但是计算机通过尝试和修正错误,大大加快了译码进程。攻击SSL加密的决定因素,基本上是以比特来计算的密钥长度。大多数浏览器拥有40比特密钥,能产生的密钥数量上万亿。科学家数年前证明,一个配备大量工作站的实验室能在几小时内测试完如此巨量的密钥。
然而,相对于花在窃取信用卡号和密钥方面的计算机时间来说,加密的信用卡号本身没有那么大的价值。几年前,有人向乔装改扮的美国联邦探员售卖一批合法的信用卡号,每张售价仅2.5美元。这个价格完全抵不上破译这些信用卡所需要付出的努力。此外,如果信用卡被盗用,美国信用卡持有人的损失只有50美元,其余损失由发卡银行或接受信用卡的商家负责赔偿。因此,對大多数人来说,40比特密钥已经足以保护他们的信用卡。
当然,这样的密钥不足以保护所有东西。幸运的是,大多数浏览器能使用128比特的密钥,其可能的密钥数量数之不尽。在一些发达国家,这样的浏览器需要付费购买。采用128比特的密钥算法工作速度与较短密钥算法的速度一样快。运用今天的计算机,可以说完全不可能破译128比特密码。
考虑到128比特密钥与40比特密钥一样快,而前者要安全许多许多,那么为什么浏览器长时间来一直在使用40比特密钥呢?答案是美国限制出口高强度密钥。二战以后,美国宣布所有加密装置为战争武器,必须限制出口。40比特以上的密钥,被认为可用于军事目的。