1.加密的历史
作为保障数据安全的一种方式,对于信息的加密技巧起源于欧洲,公元前2000年,埃及人是最先使用象形文字作为信息编码的人。随着时间推移,巴比伦、美索不达米亚和希腊文明都开始使用一些方法来保护他们的书面信息(明文)。后来,被Julias Caesar(凯撒大帝)使用,也曾用于历次战争中,包括美国独立战争、美国内战和两次世界大战。
最广为人知的编码机器是德国的German Enigma,在第二次世界大战中德国人利用它创建了加密信息系统,从而解决军事信息的保密通讯问题。此后,由于Alan Turing和Ultra计划以及其他工程技术人员的不泄努力,盟军终于对德国人的密码成功破译了,进而导致第二次世界大战结束。
当初,美国人对于计算机的研究,主要目的是用于破解德国人的通讯密码,这在当时,人们并没有意识到计算机技术此后的发展会影响世界历史进程,从而在全球引发了一场信息革命。随着计算机的发展,运算能力的增强,传统的密码知识和技能都变得十分简单了而很容易被人破解,于是人们又不断地研究出了新的数据加密方式,如私有密钥算法和公共密钥算法。可以说,是计算机技术的飞速发展在推动了数据加密技术的发展。
2.什么是数据加密
尽管加密技术被首先使用在军事通信领域,但是人们或许出于安全的考量,开始逐渐对于商业机密、政府文件等重要信息实施加密手段。数据加密应运而生。其基本原理是:
对明文(可读懂的信息)进行翻译,使用不同的算法对明文以代码形式(密码)实施加密。该过程的逆过程称为解密,即将该编码信息转化为明文的过程。
从事数据加密研究的人称为密码编码者(Cryptographer),而从事对密码解密的专业人士称为密码分析者(Cryptanalyst)。如今数据加密技术被广泛地应用与国民经济各个领域,特别是政府机关和国防情报部门,此外才是科学研究机关、商业部门、新闻出版、金融证券、交通管制与电力输送等部门。
3.为什么需要对数据进行加密?
因特网是不安全的信息传输载体,它所遵循的通讯协议(
TCP/IP协议)是脆弱的,当初设计该协议的初衷并非是对信息安全的考虑,而是出于对通信自由的考量。因此,一些基于
TCP/IP协议的服务也是极不安全;另一方面,因特网给众多的商家带来了无限的商机,许多网络黑客依照经济利益或个人爱好,往往专门跟踪
Internet的特殊群体或个别敏感用户,盗取他们的网络身份或银行帐户信息,再冒充合法用户的身份,进一步侵入信息系统,非法盗取经济、政治、军事机密。为了保证因特网的安全和充分发挥其商业信息交换的价值,人们选择了数据加密技术的对访问
Internet网络的用户实施身份认证。
加密技术在网络上的应用概括起来有:①数据加密
②身份认证
③数字签名和防止个人的否认事实(撒谎)行为。其次就是对于黑客的非法入侵行为在网络上进行拦截。许多安全防护体系是基于密码的,密码一旦泄露出去可以导致很多的安全隐患,甚至导致网络的全面崩溃。
当人在网络上进行访问时必须进入第一道门口——登录,你所键入的密码(
Password)以明文的形式被传输到用户服务器上,系统自动对你的用户身份进行鉴别,这就是身份认证。确定你的身份后才容许你访问或通讯。
在网络上的窃听是一件极为容易的事情,今天在
Internet网上到处充斥着各种各样的黑客程序,很多是基于访问控制的攻击型程序。因此很有可能会有黑客嗅探并窃得用户的密码,如果用户是
Root用户或
Administrator用户,那后果将是极为严重的。网络上的数据被嗅探和劫持必将或给网络带来安全隐患。
解决类似的网络攻击行为的防护措施之一就是对数据加密,加密的口令即使被黑客获得也是不可读的,除非加密密钥或加密方式十分脆弱,黑客很容易破解。不管怎样,加密的使用使黑客不会轻易获得口令。
身份认证是基于加密技术的,它的作用就是用来确定用户是否是真实的。
简单的例子就是电子邮件,当用户收到一封电子邮件时,邮件上面标有发信人的姓名和信箱地址,很多人可能会简单地认为发信人就是信上说明的那个人,但实际上伪造一封电子邮件对于一个通常人来说是极为容易的事。在这种情况下,用户需要用电子邮件源身份认证技术来防止电子邮件伪造,这样就有理由用户写信的人就是信头上说明的人,有些站点提供入站
FTP和
WWW服务,当然用户通常接触的这类服务是匿名服务,用户的权力要受到限制,但也有的这类服务不是匿名的,如公司为了信息交流提供用户的合作伙伴非匿名的
FTP服务,或开发小组把他们的
Web网页上载到用户的
WWW服务器上,现在的问题就是,用户如何确定正在访问用户服务器的人就是合法用户呢?采用身份认证便可以解决这个问题。
有些时候,用户可能需要对一些机密文件进行加密,并不一定因为要在网络间进行传输,而是要防止别人窃得计算机密码而获得该机密文件,因此要对数据实行加密,从而实现多重保护。例如,在
UNIX系统中可以用
crypt(3)命令对文件进行加密,尽管这种加密手段如今已不是那么先进,甚至有被破解的可能,但是最起码可以保证文件的完整无误地传输到信息接受方。
4.加密密钥
加密算法通常是公开的,比较常用的密码体制有
DES和
IDEA等。一般把受保护的原始信息称为明文,编码后的数据就是密文。尽管大家都知道加密方法是公开的,但对密文进行破译是需要专一的密钥的,密钥是保密的不是任何人都可以轻易拿到的。一旦你获得专一的密钥秘密对于你就是公开的了。
(一)保密密钥和公开(私有)密钥
有两类基本的加密算法可供对文件加密者选择:保密密钥和公开
/私有密钥。在保密密钥中,加密者和解密者使用相同的密钥,被称为非对称密钥,这类算法有
DES和
IDEA。这种加密算法的问题是,用户必须让接收信息者知道自己所使用的密钥,这个密钥需要双方共同保密,任何一方的失误都会导致机密的泄露。而且在告诉收件人密钥过程中,还需要的防止任何人发现或窃取密钥,这个过程被称为密钥发布。有些认证系统在会话初期用明文传送密钥,这就存在密钥被截获的可能性。
需要使用保密密钥对加密密钥的信息再加密。
另一类加密技术是公开
/私有密钥,与非对称密钥体制不同的是,它使用相互关联的一对密钥,一个是公开的密钥,任何人都可以知道,另一个是私有密钥(专一密钥),只有拥有该对密钥的人才有,其他人并没有保管它。假如某甲发信给保存专一密钥的乙方,乙接收到加密信息后,就用他自己保存的密钥进行解密,而且只有乙方持有的私有密钥可以解密。这种加密方式的好处显而易见。密钥只有一个人持有,也就更加容易进行保密,因为不需在网络上传送私人密钥,也就不用担心别人在认证会话初期劫持密钥。
下面把公开
/私有密钥技术总结为以下三个要点:
1、公开钥
/私有密钥有两个相互关联的密钥。
2、公开密钥加密的文件只有私有密钥能解开。
3、私有密钥加密的文件只有公开密钥能解开,这一特点被用于
PGP(
pretty good privacy)。
(二)摘要函数(MD2、MD4和MD5)-----数字签名
摘要是一种防止数据被私自改动的方法,其中用到的函数叫摘要函数。这些函数的输入可以是任意大小的消息,而输出是一个固定长度的摘要。摘要有这样一个性质,如果改变了输入消息中的任何东西,甚至只有一位,输出的摘要将会发生不可预测的改变,也就是说输入消息的每一位数字对输出摘要都会有影响。总之,摘要算法从给定的文本块中产生一个数字签名(
fingerprint或
message digest),数字签名可以用于防止有人从一个签名上获取文本信息或改变文本信息内容。摘要算法的数字签名原理在很多加密算法中都被使用,如
S/KEY和
PGP(
pretty good privacy)。
现在流行的摘要函数有
MD4和
MD5,下面就来讨论一下它们。记住,客户机和服务器必须使用相同的算法,无论是
MD4还是
MD5,MD4客户机不能和
MD5服务器交互。
MD2摘要算法的设计是出于下面的考虑:利用
32位
RISC结构来最大其吞吐量,而不需要大量的替换表(
substitution table)。
MD4算法是把消息的给予,对长度而言作为一个输入,产生一个
128位的
"指纹
"或
"消息化
"。要产生两个具有相同消息化的文字块或者产生任何具有预先给定
"指纹
"的消息,都被认为在计算上是不可能的。
MD5摘要算法是个数据认证标准。
MD5的设计思想是要找出速度更快但更不安全的
MD4中潜在的不安全,
MD5的设计者通过使
MD5在计算上慢下来,以及对这些计算做了一些基础性的改动来解决这个问题。
MD5在
RFC1321中给出文档描述,是
MD4算法的一个扩展。
5.密钥的管理和分发
一、使用同样密钥的时间范围
用户可以一次又一次地使用同样原密钥与别人交换信息,但要考虑以下的情况:
1.如果某人偶然地接触到了用户的密钥,那么用户曾经和另一个人交换的每一条消息都不再是保密的了。
2.使用一个特定密钥加密的信息越多,提供给窃听者的材料也就越多,这就增加了他们成功的机会。
因此,一般强调仅将一个对话密钥用于一条信息中或一次对话中,或者建立一种按时更换密钥的机制,以减小密钥暴露的可能性。
用户可以一次又一次地使用同样原密钥与别人交换信息,但要考虑以下的情况:
1.如果某人偶然地接触到了用户的密钥,那么用户曾经和另一个人交换的每一条消息都不再是保密的了。
2.使用一个特定密钥加密的信息越多,提供给窃听者的材料也就越多,这就增加了他们成功的机会。
因此,一般强调仅将一个对话密钥用于一条信息中或一次对话中,或者建立一种按时更换密钥的机制,以减小密钥暴露的可能性。
二、保密密钥的分发
假设在某机构中有 100个人,如果他们任意两人之间可以进行秘密对话,那么总共需要多少密钥呢?每个人需要知道多少密钥呢?很容易得出答案,十个连网用户需要 45个密钥,如果是 100人中的任意两人之间要用不同的密钥对话,则该群体总共需要 4950对密钥,而且每个人应记住 99个密钥。如果机构的人数是 1000、 10000人或更多呢,显然这种方式过于愚蠢了,管理密钥将是一件可怕的事情。
假设在某机构中有 100个人,如果他们任意两人之间可以进行秘密对话,那么总共需要多少密钥呢?每个人需要知道多少密钥呢?很容易得出答案,十个连网用户需要 45个密钥,如果是 100人中的任意两人之间要用不同的密钥对话,则该群体总共需要 4950对密钥,而且每个人应记住 99个密钥。如果机构的人数是 1000、 10000人或更多呢,显然这种方式过于愚蠢了,管理密钥将是一件可怕的事情。
Kerberos提供了一种较好的密钥管理解决方案,它是由美国MTI
(麻省理工学院
)发明的,使密钥的管理和分发变得十分方便,但该方法本身还存在一定的缺陷。为能在因特网上提供一个实用的解决方案
Kerberos建立了一个安全的、可信任的密钥分发中心(
Key Distribution Center, KDC),每个用户只要知道一个和
KDC进行通讯的密钥就可以了,而不需要知道成百上千个不同的密钥。发放密钥和生成密钥由
KDC负责。方式如下:
假设 A想要和 B进行秘密通信,则 A先和 KDC通信,使用只有 A和 KDC知道的密钥进行加密 , A告诉 KDC他想和 B通信, KDC会为 A和 B之间的会话随机选择一对对话密钥,比如“ wa6lkj9ds5bc”,并生成一个标签,这个标签由 KDC和 B之间的密钥进行加密,并在 A启动与 B对话时, A会把这个标签交给 B。为什么会生成这样一个标签呢?这个标签的作用是让 A确信和他交谈的人就是 B,而不是冒充者。因为这个标签是由只有 B和 KDC知道的密钥进行加密的,所以即使冒充者得到 A发出的标签也不可能进行解密,只有 B收到后才能够进行解密,从而确定了与 A对话的人就是 B。
当 KDC生成标签和随机发放,就会把它们用只有 A和 KDC知道的密钥进行加密,然后把标签和发放的密钥传给 A,加密的结果可以确保只有 A能得到这个信息,只有 A能利用这个会话密钥和 B进行通话(唯一性)。同理, KDC会把会话密码用只有 KDC和 B知道的密钥加密,并把会话密钥传给 B。
假设 A想要和 B进行秘密通信,则 A先和 KDC通信,使用只有 A和 KDC知道的密钥进行加密 , A告诉 KDC他想和 B通信, KDC会为 A和 B之间的会话随机选择一对对话密钥,比如“ wa6lkj9ds5bc”,并生成一个标签,这个标签由 KDC和 B之间的密钥进行加密,并在 A启动与 B对话时, A会把这个标签交给 B。为什么会生成这样一个标签呢?这个标签的作用是让 A确信和他交谈的人就是 B,而不是冒充者。因为这个标签是由只有 B和 KDC知道的密钥进行加密的,所以即使冒充者得到 A发出的标签也不可能进行解密,只有 B收到后才能够进行解密,从而确定了与 A对话的人就是 B。
当 KDC生成标签和随机发放,就会把它们用只有 A和 KDC知道的密钥进行加密,然后把标签和发放的密钥传给 A,加密的结果可以确保只有 A能得到这个信息,只有 A能利用这个会话密钥和 B进行通话(唯一性)。同理, KDC会把会话密码用只有 KDC和 B知道的密钥加密,并把会话密钥传给 B。
A会启动一个和
B的会话行为,并用得到的会话密钥加密自己和
B的会话,于此同时还要把
KDC传给
A的标签再发给
B,以确定
B 的身份。然后
A和
B之间就可以用会话密钥进行安全会话了,而且为了保证安全,这个会话密钥是一次性的,这样黑客就更难进行破解了。
6.一次性密码
通常使用的计算机口令是静态的,也就是说在一定时间内是不变的,而且可重复使用。前面已经提到过,口令极易被网上嗅探劫持,有鉴于此,人们发明的一次性密码。难道在每次会话后修改一次密码吗?显然这样做是极其愚蠢的,那样太累人了。事实上,人们已经发明了一种产生一次性口令的技术,称之为
挑战
/
回答(
challenge/response
)。
口令,不管是静态口令还是一次性口令,都是基于 "用户知道什么 "这一理论的。比如说,静态密码是用户和机器之间共享的一种信息,而其他人不知道,这样用户若知道这个口令,就说明用户是机器所确认的那个人。一次性口令也一样,用户和机器之间必须共知一条通行短语,而这条通行短语对外界是完全保密的。和静态口令不同的是,这个通行短语并不在网络上进行传输,所以黑客通过网络窃听是绝对截获不了的。每次的口令是三个因数按一定算法计算得到的结果,这三个因子分别是种子、迭代值和通行短语。
口令,不管是静态口令还是一次性口令,都是基于 "用户知道什么 "这一理论的。比如说,静态密码是用户和机器之间共享的一种信息,而其他人不知道,这样用户若知道这个口令,就说明用户是机器所确认的那个人。一次性口令也一样,用户和机器之间必须共知一条通行短语,而这条通行短语对外界是完全保密的。和静态口令不同的是,这个通行短语并不在网络上进行传输,所以黑客通过网络窃听是绝对截获不了的。每次的口令是三个因数按一定算法计算得到的结果,这三个因子分别是种子、迭代值和通行短语。
种子(
seed
):决定于用户,一般在一台机器上,一个种子对应于一个用户,也就是说,种子在一个系统中应具有唯一性,这是秘密的而是公开的。
迭代值( iteration):迭代值是不断变化的,而种子和通行短语是相对不变的,所以迭代值的作用就是使口令发生变化。
通行短语( phrase ):通行短语是保密的,而迭代值是公开的,这样就决定了口令的机密性。
当用户登录时,系统会向用户提出挑战,包括种子和迭代值,然后用户用得到的种子和迭代值再加上自己知道的通行短语计算出一个答复,并传送给系统,因为系统也知道这个通行短语,所以系统可以验证答复正确与否。
迭代值( iteration):迭代值是不断变化的,而种子和通行短语是相对不变的,所以迭代值的作用就是使口令发生变化。
通行短语( phrase ):通行短语是保密的,而迭代值是公开的,这样就决定了口令的机密性。
当用户登录时,系统会向用户提出挑战,包括种子和迭代值,然后用户用得到的种子和迭代值再加上自己知道的通行短语计算出一个答复,并传送给系统,因为系统也知道这个通行短语,所以系统可以验证答复正确与否。
7.数据加密标准Data Encryption Standard
最著名的保密密钥(或对称密钥)加密算法
DES (Data Encryption Standard ) 是由
IBM公司在
70年代发展起来的,并经政府的加密标准筛选后,于
1976年
11月被美国政府采用,
DES随后被美国国家标准局和美国国家标准协会(
American National Standard Institute,ANSI)承认并给予公布。
DES使用
56位密钥对
64位的数据块进行加密,并对
64位的数据块进行
16轮编码。与每轮编码时,一个
48位的
"每轮
"密钥值由
56位的完整密钥得出来。
DES用软件进行解码需用很长时间,而用硬件解码速度非常快。幸运的是,当时大多数黑客并没有足够的设备制造出这种硬件设备。在
1977年,人们估计要耗资两千万美元才能建成一个专门计算机用于
DES的解密,而且需要
12个小时的破解才能得到结果。当时
DES被认为是一种十分强壮的加密方法。
但是,当今的计算机速度越来越快了,制造一台这样特殊的机器的花费已经降到了十万美元左右,而用它来保护十亿美元的银行间线缆时,就要仔细斟酌了。另一方面,如果只用它来保护一台服务器,那么
DES确实是一种好的办法,因为黑客绝不会仅仅为入侵一个服务器而花那么多的钱破解
DES密文。由于现在已经能用二十万美元制造一台破译
DES的特殊的计算机,所以现在对要求
"强壮
"的加密场合已经不再适用了。
三重
DES
确定一种新的加密体制是否真正的安全是极为困难的事情,何况
DES的密码学缺点是密钥长度相对比较短,现阶段之所以人们并没有完全放弃使用
DES,是它的优势还很明显。改进其长度的方法,就是采用三重
DES,。这种方法用两个密钥对明文进行三次加密,假设两个密钥是
K1和
K2。加密方法是:
1.用密钥 K1进行 DES解密。
2.用 K2对步骤 1结果进行 DES解密。
3.用步骤 2的结果使用密钥 K1进行 DES加密。
这种方法的缺点,是要花费原来三倍,但从另一方面来看,三重 DES的 112位密钥长度是很 "强壮 "的加密方式了。
1.用密钥 K1进行 DES解密。
2.用 K2对步骤 1结果进行 DES解密。
3.用步骤 2的结果使用密钥 K1进行 DES加密。
这种方法的缺点,是要花费原来三倍,但从另一方面来看,三重 DES的 112位密钥长度是很 "强壮 "的加密方式了。
8.电子商务与加密技术
电子商务(
E-business)的最大特点就是顾客可以在网上进行交易,不必担心自己的信用卡会被人盗用。但是,假如用户的号码和合同被窃贼获到,盗窃者便可通过电话订货,而且冒用用户的名义使用信用卡进行结算。这种交易的高风险性长期阻碍着电子商务的发展,于是人们开始用
RSA(一种公开
/私有密钥)提高信用卡交易的安全性,从而使电子商务走向实用成为可能。
许多人认为 NETSCAPE公司是 Internet商业中领先技术的提供者,该公司提供了一种基于 RSA和保密密钥的应用于因特网的技术,被称为安全插座层 ( Secure Sockets Layer,SSL )。也许很多人知道 Socket,它是一个编程界面,并不提供任何安全措施,而 SSL不但提供编程界面,而且向上提供一种安全的服务, SSL3.0现在已经应用到了服务器和浏览器上, SSL2.0则只能应用于服务器端。 SSL3.0用一种电子证书( electric certificate)的措施来实行身份认证,之后,双方就可以用保密密钥进行安全的会话了。
基于 SSL3.0提供的安全保障,用户就可以自由的从商务网站订购商品,并且输入信用卡号,也可以在网上和合作伙伴交流商业信息并且让供应商把订单和收货单从网上发送过来,这样可以节省大量的纸张,降低商品销售成本,并为公司节省大量的电话、传真费用。在过去,电子信息交换( Electric Data Interchange,EDI)、信息交易( information transaction)和金融交易( financial transaction)都是在专用网络上完成的,使用专用网的费用大大高于因特网。正是由于 Internet的巨大诱惑,才使人们开始发展因特网上的电子商务,但不要忘记数据加密。
许多人认为 NETSCAPE公司是 Internet商业中领先技术的提供者,该公司提供了一种基于 RSA和保密密钥的应用于因特网的技术,被称为安全插座层 ( Secure Sockets Layer,SSL )。也许很多人知道 Socket,它是一个编程界面,并不提供任何安全措施,而 SSL不但提供编程界面,而且向上提供一种安全的服务, SSL3.0现在已经应用到了服务器和浏览器上, SSL2.0则只能应用于服务器端。 SSL3.0用一种电子证书( electric certificate)的措施来实行身份认证,之后,双方就可以用保密密钥进行安全的会话了。
基于 SSL3.0提供的安全保障,用户就可以自由的从商务网站订购商品,并且输入信用卡号,也可以在网上和合作伙伴交流商业信息并且让供应商把订单和收货单从网上发送过来,这样可以节省大量的纸张,降低商品销售成本,并为公司节省大量的电话、传真费用。在过去,电子信息交换( Electric Data Interchange,EDI)、信息交易( information transaction)和金融交易( financial transaction)都是在专用网络上完成的,使用专用网的费用大大高于因特网。正是由于 Internet的巨大诱惑,才使人们开始发展因特网上的电子商务,但不要忘记数据加密。
9.虚拟专用网络(VPN,Virtual Private Network)
现在,越多越多的公司走向国际化,一个公司可能在多个国家都有办事机构或销售中心,每一个机构都有自己的
LAN(
Local Area Network局域网),但人们不会只满足这此。用户可能会要求将这些
LAN连结在一起组成一个跨越地区和国界的公司广域网。事实上,今天的
IBM、微软等国际知名企业公司都已经这样做了,但他们一般使用租用线路(
leased line)来连结这些局域网
,因为他们考虑到网络安全问题。现在具有加密
/解密功能的路由器使人们使用因特网作为连接这些局域网的通道成为可能,这就是虚拟专用网络的概念(
Virtual Private Network ,VPN)。
当数据离开发送者所在的局域网时,这些数据被连接到因特网路由器上进行加密,数据在Internet上是以加密的形式传送,当加密数据到达目的
LAN的路由器时,该路由器自动地对加密数据进行解密,这样目标
LAN中的用户就可以看到真实的信息了。
10.PGP加密软件 具有非常好的隐秘性
PGP(
Pretty Good Privacy)是一个基于
RSA公钥加密体制的邮件加密软件。可用它对邮件加密以防止非授权者阅读,
PGP还能对用户的邮件加上数字签名(
fingerprint
,指纹),从而使收信人可以确信该邮件是由该用户发出的。它让用户可以安全地和从未见过面的人们通信,事先并不需要任何保密通道来传递密钥。
PGP采用以下技术:审慎的密钥管理、一种
RSA和传统加密的杂合算法,用于数字签名的邮件摘要函数算法和加密的杂合算法、用于数字签名的邮件往往不加密前压缩等,还有一个良好的人机工程设计。它功能强大、速度很快,而且其源代码是免费的。
实际上
PGP的功能还不止上面说的,
PGP可以用来加密文件,还可以用
PGP代替
UUencode生成
RADIX64格式(就是
MIME的
BASE 64格式)的编码文件。
PGP的创始人是美国的 Phil Zimmermann。他的创造性在于他把 RSA公钥体系的方便和传统加密体系的高速度结合起来,并且在数字签名和密钥认证管理机制上有巧妙的设计。因此 PGP成为几乎最流行的公钥加密软件包。
PGP是一种供大众使用的加密软件。
PGP的创始人是美国的 Phil Zimmermann。他的创造性在于他把 RSA公钥体系的方便和传统加密体系的高速度结合起来,并且在数字签名和密钥认证管理机制上有巧妙的设计。因此 PGP成为几乎最流行的公钥加密软件包。
PGP是一种供大众使用的加密软件。
加密是为了安全,私私权是一种基本人权。在现代社会里,电子邮件和网络上的文件传输已经成为生活的一部分。邮件的安全问题也就突出了,大家都知道在因特网上传输的数据是不保密的。如果用户不采取相应措施,来保护自己的数据,第三者(或黑客)就会轻易获得用户的隐私,进一步达到要挟或恐吓正常用户的目的。还有一个问题就是信息认证,如何让收信人确信邮件没有被第三者篡改,就需要使用数字签名技术。
RSA公钥体制的特点使它非常适合用来满足上述两个要求:保密性(
privacy)和认证性(
authentication)。
RSA(Rivest-Shamir-Adleman)算法
基于大数不可能被质因数分解假设的公钥体系。简单地说就是找两个很大的质数。一个公开给世界,一个不告诉任何人。一个称为
"公钥
",另一个叫
"私钥
"(
Prblic key & Secret key or Private key)。这两个密钥是互补的,也就是说用公钥加密的密文可以用私钥解密。反之同理。假设甲要寄信给乙,他们互相知道对方的公钥。甲就用乙的公钥加密邮件寄出,乙收到后就可以用自己的私钥解密出甲的原文。由于别人不知道乙的私钥,所以即使是甲本人也无法解密那封信,这就解决了信件保密的问题。另一方面,由于每个人都知道乙的公钥,他们都可以给乙发信,那么乙确信是不是由甲发过来的信。认证便出现了,这时就要使用数字签名。
邮件文摘message digest
在说明数字签名前,先要解释一下什么是
"邮件文摘
"(
message digest),简单地讲就是对一封邮件用某种算法找出一个最能体现这封邮件属性特征的的数来,一旦邮件有任何改变这个数都会跟着起变化,那么这个数加上用户的名字(实际上在用户的密钥里)和日期等等,就可以作为一个数字签名。确切地说
PGP是用一个
128位的二进制数进行为
"邮件文摘
"的,用它来产生的算法叫
MD5(Message Digest 5),
MD5的提出者是
Ron Rirest,
PGP中使用的代码是由
Colin Plumb 编写的,
MD5本身是公用软件,所以
PGP的法律条款中没有提到它。
MD5是一种单向散列算法,(它不像校验码),可获得一份替代的邮件与原件具有同样的
MD5特征值。
假如,甲用自己的私钥将上述的
128位值加密(数字签名),附加在邮件后,再用乙的公钥将整个邮件加密(注意这里的次序,如果先加密再签名的话,别人可以将签名去掉后签上自己的签名,从而篡改了签名)。当这份密文被乙收到后,乙必须用自己的专一密钥对该邮件解密,得到甲的原文和数字签名,乙的
PGP也从原文计算出一个
128位的特征值来和用甲的公钥解密签名所得到的数进行比对,如果符合特征值,说明这份邮件确实是由甲寄来的。这样两个安全性要求都得到满足。
数字签名的不可抵赖性
PGP还可以只签名而不加密,这适用于公开发表声明时,声明人为了证实自己的身份(在网络上只能如此了),可用自己的私钥签名,这样就可以让收件人能确认发信人的身份,也可以防止发信人抵赖自己的声明。这一点在商业领域有很大的应用前途,可以防止发信人对诸如商业合同、信誉担保等文件的抵赖和该文件被途中篡改等。
IDEA(国际数据加密算法)
为什么说
PGP用的是
RSA和传统加密的杂合算法呢?
因为
RSA算法计算量很大而且在速度上也不适合加密大量数据,所以
PGP实际上用来加密的不是
RSA本身,而是采用了一种叫
IDEA的传统加密算法,首先解释一下什么叫传统加密,简单地说
就是用一个密钥加密明文,然后用同样的密钥解密。这种方法的代表是
DES(US Federal Data Encryption Standard),
也就是乘法加密,它的主要缺点就是公共通讯传输网络解决不了安全性问题,不适合网络环境邮件加密需要。
IDEA是一个有专利的算法,专利持有者是
ETH和一个瑞士公司:
Ascom-Tech AG。非商业用途的
IDEA实现不用向他们交纳费用。
IDEA的加(解)密速度比
RSA快得多,(据文献介绍测算出
IDEA比
DES快两倍,比
RSA算法快
100倍)所以实际上
PGP是以一个随机生成的密钥(每次加密)用
IDEA算法对明文加密,然后再用
RSA算法对该密钥加密。这样收件人同样是用
RSA解出这个随机密钥,再用
IDEA解密邮件本身。这样的链式加密就做到了既有
RSA体系的保密性,又有
IDEA算法的快捷性。
PGP的链式加密就做到了既有
RSA体系的保密性,又有
IDEA算法的快捷性。
PGP的创意有一半就在这一点上了,为什么
RSA体系
70年代就提出来,一直没有推广应用呢?速度太慢!那
PGP创意的另一半在哪儿呢?
PGP的密钥管理
一个成熟的加密体系必然要有一个成熟的密钥管理机制配套。公钥体制的提出就是为了解决传统加密体系的密钥分配过程中保密的缺陷。比如网络黑客们常用的手段之一就是
"监听
"(
monitor),如果密钥是通过网络传送就太危险了。举个例子:
Novell Netware的老版本中,用户的密码是以明文在线路中传输的,这样监听者轻易就获得了他人的密码。当然
Netware4.1中数据包头的用户密码现在是加密的。对
PGP来说公钥本来就要公开,就没有防监听的问题。但公钥的发布中仍然存在安全性问题,例如公钥被篡改(
public key tampering),这可能是公钥密码体系中最大漏洞
,因为大多数新手不能很快发现这一点。用户必须确信用户的公钥属于它看上去属于的那个人。为了把这个问题说清楚,先举个例子进行说明,然后再说如何正确使用
PGP堵塞这个漏洞。
以用户和
Alice通信为例,假设用户想给
Alice的公钥,用户从
BBS上下载了
Alice的公钥,并用它加密信件,用
BBS的
Email功能发给了
Alice。不幸的是,用户和
Alice都不知道,另一个叫
Charlie的用户潜入
BBS,把他自己使用
Alice的名字生成密钥对中的公钥偷偷更换了
Alice的公钥。那用户用来发信的公钥的用户名
"Alice"。于是
Charlie的公钥来转发用户给
Alice的信,这样谁都不会起疑心他如果想找用户发给
Alice的信也是很容易的事,更有甚者,他还可伪造
Alice的签名给用户或其他人发信,因为用户手中的公钥是
Charlie伪造的,用户会以为真是
Alice的来信。
介绍人确认公钥——公共渠道传递公钥的安全手段
防止上述情况出现的最好办法是避免让任何其他人有机会篡改公钥,比如直接从
Alice手中得到她的公钥。然而当她在千里之外或无法见到时,这是很困难的。
PGP发展了一种公钥介绍机制来解决这个问题。举例来说:如果用户和
Alice有一个共同的朋友
David,而
David知道他手中的
Alice的公钥是正确的(关于如何认证公钥,
PGP还有一种方法,后面会谈到,这里假设
David已经和
Alice认证过她的公钥)。这样
David就成为用户和
Alice之间的
"介绍人
"。这样
Alice或
David就可放心地把经过
David签过字的
Alice的公钥上载到
BBS上供用户去拿,没人可能去篡改它而不被用户发现,即使是
BBS的管理员。这就是从公共渠道传递公钥的安全手段。
有人会问:如何安全地得到
David的公钥呢。这是个先有鸡还是先有蛋的问题吗?确实有可能用户拿到的
David的公钥也是假的,但这就求这个捣蛋者参与整个过程,他必须对你们三人都很熟悉,还要策划很久,这一般不可能,当然,
PGP对这种可能也预防的建议,那就是由一个大家普遍信任的或机构担当这个角色,他被称为
"密钥待者
"或
"认证权威
",每个由他签字的公钥都被认为是真的,这样大家只要有他的公钥就行了,证明此人的公钥是方便的,因为他广泛提供这种服务,假冒他的公钥是极困难的,而因为他的公钥流传广泛。这样的
"权威
"适合由非个人控制的组织或政府机构充当,现在已经有等级认证制度的机构存在。(
CA认证机构)
对于那些非常分散的用户,
PGP更赞成使用私人方式的密钥转介方式,因这样有些非官方途径更能反映出人们自然的社会交往,而且人们也能自由地选择信任的人来介绍,总之和不认识的人们之间的交往一样,每个公钥至少有一个
"用户名
"(
User ID),请尽量用自己的全名,再加上本人的
E-mail地址,以免混淆。
转介认证机制
下面,介绍如何通过电话认证密钥。每个密钥有它们自己的标识(
keyID),
keyID是一个
8位十六进制数,两个密钥具有同
keyID的可能性十亿分之一,而且
PGP还提供了一种更可靠的标识密钥的方法:“密钥指纹”
( keys fingrprint ).每个密钥对应一串数字(
16个
2位十六进制数),这个指纹重复的可能就更微乎其微了。而且任何人无法指定生成一个具有某个指纹的密钥,密钥是随机生成的,从指纹也无法反推出密钥来。用户拿到某人密钥后,就可和他在电话上核对这个指纹,从而确认他的公钥。
这又引出一方法,就是把不同签名自己的公钥收集在一起,发送到公共场合,这样可以希望大部分人至少认识其中一个,从而间接认证了用户的公钥。同样用户签了朋友的公钥后应该寄回给他,这样就可以让他通过用户,被用户的其他朋友所认证。有点意思吧,和现实社会中人们的交往一样。
PGP会自动为用户拿到的公钥中有哪些是朋友介绍来的,它会把它们分为不同的信任级别,供用户参考决定对它们的信任程度。也可指定某人有几层转介公钥的能力,这种能力是随着认证的传递而递减的。
转介认证机制
具有传递性,是个有趣的问题。
PGP的作者
Phil Zimmermann说过一名话:“信赖不具:我有个我相信决不撒谎的朋友。可是他是个认定不撒谎的傻瓜,很显然我并不认为总统决不撒谎。”
私钥的保存
与传统单密钥体系一样,私钥保密是决定性的。相对公钥而言,私钥不存在被篡改的问题,但存在泄露的问题。
RSA的私钥是很长的一个数字,用户不能将它记住,
PGP的办法是让用户为随机生成的
RSA私钥指定一个口令(
pass phase)。只有通过给出口令才能将私钥释放出来使用,用口令加密私钥的方法保密程度和
PGP本身是一样的,所有私钥的安全性对用户穷举法试探出用户的口令,虽说很困难但毕竟是损失了安全性。这里只要简单地记住一点,要像任何隐私一样保藏自己私钥,认证有机会接触到它,最好只在大脑中保存它,不要写在纸上。
PGP在安全性的审慎考虑体现在
PGP的各个环节。比如每次加密的实际密钥是随机数,大都知道计算机无法产生真正的随机数的。
PGP程序对随机数的产生是很审慎的,关键的随机数(像
RSA密钥的产生)是从用户敲键盘的时间间隔上取得随机数种子的。对于磁盘上的
rand seed.bin文件中分析出钥的规律来。
在这里提一下 PGP的加密前预压缩处理, PGP内核使用 PKZIP算法来压缩加密前的明文。一方面对电子邮件而言,压缩后加密再过 7 bits编码密文有可能比明文更短。这就节省了网络传输的时间。另一方面,明文经过压缩,实际上相当经过一次变换,信息更加杂乱无章,对明文抵御能力更强。 PGP中使用的 PKZIP算法是经过原作者同意的。 PKZIP算法是个公认的压缩率压缩速度都相当好的压缩算法,在 PGP中使用的是 PKZIP2.0版本兼容的算法。
在这里提一下 PGP的加密前预压缩处理, PGP内核使用 PKZIP算法来压缩加密前的明文。一方面对电子邮件而言,压缩后加密再过 7 bits编码密文有可能比明文更短。这就节省了网络传输的时间。另一方面,明文经过压缩,实际上相当经过一次变换,信息更加杂乱无章,对明文抵御能力更强。 PGP中使用的 PKZIP算法是经过原作者同意的。 PKZIP算法是个公认的压缩率压缩速度都相当好的压缩算法,在 PGP中使用的是 PKZIP2.0版本兼容的算法。