您的位置:首页 > 理论基础 > 计算机网络

[网络安全五]PKI技术基础I

2007-05-13 21:34 393 查看
密码技术解决的四个最基本的问题:
(1)信息保密性-您的通信信息或隐私被别人偷看了吗?
(2)信息完整性-其他人发给您的消息或者您发给其他人的消息被人篡改甚至伪造了吗?
(3)行为不可否认性-其他人会否认他给您发送的信息内容吗?
(4)身份认证性-和您通信的人是您所了解的真实的那个人吗?

1 对称密码的原理
自从人类有了战争,智慧的人们就想出了很多的办法来解决通信保密问题,把需要通信的消息按固定规律转变成没有意义的乱码,而只有指定的合法接收者和自己才能恢复解读出来,这就是密码学的基本思想。

通常,人们总是会有很多的秘密信息需要保护,比如个人的信用卡账号,个人的医疗记录和财政细节等等;企业也有秘密,例如战略报告、销售预测、公司财务、技术产品的细节、研究成果、人员档案等,密码学上将这些需要保护的原始信息称为明文。为了确保明文信息不被别人获知,在将这些明文保存在某个地方或从网络上传送出去之前,需要用某种方法(通常是数学方法)把它伪装起来以隐藏它的真实内容(伪装后看起来就像一段毫无意义的乱码,而不是熟悉的单词或其它语言文字),我们把伪装的这个过程称为加密,把伪装采用的方法称之为加密算法,(明文)伪装后得到的结果(乱码)称之为密文;相反地,把密文恢复成明文的过程称为解密,恢复时所用的方法称为解密算法。图4形象地描述了上述加密和解密过程。

上述这个过程还不是一个足够安全的过程。因为无论是加密算法还是解密算法,我们都可以用软件(一段程序)或者硬件(加密机或加密卡)来实现。如果我们能绝对地保证加密和解密算法是保密的(例如只有通信双方知道),那么自然可以达到保密的效果。可事实上并非如此,实践证明,保护一段程序(而且是不小的程序)或者保护一个硬件(加密机或加密卡)是秘密的,和直接保护明文信息是秘密的,是一样的困难,高明的密码破译者们总能找到我们用来保密的加密算法和解密算法,从而找到我们要保密的信息。更何况,如果我们有办法保全加密算法或解密算法是秘密的,那么我们何不用之以直接保全我们的明文信息呢?密码学家们最终放弃了保密加解密算法的念头,而选择了设计一类新的加解密算法,在用这类算法加密时需要引入一个只有自己知道的秘密参数(很短的一段秘密信息,保存起来比较方便),密码学家把它称为密钥;而且只有拥有同样密钥的人才能解密阅读被加密的明文

顾名思义,"密钥"就是秘密的钥匙,起初人们总是把加解密比喻成利用钥匙给坚固的保险箱上锁开锁。这里"带锁的保险箱"好比是密码算法,可以用来保存明文文件,"钥匙"好比是密钥,"将明文文件放入保险箱并用钥匙锁上"就是加密过程,相反地,用钥匙将"锁有文件的保险箱"打开取出文件就是解密过程。整个过程如果没有钥匙,其他人即使能看到上锁的保险箱(密文),也不可能取出该文件,从而达到了保密的效果。

通常,人们用同一把钥匙进行上锁或开锁,上锁时,把钥匙插入锁里并旋转,锁的栓和结构就以预定好的方式形成障碍以阻止门被打开;开锁时,插入钥匙并反方向旋转,锁的栓和结构就会以相反的方式工作,使门可以打开。在这里,我们用了同一把钥匙(当然你也可以用两把完全相同的钥匙,例如在配锁店配置的)进行上锁和开锁,也就是说我们用于加密(上锁)和解密(开锁)的密钥(钥匙)是完全相同的,我们把这种加密密钥和解密密钥相同的密码称之为对称密码。

或许我们更愿意来看一个简单的对称密码的例子。传说在公元前一世纪,古罗马的恺撒大帝出于军事目的发明了一种对称密码,我们称之为"恺撒密码"。这种密码是针对26 个英文字母(不区分大小写)在字母表中的排列位置来设计的,每个字母都有一个固定的位置,用数字来表示的话,A的位置为1,B的位置为2,Z的位置为26等等

