目录
前言
怎样阅读本书
前言
世界上有两种密码:一种是防止小孩偷看你的文件;另一种是防止当局阅读你的文件。本书写的是后一种情况。
如果把一封信锁在保险柜中,把保险柜藏在纽约的某个地方,然后告诉你去看这封信,这并不是安全,而是隐藏。相反,如果把一封信锁在保险柜中,然后把保险柜及其设计规范和许多同样的保险柜给你,以便你和世界上最好的开保险柜的专家能够研究锁的装置,而你还是无法打开保险柜去读这封信,这才是安全的概念。
许多年来,密码学是军队专有的领域。NSA和苏联、英国、法国、以色列以及其他国家的安全机构已将大量的财力投入到加密自己的通信,同时又千方百计地破译别人的通信的残酷游戏中。面对这些政府,个人既无专业知识又无足够财力保护自己的秘密。
在过去的 20 年里,公开的密码学研究爆炸性地增长。从第二次世界大战以来,当普通公民还在长期使用经典密码时,计算机密码学已成为世界军事专有的领域。今天,最新的计算机密码学已应用到军事机构外,现在就连非专业人员都可以利用密码技术去阻止最强大的敌人,包括军方的安全机构。
普通百姓真的需要这种保密性吗?是的,他们可能正在策划一次政治运动,讨论税收或正干一件非法的事情;也可能正设计一件新产品,讨论一种市场策略,或计划接管竞争对手的生意;或者可能生活在一个不尊重个人隐私权的国家,也可能做一些他们自己认为并非违法实际却是非法的事情。不管理由是什么,他的数据和通信都是私人的、秘密的,与他人无关。
本书正好在混乱的年代出版。1994年,克林顿当局核准了托管加密标准(包括Clipper芯片和 Fortezza卡),并将数字电话法案签署成为法律。这两个行政令企图确保政府实施电子监控的能力。
一些危险的Orwellian假设在作祟:政府有权侦听私人通信,个人对政府保守秘密是错误的。如果可能,法律总有能力强制实施法院授权的监控,但是,这是公民第一次被迫采取“积极措施”,以使他们自己能被监控。这两个行政令并不是政府在某个模糊范围内的简单倡议,而是一种先发制人的单方面尝试,旨在侵占以前属于公民的权力。
Clipper和数字电话不保护隐私,它强迫个人无条件地相信政府将尊重他们的隐私。非法窃听小马丁·路德·金电话的执法机构,同样也能容易地窃听用Clipper保护的电话。最近,地方警察机关在不少管区都有因非法窃听而被控有罪或被提出民事诉讼的事件,这些地方包括马里兰、康涅狄格、佛蒙特、佐治亚、密苏里和内华达。为了随时方便警察局的工作而配置这种技术是很糟糕的想法。
这给我们的教训是采用法律手段并不能充分保护我们自己,还需要用数学来保护自己。加密太重要了,不能让给政府独享。
本书为你提供了一些可用来保护自己隐私的工具。提供密码产品可能被宣布为非法,但提供有关的信息绝不会犯法。
怎样阅读本书
我写本书的目的是为了在真实地介绍密码学的同时给出全面的参考文献。我尽量在不损失正确性的情况下保持本书的可读性,我不想使本书成为一本数学书。虽然我无意给出任何错误信息,但匆忙中理论难免有失严谨。对形式方法感兴趣的人,可以参考大量的学术文献。
第 1 章介绍密码学,定义许多术语,简要讨论计算机出现前密码学的情况。
第一部分(第 2~6 章)描述密码学的各种协议:人们能用密码学做什么。协议范围从简单(一人向另一人发送加密消息)到复杂(在电话上抛掷硬币)再到深奥(秘密的和匿名的数字货币交易)。这些协议中有些一目了然,有些却十分奇异。密码学能够解决大多数人绝没有认识到的许多问题。
第二部分(第7~10章)讨论密码技术。对密码学的大多数基本应用来说,这一部分的4 章都很重要。第 7章和第 8 章讨论密钥:密钥应选多长才能保密,怎样产生、存储密钥,怎样处理密钥等。密钥管理是密码学最困难的部分,经常是保密系统的一个致命弱点。第9章讨论使用密码算法的不同方法。第10章给出与算法有关的细节:怎样选择、实现和使用算法。
第三部分(第11~23章)列出多个算法。第11章提供数学背景,如果你对公开密钥算法感兴趣,那么这一章你一定要了解。如果你只想实现 DES(或类似的东西),则可以跳过这一章。第12章讨论DES: DES算法、它的历史、安全性和一些变型。第13~15章讨论其他的分组算法:如果你需要比 DES 更保密的算法,请阅读 IDEA 和三重 DES 算法这节;如果你想知道一系列比DES算法更安全的算法,就请读完整章。第16章和第17章讨论序列密码算法。第18章集中讨论单向散列函数,虽然讨论了多种单向散列函数,但MD5和SHA是最通用的。第19章讨论公开密钥加密算法。第20章讨论公开密钥数字签名算法。第21章讨论公开密钥鉴别算法。第22章讨论公开密钥交换算法。几种重要的公开密钥算法分别是 RSA、DSA、 Fiat-Shamir 和 Diffie-Hellman。第 23 章讨论更深奥的公开密钥算法和协议,这一章的数学知识非常复杂,请你做好思想准备。
第四部分(第 24~25 章)转向密码学的真实世界。第 24 章讨论这些算法和协议的一些实际实现;第 25章涉及围绕密码学的一些政治问题。这些章节并不全面。
此外,本书还包括在第三部分讨论的10个算法的源代码清单,由于篇幅的限制,不可能给出所有的源代码,况且密码的源代码不能出口(非常奇怪的是,国务院允许本书的第1版和源代码出口,但不允许含有同样源代码的计算机磁盘出口)。配套的源代码盘中包括的源代码比本书中列出的要多得多,这也许是除军事机构以外最大的密码源代码集。我只能给住在美国和加拿大的公民发送源代码盘,但我希望有一天这种情况会改变。
对本书的一种批评是,它的广博性代替了可读性。这是对的,但我想给可能偶然在学术文献或产品中需要算法的人提供参考。密码学领域正日趋热门,这是第一次把这么多资料收集在一本书中。即使这样,还是有许多东西限于篇幅舍弃了,但尽量保留了那些我认为是重要的、有实用价值的或者有趣的专题。如果我对某一专题讨论不深,我会给出深入讨论这些专题的参考文献。
我在写作过程中已尽力查出和根除书中的错误,但我相信不可能消除所有的错误。第 2版肯定比第1版的错误少得多。勘误表可以从我这里得到,并且它定期发往Usenet的新闻组 sci. crypt。如果读者发现错误,请通知我,我将不胜感谢。
作者:Bruce Schneier