26个英文字母:ABCDEFGHIJKLMNOPQRSTUVWXYZ
转换后的字母:FGHIJKLMNOPQRSTUVWXYZABCDE

下面我们不妨对这些字母作这样一个变换:将每个字母变换为与它位置间隔为5的那个字母。例如,与A间隔为5的字母为F,与B间隔为5的字母为G,…… ,与Z间隔为5的字母为E。因此,我们将A变成F,B 变成G, ……Z变成E。

现在让我们来看看这将发生什么吧。假设恺撒在一次战役中损失惨重,他需要告诉盟军自己的处境并请求支援。现在他用"恺撒密码"加密一条消息,"IAMINDANGER"(意思是"我处境危险"),加密后将变成什么呢?根据字母转换对照表,"IAMINDANGER"将被加密成"NFRNSIFSLJW"

"NFRNSIFSLJW"是一段毫无意义的乱码,只有恺撒的盟军能够用恺撒密码将其恢复成明文而获知其义(因为恺撒事先将密码算法和密钥告诉了自己的盟军);而即便消息不慎落入了敌军之手,敌军也将因为不能获知消息内容,从而不会对恺撒产生进一步的不利。

这里,恺撒密码的密钥为5。当然,恺撒也可采用其它间隔作为加密密钥,例如采用间隔6,10,26等等。

"恺撒密码"是古典密码中较为经典的一种,它产生于特定的条件,在当时用于军事目的,在保障己方军事秘密,迷惑敌人方面起到了非常重要的作用。但这种密码相对于现代密码破译技术而言,显得捉襟见肘,很容易被攻破,因此我们不得不采用比"恺撒密码"复杂得多,安全强度强得多的密码技术。现在国际上广泛采用的而且被证明足够安全的对称密码算法有3DES,IDEA,RC2,RC4,RC5等,当然还有很多其它好的算法。我们不必记住这些名字,我们只需知道,采用这些算法,再加上一个具有足够长度的密钥,就能确保我们要保护的信息是秘密的,安全的,而且在任何情况下都不会被他人获知(除非你主动把密钥给他)。

现在我们可以稍微轻松一下来做一个小结。很显然,对称密码技术能帮助我们解决前面提到的四个问题当中的第一个问题,即信息保密性问题。采用对称密码加密,从此我们不用再担心通信信息或隐私被他人偷看了!

然而其它三个问题仍然是重要的。

还有一点不容忽视,由于对称密码用于加密和解密的密钥是完全相同的,因此,当您想和谁传递一个秘密消息时,您不得不和他事先单独找个地方一起协商好相互间的密钥并非常小心地保管好它;如果您同时又要和另外一个人传递秘密消息,那么您也不得不和他事先协商好另外一个密钥(之所以要另外一个密钥,是因为您总是不会希望自己的一个秘密被太多人知道),这也就意味着和您通信的人越多,您需要协商和保存的不同密钥就越多。这可是一件费时又费力的苦差事,您甚至有可能会分不清哪个密钥是用来和哪个人通信的。那么,有没有更简单的方法呢?能不能不用保存密钥,而只是在需要通信的时候临时产生密钥?如果临时产生密钥,我该如何将密钥安全地传递给那个要和我通信的人呢?因为他可能和我相距很远。

2 公钥密码的诞生

如果和100个人通信,就要保管100个密钥,和1000个人通信,就要保管1000个密钥,这绝对不是一个好主意。这个问题不解决,将极大影响密码技术在更大范围的推广使用。

然而1976年,美国斯坦福大学的研究生Diffie和教授Hellman极富想象力和创造力的设想,注定要引来密码学思想上的一场深刻变革。Diffie和Hellman是基于这样一种考虑的,即用于加密和解密的密钥是两个不同的但又相互关联的密钥(这与对称密码不同,对称密码中加密和解密密钥是相同的,参考图5)。让我们仍然以前面提到的"带锁的保险箱"为例,来看看这将有什么不同。前面我们说过,一般来说,对一个普通的锁,我们总是用相同的钥匙进行上锁和开锁的。现在,我们假设有一位聪明绝顶的锁匠打造了这样一种"独特的锁",之所以说独特,是因为这种锁配备有两把不同的钥匙,而且当我们用其中一把钥匙把锁锁上时,必须而且只能用另外一把钥匙才能打开。

这种锁确实有点独特,但不管怎样,我们每个人都拥有了这样一把锁,并且拥有了属于自己的两把钥匙。那么,我们是否必须要保管好这两把钥匙并保证它们是绝对的秘密的呢?我们说不完全是这样的。Diffie和Hellman的想法是,我们每个人都只需要保管好其中一把钥匙并保证它是秘密和安全的,而另一把钥匙则需要大家慷慨解囊贡献出来,并放在一个任何人都能够看到,都能够取到的地方,也就是说另一把钥匙是需要公开的。(至于怎么样公开,在哪公开,我们将在下一章详细说明。)

也许我们应该回到正题了。有了这种锁,我们怎么样利用它来传递自己的秘密呢?假如Alice 要给Bob发送一份商业订单,她该怎么做呢?

为了下面叙述的方便,我们不得不先来说一些名词。我们把上面所说的这种独特的锁称为公钥密码(算法)(也可称为非对称密码(算法)),与锁配对的两把钥匙称为密钥,其中公开的那把钥匙称为公钥,自己保管的那把钥匙称为私钥。用公钥把锁锁上的过程称为公钥加密,用私钥把锁打开的过程称为私钥解密。

假设Alice要给Bob发送如下一条订购信息:"今欲向贵方订购ZB-105型号貂皮大衣100件,订购价每件壹仟(¥1000)元人民币,合计人民币拾万(¥100,000)元整。请务必于2004年7月31日之前将全部货物送达我方指定地点。订购日期:2004年6月27日。"

这是Alice和Bob之间的一条商业订单信息,因此,Alice希望能绝对保密,并只让Bob能知道。为此,Alice可把订单放入"保险箱"(这只是一个数字保险箱,而非真实保险箱)中,并用Bob的公钥(Alice 总是能取到)给"保险箱"上锁(加密),然后通过Internet将"保险箱"邮寄给Bob

这样就可以了吗?是的。由于"保险箱"是用Bob的公钥锁上的,只有Bob才能用他的私钥打开"保险箱"阅读订单,任何其他人因为没有Bob的私钥而无法做到这一点。

Alice再也不用因为要与Bob秘密通信而事先与Bob协商好一个对称密钥并费尽心思去保管它,她所需作的只是在给Bob传递秘密前取到Bob的公钥(这是非常容易办到的)。同样,Alice与John,Tom或任何其他人通信时也一样。

到现在为止,我们介绍了两种不同的"保险箱",一种是带有普通锁的对称密码保险箱,另一种是带有独特锁的公钥密码保险箱,也称非对称密码保险箱。而且,非对称密码保险箱看起来似乎更好,因为它不需要我们保存很多很多的密钥。但事实是,两种保险箱各有优缺点:对称密码保险箱的诞生和使用由来已久,迄今为止,各式各样的对称密码保险箱(算法)不断被设计、被使用,目前在国际上广泛使用的对称密码保险箱(算法)具有足够的安全强度,且加解密速度非常快,其缺点是所有这些对称密码保险箱(算法)均无一例外地需要事先协商好密钥,因此带来密钥管理上的困难;公钥密码保险箱的思想自1976年由Diffie和Hellman提出来以后,在两年后的1978年,才正式由美国麻省理工大学的三位知名教授Rivest、Shamir和Adleman等人联合设计出来,密码学上称为RSA(三人名字的第一个字母)公钥密码系统。公钥密码用全新的方式解决了对称密码存在的密钥管理难的问题,但其缺点是加密解密速度较慢,大概仅是对称密码的几千分之一。您大概不会愿意花十几分钟来传送一篇WORD文档吧。

因此,公钥密码一般不用于直接加密消息。现实的做法是,将对称密码与公钥密码结合起来使用。当您要向对方传递一个秘密消息的时候,您临时产生一个对称密钥,用对称密码保险箱加密消息文件,同时你用公钥密码保险箱加密刚才产生的对称密钥(因为对称密钥一般数据量很小,加密起来只需用很短的时间),然后您将两个保险箱同时传递给对方。对方可以首先用自己的私钥打开公钥密码保险箱取出对称密钥,然后用对称密钥打开对称密码保险箱取出消息文件阅读。这种传递秘密的方式,既克服了对称密码需要事先商量好密钥的问题,又弥补了公钥密码直接加密消息速度慢的缺点。同时,用公钥密码保险箱安全传递对称密钥,就好比用保密信封邮寄钥匙一样,因此我们形象地称之为"数字信封"。

下面我们将花费一点时间来讲一下公钥密码保险箱的另一种使用方法。还举前面提到的Alice给Bob发送商业订购单的例子吧。前面我们说,Alice是用Bob的公钥给保险箱上锁安全传递订购单, Bob用自己的私钥打开保险箱取出订购单阅读的。但如果Alice 不这样做呢?如果Alice是用自己的私钥(Alice自己保管的那把秘密的钥匙)给保险箱上锁,那将出现什么情况呢?

Alice的商业订单仍然能够保证是秘密的吗?显然不能,任何人都能够打开保险箱阅读该订单,因为他们打开保险箱只需要取得Alice的公钥,而这是非常容易的(因为Alice的公钥已经公开,谁都可取到)。因此,这种方式不能保证订单的秘密,但它却能证明这个订单是Alice发出的,并且订单内容没有被更改过,而且订单一旦发出,Alice 将无法否认这个事实。这点对Bob非常重要,因为他必须清楚的知道订单是谁发出的,并且订货量是多少,这样才不至于到时把货发错地方,或者因为货物生产得太少或过多而对自己产生不利。

下面我们将解释一下原因。

保险箱是用Alice的私钥上锁的,Bob收到保险箱后,将尝试用Alice的公钥打开保险箱,如果打开成功了,则表明该保险箱是Alice发出的(因为如果是Alice以外的人锁上并发出保险箱的话,则用Alice的公钥将无法打开)。那么保险箱中的文件内容是真实的吗?任何除Alice以外的人要想篡改保险箱中的内容并且不让他人发现的话,他必须首先用Alice的公钥打开保险箱,取出文件更改后放入其中,然后再用Alice的私钥将保险箱锁上(这样看起来才和原来的一模一样)。但他却无法做到这一点,因为他永远得不到Alice的私钥,Alice的私钥只有Alice本人拥有。

当然,如果Bob收到保险箱后,用Alice的公钥根本就打不开保险箱,那么他应该把保险箱丢弃,因为这个保险箱要么不是Alice发出的,要么保险箱中的内容被人篡改过而不可信。

让我们再来回忆一下上面这个过程吧。Alice用自己的私钥给保险箱上锁,就能够保证让对方相信文件是自己发出的并且文件内容是真实的,这有点类似现实生活中人们用笔在文件上署名,或者公司在合同上盖章来证明文件或合同的真实性一样,我们给它起了一个形象的好记的名字叫"数字签名"。有了数字签名,Alice能否认他已经发过的一个文件吗?不能!这就像我们在文件或合同上签过字盖过章一样,我们将无法否认它。

还记得我们前面提到的四个问题吧?"数字签名"是不是能解决其中的第二和第三两个问题呢?答案是肯定的。

接下来我们只剩下第四个问题需要解决,即我怎么样才能知道和我通信的那个人就是我所了解的真实的那个人呢?看起来数字签名也帮我们解决了这个问题,因为我们总能够用Alice的公钥来验证保险箱(尝试将其打开)是不是Alice发出的。但问题在于公钥只是一串随机的数字,它并没有记录上Alice的名字,就像我们钥匙上不会记录钥匙持有人的名字一样。前面我们反复提到,我们总是能取到Alice的公钥,但究竟怎么取呢?我们怎么知道所取到的公钥就是Alice的呢?换句话说,我们每个人该怎样公布我们那把公开的钥匙,并将钥匙和我们的名字捆绑在一起呢?

当人们谈到身份时,自然而然就会想到公安机关给每个人颁发的居民身份证。在现实生活中,人们用身份证去办很多事情,如住宿酒店、到银行提款或者参加国家举办的某个统一考试等等,身份证总能为我们免去许多麻烦。那么在虚拟的网络世界呢?我们是否也需要这样一个类似的网络身份证呢?答案是肯定的。密码学家们以现实世界的居民身份证为参考模型,设计了一种用于虚拟世界的网络身份证------数字证书,并且通过数字证书巧妙地将公钥及其拥有者绑定在一起。

现在,我们有了数字证书,有了加密、签名技术,我们怎么样才能将它们结合起来使用以实现我们安全保密的目的呢?密码学界提出了公钥基础设施(public key infrastructure,简称PKI)的概念。

公钥基础设施,即PKI,是专门提供公钥加密和数字签名服务的综合系统,其最主要的任务就是要确立可信赖的数字身份,并管理数字证书及与数字证书相对应的密钥,换句话说,我们的公钥是要靠PKI来公布的,公钥与身份的绑定也要靠PKI来完成。

目前,国际上已逐渐形成了一整套成熟的PKI技术标准,建设PKI这个公钥密码的基础设施,就犹如20世纪80年代建设网络的基础设施一样重要。

(1) 信任的原理

PKI的最基本原理是互相信任。在互联网上的安全隐患中,最难解决的就是"可信任的关系",也即"我如何才能够被人信任?什么样的人我才可以相信?"的问题,因为在互联网中人们彼此不直接见面,完全处于一种虚拟的境界,"在Internet上,没人知道你是一条狗",这一"名言"就是对网民虚拟身份的生动写照。PKI目前已经成为网络信息安全的信任基础平台。

(2) 什么是认证中心(CA)?

只有先建立一个权威的、第三方的公正机构,才能建立认证中心。一般说来,我们把认证中心和该公正机构认为是同一概念,在PKI当中,认证中心(Certificate Authority,CA)是负责创建或者证明身份的可信赖的权威机构。

认证中心的权威来自于国家的授权。通常,国家授权一个第三方机构负责创建数字身份并允许其在一定范围内使用,这就像国家授权公安机关颁发居民身份证,授权机动车辆管理中心颁发驾驶执照一样。国家授权是至关重要的,有很多其它机构也能创建这样或那样的身份,但不见得有多少人会使用并信任它们。

被授权的认证中心在一定范围内颁发数字证书,人们通过在网络上彼此出示数字证书来证明各自的身份, Alice和Bob都信任认证权威CA,并都拥有CA颁发的数字证书。当Alice和Bob要在网络上通信时,他们彼此向对方出示数字证书,当双方各自都验证对方的数字证书是有效的之后,他们便认为彼此是值得信赖的。在这里,Alice 和Bob之间的信任关系是通过第三方认证中心CA建立起来的,我们称这种信任关系为第三方信任关系。

目前我们国家的认证中心是以省(直辖市)为区域来划分范围的。即国家在每个省(或省级市)都授权成立一个认证中心,由它们来负责各自省内数字证书的颁发和管理,并维护各自省内的信任环境。

由于认证中心负责的区域是有一定范围的,这将使数字证书的使用受到一定的限制,比如河南省的数字证书将不能在广东省使用,而广东省的数字证书在福建省则不被信任等等。要想打破这一界限,除非各省级认证中心相互之间实行交叉认证,而这或许是未来5年后的事情。那么,我们国家为什么不建立一个覆盖全国的认证中心呢?这个想法很好,可惜建立这样一个庞大的认证中心是困难的,而且我们国家目前还没有建设这样一个认证中心的完善的经验,因此这也将是未来几年后的事情。

(3) 什么是数字证书(Digital Certificate)?

前面我们已经提到,数字证书绑定了公钥及其持有者的真实身份,它类似于现实生活中的居民身份证,所不同的是数字证书不再是纸质的证照,而是一段含有证书持有者身份信息并经过认证中心审核签发的电子数据,可以更加方便灵活地运用在电子商务和电子政务中。

目前数字证书的格式普遍采用的是X.509 V3国际标准,内容包括证书序列号、证书持有者名称、证书颁发者名称、证书有效期、公钥、证书颁发者的数字签名等。

数字证书与居民身份证不仅在内容上极为相似,而且在使用和验证上也显得颇有雷同。回想一下您拿着存折到银行取款的情形吧。在您取到款之前,银行业务员将作些什么呢?如果他(她)是足够负责任的话,他(她)会要您出示您的存折和个人身份证,然后比对身份证的名字与存折的账户名是否一致,接着呢?他(她)会查验您的身份证是否有效,比如身份证是否在有效期之内、是否有公安机关的盖章、防伪标志是不是真实的等等。当验明您的身份证是有效的之后,营业员还将作最后一步操作,比照身份证上的照片和您本人是否一模一样。只有上述所有步骤均通过以后,营业员才会放心地把款发放给您,您也才能正大光明地取到您的款项。

那么,这些如果是在网络上进行呢?假如您要从名叫Alice的账户上划拨一笔款项,怎么样才能够安全地进行呢?这回您和银行是互不见面的,您不用也不会亲自去银行,但您仍然需要做两件事情:

第一, 您需要通过网络向银行出示您的数字证书;

第二,您需要向银行提交您的划款请求,当然您的请求是需要放在保险箱中并用您的私钥锁上的(因为请求中将涉及到账号或金额等敏感信息)。

(注:实际中将有一段程序为您完成这两件事情,而并非要您亲自去做,该程序还能确保您和银行之间在网络上的通信过程是秘密的。)

那么银行在收到您的数字证书及划款请求后将怎么做呢?首先,银行将确信数字证书的持有人就是Alice(看看数字证书中"证书持有者名称"一项即可);然后银行将验证该数字证书是否是有效的,这点和验证居民身份证的有效性完全类似,即验证数字证书是否在有效期之内,是否是可信的认证中心(比如河南省认证中心)颁发的,是否有认证中心的签名(类似于盖章)等等;接着,银行还将用数字证书中绑定的公钥(类似于身份证上的照片)来验证您向银行提交的保险箱(里面有您的划款请求),比如用公钥能打开保险箱的话,则证明保险箱就是您本人,也就是Alice提交的(因为只有您才有锁上保险箱的私钥),这有点类似于比对身份证上的照片和您本人,因为只有您才能照出您自己的照片。

数字证书真的是和居民身份证一模一样!理解了居民身份证,就不难理解数字证书。

与身份证一样,数字证书也需要发放到用户手中。但由于数字证书不再是纸质的,而是一些电子数据,因此需要一定的存储介质。目前,我们采用一个叫电子智能钥匙的硬件产品(类似于U盘)存储数字证书。电子智能钥匙小巧美观,携带方便,它保存用户的数字证书及私钥并能保证其安全,用户使用时,只需将电子智能钥匙插入电脑,就能方便地使用数字证书。

(4) 什么是注册机构(RA,Registration Authority)?

注册机构是从认证中心分离出来的专门负责对用户身份信息进行登记审核的机构。认证中心在给用户颁发数字证书之前,用户需要携带自己的有效身份证件(个人携带身份证或其它有效身份证件,企业携带法人营业执照等)到认证中心登记办理,认证中心需要对其身份进行审核。但由于用户遍及各地市,而认证中心通常只设在省级城市,这势必会给外地用户带来办理的不便。因此,认证中心通常会选择在各地市设立注册机构,用户可就近在当地的注册机构登记办理数字证书而不用直接到认证中心。这就像您办理身份证,只需就近在您所在的街道派出所登记而不用亲自到公安局身份证颁发中心办理一样。

(5)什么是证书发布系统(DA,Distributed Authority)?

前面我们多次提到,我们那把公开的钥匙(公钥)是需要对外公布的。怎么样公布,在哪公布呢?我们已经把公钥及其持有者的名字通过数字证书的形式绑定在一起,因此发布公钥只需发布数字证书。而这一工作是由认证中心的证书发布系统来完成的。证书发布系统把认证中心颁发的所有数字证书集中起来统一发布在一个公众目录服务器上,任何人都可以在这个公众目录服务器上查看自己想要的证书,这有点像现实生活中的电话号码簿一样,它把电话号码集中在一块供人查看。

此外,认证中心还将维护这些自己颁发的证书,一旦发现有过期或失效的证书,将主动将其吊销,并以"黑名单"(CRL)的形式发布在公众目录服务器上,用户可通过查看"黑名单"获知哪些证书是可信的,哪些证书是不可信的。

--本文节选自http://hnca.com.cn/study/zsmt/mt_3.htm
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: