⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 204.htm

📁 探索Windows 2000发展策略以及中介层技术设计的基本概念
💻 HTM
📖 第 1 页 / 共 5 页
字号:
<html><body><span  id=Layer1><p><font size=2 color=#3c3c3c face=arial>公开金钥技术是二十世纪最伟大的主意。优雅、功能强大、很有用,同时也普遍地存在。今天公开金钥解决方案存在於爆炸的Internet商务的世界之下,这项技术也可以套用到其它的领域。若要有效地使用这个技术,便须建立公开金钥基础架构(public key infrastructure,PKI),提供必要支援的服务。若没有这个架构的话,这个核心技术的美妙主意就没那麽有用了。</span><span  id=Layer2></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>公开金钥技术依赖於公开金钥基础架构 (PKI)</span><span  id=Layer3></font></p><hr><p><font size=2 color=#3c3c3c face=arial>在Microsoft Windows 2000,每一个网域都会使用Kerberos  它是分散式安全性的核心协定。相形之下,如果Windows 2000完全地忽略对公开金钥技术的支援,一家公司便不可能成功地使用Windows 2000。大部份的公司可能不希望这麽做,因此不用太讶异,Windows 2000提供许多对公开金钥内建的支援。本章描述支援的部份,一开始我们将介绍公开金钥技术的基本概念。然後描述Windows 2000提供的PKI特性,最後再以安全通讯端阶层(Secure Sockets Layer (SSL)  今日最广泛使用的以公开金钥为基础的安全性协定做为结束,并简短解释公开金钥技术如何用在Kerberos上。</span><span  id=Layer4></font></p><a name=204001><font color=#3e70d7 face=arial size=5><b>了解公开金钥技术</span><span  id=Layer5></b></font><p><font size=2 color=#3c3c3c face=arial>了解公开金钥(public key)技术如何运作以及管理公开金钥环境中必要的东西,对程式设计师与系统管理者两者来说是很重要的。当这项技术被更广泛使用时,它的术语与概念更与分散式环境的许多观点契合。虽然今日使用许多的公开金钥加密演算法,这一节中只介绍常用的选择,在Windows 2000与其它地方:Rivest-Shamir-Adelman (RSA)演算法,以叁名创作者的名字来命名。</span><span  id=Layer6></font></p><font color=#3e72d7 face=arial size=4><b>金钥与加密</span><span  id=Layer7></b></font><p><font size=2 color=#3c3c3c face=arial>在一个安全性的演算法中,如Data Encryption Standard (DES)或RC4,使用相同的金钥来对资料加密与解密。为了安全地沟通,两个沟通者都需要知道这个金钥。就如同在最後一章中所描述,这不可避免地会造成金钥分布的问题  一旦建立後,这个秘密金钥如何传送到需要知道它的人的身上? Kerberos提供一个方法来安全地分布金钥,这个解决方案假设牵涉到安全沟通的所有的principal共享(直接或间接)信任的Key Distribution Centers (KDCs),同时这些沟通者共享KDC中其中一把金钥。</span><span  id=Layer8></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>  密金钥技术需要两个principal都知道相同的金钥</span><span  id=Layer9></font></p><hr><p><font size=2 color=#3c3c3c face=arial>公开金钥技术则采用截然不同的方案。不采取在两个或多个principal之间共享一把钥匙的方法,公开金钥技术指派两个不同的金钥,通常称为金钥配对(key pair),给每个principal。其中一把钥匙是私人保存的,只有沟通的人才知道。另一把钥匙则是完全公开的,因此每个人都可以取得。这些私密与公开的金钥相互之间是有关系的,它们并非是由乱数产生的号码。当然,得知一个principal的公开金钥并不能判断出principal的私密金钥。Windows 2000提供产生配对金钥的技术,不过现在真正有趣的是这两把钥匙:任何东西透过这对钥匙的其中一把转换过後,可以由另一把钥匙还原成原来的状态。</span><span  id=Layer10></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>在公开金钥技术,每个沟通者都拥有公开金钥与私密金钥</span><span  id=Layer11></font></p><hr><p><font size=2 color=#3c3c3c face=arial>假设你要传送给我一个讯息,通知我QwickBank已被卖掉了。不过你并不要任何人知道这个资讯。透过秘密金钥(secret key)的加密,你和我两者都需要知道用来加密这个讯息的秘密金钥,并产生金钥散布的问题。不过使用公开金钥加密,金钥的散布就再也不是个问题了。理论上你唯一要做的事便是取得我的公开金钥,然後使用它来进行加密,如图4-1。这把金钥的定义不是个秘密,因此我可以把它以任何我喜欢的方式传送给你,如透过电子邮件。也因为使用我的公开金钥加密的所有东西只能够透过我的私密金钥(private key)解密,这把金钥只有我知道,只有我可以读取这个加密的讯息。若我希望传送一个回应,我可以取得你的公开金钥,然後使用它来加密只有你可以读取的讯息。透过公开金钥加密,金钥交换的问题便让使用秘密金钥加密的使用者之痛苦消失了。</span><span  id=Layer12></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>一个principal可以使用它的公开金钥来加密资料</span><span  id=Layer13></font></p><hr><br><center><a target=_new href=imagesh/4-1.gif><img border=0 src='imagesl/4-1.gif'></a></center></span><span  id=Layer14><center><table border=0 ><td align=center><font color=#3c3c3c face=arial size=2><font size=2 face=arial color=#3e80d7><b>&nbsp;图4-1</span><span  id=Layer15>&nbsp;</b></font>在公开金钥加密中,唯一解密的方法即为principal私密金钥。</span><span  id=Layer16></td></table></font></center><p><font size=2 color=#3c3c3c face=arial>再者,就因为每样东西都是使用我的公开金钥转换,只可以使用我的私密金钥还原,任何使用我的私密金钥转换的东西只可以使用我的公开金钥还原成原始的状态。因为每个人都可以知道我的公开金钥,使用我的私密金钥来加密资料并没有什麽意义。不过,我可以使用我的私密金钥产生一个数位签章(digital signature)来证明我的身份。</span><span  id=Layer17></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>一个principal可以使用它的公开金钥来加密资料</span><span  id=Layer18></font></p><hr><p><font size=2 color=#3c3c3c face=arial>数位签章真正运作的过程将描述於下一节,不过一般的概念是:假设我要传送一个讯息通知你QwickBank已被卖掉了,而我想要你确认这个讯息是从我这边发出的。如图4-2所示,我可以使用我的私密金钥对这个讯息进行签名,产生一个数位签章,然後将这个签章随着讯息传送。然後你可以使用我的公开金钥来验证你收到的签章。因为只有我知道我的私密金钥,只有我可以为这个讯息签名,因此讯息一定是我送的。由於我知道自己的私密金钥,因此我可以自我验证。</span><span  id=Layer19></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>一个principal的公开金钥可以用来验证数位签章</span><span  id=Layer20></font></p><hr><br><center><a target=_new href=imagesh/4-2.gif><img border=0 src='imagesl/4-2.gif'></a></center></span><span  id=Layer21><center><table border=0 ><td align=center><font color=#3c3c3c face=arial size=2><font size=2 face=arial color=#3e80d7><b>&nbsp;图4-2</span><span  id=Layer22>&nbsp;</b></font>使用一个principal的私密金钥签章过的资讯,只可以使用这个principal的公开金钥验证。</span><span  id=Layer23></td></table></font></center><p><font size=2 color=#3c3c3c face=arial>公开金钥加密是一项伟大的技术,不过它也有一些缺点。其中一个,金钥的长度可能会很长。和8位元组DES金钥,或5、7、16位元组的RC4不同,RSA金钥通常为512位元(64位元组)、1024位元(128位元组),或更长。此外,并非任何配对的字串都可以当做公开金钥与私密金钥。而是这两个值必须拥有一个定义良好的关系,这代表了你无法单纯地选择你的名称与地址当成你的私密金钥。这个概念与秘密金钥的演算法不同,秘密金钥的长度太短,可能来自於你的密码,在公开金钥技术中使用的钥匙基本上是人类无法记忆的。</span><span  id=Layer24></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>公开金钥演算法典型上需要长度很长的金钥</span><span  id=Layer25></font></p><hr><p><font size=2 color=#3c3c3c face=arial>对公开金钥来说这并不是什麽严重的问题。因为它们的值不一定要视为机密,它们可以储存在任何地方。不过储存私密金钥却是个更棘手的问题。它们的长度太长以致於不容易记忆,不过它们必须以某种方式储存起来以防骇客存取。Windows 2000如何解决这个问题将会在本章中详细地描述,不过基本上,它提供两个不同的解决方案:将私密金钥储存在硬碟的某个地方,使用其它的金钥加密,或者将它储存在智慧卡(smart card)上。智慧卡是一个类似信用卡大小的装置,包含处理能力与记忆体,它是一个制作在塑胶上的小型电脑。智慧卡的记忆体包含你的私密金钥与其它的资讯,而处理器能够进行公开金钥加密,并使用这把金钥进行解密。有了智慧卡,你的私密金钥便不会离开卡片,所有的操作都是在卡片上完成。为了要避免骇客透过偷取你的智慧卡而得到你的识别码,每张卡片上同样也拥有个人的识别码(PIN),你必须输入PIN才可以使用智慧卡。</span><span  id=Layer26></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>私密金钥可以加密後储存在硬碟上或智慧卡</span><span  id=Layer27></font></p><hr><p><font size=2 color=#3c3c3c face=arial>智慧卡需要智慧卡读取器。Windows 2000提供支援智慧卡驱动程式的标准软体,不过要让智慧卡广为流行也需要让智慧卡读取器成为流行。我们可以预测智慧卡与智慧卡读取器在未来几年内广受使用,不过直到那时之前,在Windows 2000网域中大部份公开金钥技术的使用者会将他们的私密金钥加密後储存在硬碟。</span><span  id=Layer28></font></p><p><font size=2 color=#3c3c3c face=arial>公开金钥技术发展上通常比秘密金钥技术还要慢。使用RSA加密与解密的速度可能比使用DES对应的操作要慢上100到1000倍。这样的结果使得公开金钥技术较不常使用来加密使用者传送的真正资料。更常见的解决方案是让传送者使用接收者的公开金钥来加密秘密金钥,如一个DES或RC4金钥,或能更用来建立  密金钥的资讯。只有接收者可以解密秘密金钥,因为只有它知道它的私密金钥。一旦完成这个动作,传送者与接收者现在就可以共享秘密金钥,它可用来有效地加密它们交换的资料。使用公开金钥技术来交换资料,从中取得秘密金钥,然後使用秘密金钥加密以传输资料,这就是SSL所做的事,将在本章稍後描述。</span><span  id=Layer29></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>公开金钥与秘密金钥技术经常一起使用</span><span  id=Layer30></font></p><hr><hr><font face=Arial Black color=#3e77d7 size=3><b>附注 </b></font><p><font size=2 color=#3c3c3c face=arial>注意贯穿本书,秘密金钥是使用秘密金钥演算法,如DES,或RC4,而私密金钥与公开金钥则使用公开金钥演算法,如RSA。</span><span  id=Layer31></font></p><hr><p><font size=2 color=#3c3c3c face=arial>公开金钥的缓慢相对地也威胁了它其中一个最大的利益,也就是验证使用者的能力。若使用私密金钥加密整个讯息的动作太慢难以实际化,那麽一个principal如何能使用公开金钥技术来证明它的识别码呢?答案将在稍後描述。</span><span  id=Layer32></font></p><font color=#3e72d7 face=arial size=4><b>数位签章(Digital Signature)</span><span  id=Layer33></b></font><p><font size=2 color=#3c3c3c face=arial>传送端不使用私密金钥加密整个欲传送的讯息,而可以建立一个数位签章并随讯息传送之。建立数位签章的过程如图4-3。一开始,传送的系统从讯息本身计算一个杂凑值(hash,也称为讯息摘要(message digest)或检查码(checksum))就像Kerberos一样,这个值是讯息本身的一个函数;更动讯息中的一个位元都会(很有可能)造成杂凑值的变动。对於SHA-1 (Secure Hash Algorithm-1),一个常被使用的杂凑演算法,得到的结果是20位元组长。传送者使用它的秘密金钥加密这个相对来讲较为简短的结果,这个操作的速度比起加密整个讯息要来得快一些。结果的加密杂凑值便是讯息的数位签章。</span><span  id=Layer34></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>使用传送者的私密金钥加密一个讯息的杂凑後会产生一个数位签章</span><span  id=Layer35></font></p><hr><br><center><a target=_new href=imagesh/4-3.gif><img border=0 src='imagesl/4-3.gif'></a></center></span><span  id=Layer36><center><table border=0 ><td align=center><font color=#3c3c3c face=arial size=2><font size=2 face=arial color=#3e80d7><b>&nbsp;图4-3</span><span  id=Layer37>&nbsp;</b></font>若要建立一个数位签章,传送端使用它的私密金钥来加密讯息的杂凑值。</span><span  id=Layer38></td></table></font></center><p><font size=2 color=#3c3c3c face=arial>当讯息到达时,它的接收者必须验证这个数位签章是正确的,过程展示於图4-4。为了达到这的目的,它套用传送端所使用的演算法,计算接收到的讯息之杂凑值。然後使用传送者的公开金钥来对随同讯息而来的数位签章解密,然後比较它们的结果。若新计算出来的杂凑值符合解密後的杂凑值,则这个数位签章便是有效的,而接收者便可以确定传送者的识别码。若它们不符合,可能是因为讯息在传送的过程中被修改了,或它不是由传送者签章的,传送端的公开金钥是用来验证这个签章的。</span><span  id=Layer39></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>接收者使用传送端的公开金钥来验证数位签章</span><span  id=Layer40></font></p><hr><br><center><a target=_new href=imagesh/4-4.gif><img border=0 src='imagesl/4-4.gif'></a></center></span><span  id=Layer41><center><table border=0 ><td align=center><font color=#3c3c3c face=arial size=2><font size=2 face=arial color=#3e80d7><b>&nbsp;图4-4</span><span  id=Layer42>&nbsp;</b></font>若要验证一个数位签章,讯息的接收者计算出杂凑值,使用传送者的公开金钥解密收到的签章,然後比较结果。</span><span  id=Layer43></td></table></font></center><p><font size=2 color=#3c3c3c face=arial>数位签章同时提供验证(authentication)与资料完整性。若必须防范偷窥的眼睛窥视讯息的内容,它本身必须加密,仅仅对讯息签章并不足够。</span><span  id=Layer44></font></p><p><font size=2 color=#3c3c3c face=arial>不过对於依赖数位签章的接收者而言,若要验证传送者的讯息,则接收者必须拥有一个可靠的方式以得知传送端的公开金钥。在某些情况下,这并不是个问题。举例来说,若传送者与接收者是朋友,接收者可能早就知道传送者的公开金钥,或者他们可能相互信任以传送正确的公开金钥。不过当传送者与接收者是完全的陌生人时,数位签章应该同样是可靠的。在这个情况下,可靠地读取传送者的公开金钥是一个挑战,不过它是使用数位签章得解决的一个问题,也是非常有用的。</span><span  id=Layer45></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>验证一个数位签章需要可靠地取得签名者之公开金钥</span><span  id=Layer46></font></p><hr><p><font size=2 color=#3c3c3c face=arial>其中一个解决方案是让传送者在它传送的每个已签章讯息中包含它的公开金钥。听起来很吸引人,但这是不够的。若要知道为什麽,假设一个骇客使用自己的私密金钥产生一个经数位签章过的讯息,然後将这个讯息与自己的公开金钥传送到一个不在预期之内的接收者。此骇客可以变成任何人,假设为美国总统。接收者要怎样侦侧传送者在说谎呢?毕竟随讯息传送的公开金钥将会正确地解密讯息的数位签章。若要侦测到这个骗局,接收者必须能够辨别假冒的总统公开金钥。不过接收者要怎样做呢?简单地说,接收者要如何知道哪一把特殊的公开金钥真正是属於谁的?</span><span  id=Layer47></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>有了公开金钥,需要有某种方式以确定金钥的拥有者</span><span  id=Layer48></font></p><hr><p><font size=2 color=#3c3c3c face=arial>若要解决这个问题,以及让数位签章成为验证真正有效的方法,得要有某些方式让讯息的接收者可靠地将公开金钥以及指明金钥所有权的principal识别码关联在一起。一定要有一个机制将principal的公开金钥与名称系结在一起, 如此接收者将会相信这把金钥真正是属於那一个principal。幸运地,有一种方式可以达成这个目的:使用凭证(certificate)。</span><span  id=Layer49></font></p><font color=#3e72d7 face=arial size=4><b>凭证(Certificate)</span><span  id=Layer50></b></font><p><font size=2 color=#3c3c3c face=arial>一个凭证,通常被鉴赏家称为「cert」,它是一个位元组字串,而且切割成许多不同的栏位。今天大部份的凭证都遵守International Telecommunications Union (ITU) X.509标准3.0版中的格式定义(Internet Engineering Task Force [IETF]已生产一个更亲切地描述,目前是[RFC] 2459的Request for Comments阶段。)一个稍为简化的X.509v3凭证版本展示於图4-5。它包含如下的栏位:</span><span  id=Layer51></font></p><font size=2 color=#3c3c3c face=arial><ul><font size=2 face=arial color=#3c3c3c><li><font size=2 face=arial color=#3e80d7><b>&nbsp;版本</span><span  id=Layer52>&nbsp;</b></font>(</span><span  id=Layer53><font size=2 face=arial color=#3e80d7><b>&nbsp;Version</span><span  id=Layer54>&nbsp;</b></font>) 指明这个凭证遵循X.509标准的版本号码。</span><span  id=Layer55></li><br></font><font size=2 face=arial color=#3c3c3c><li><font size=2 face=arial color=#3e80d7><b>&nbsp;序号</span><span  id=Layer56>&nbsp;</b></font>(</span><span  id=Layer57><font size=2 face=arial color=#3e80d7><b>&nbsp;Serial number</span><span  id=Layer58>&nbsp;</b></font>) 包含凭证的唯一识别码。这个号码可以用来废止凭证,将於本章稍後描述。</span><span  id=Layer59></li><br></font><font size=2 face=arial color=#3c3c3c><li><font size=2 face=arial color=#3e80d7><b>&nbsp;签章演算法</span><span  id=Layer60>&nbsp;</b></font>(</span><span  id=Layer61><font size=2 face=arial color=#3e80d7><b>&nbsp;Signature algorithm</span><span  id=Layer62>&nbsp;</b></font>) 指明用来产生这个凭证拥有的数位签章之演算法。</span><span  id=Layer63></li><br></font><font size=2 face=arial color=#3c3c3c><li><font size=2 face=arial color=#3e80d7><b>&nbsp;发行者</span><span  id=Layer64>&nbsp;</b></font>(</span><span  id=Layer65><font size=2 face=arial color=#3e80d7><b>&nbsp;Issuer</span><span  id=Layer66>&nbsp;</b></font>) 包含发行这个凭证的公司组织名称。</span><span  id=Layer67></li><br></font><font size=2 face=arial color=#3c3c3c><li><font size=2 face=arial color=#3e80d7><b>&nbsp;凭证生效日期</span><span  id=Layer68>&nbsp;</b></font>(</span><span  id=Layer69><font size=2 face=arial color=#3e80d7><b>&nbsp;Valid from</span><span  id=Layer70>&nbsp;</b></font>) 与凭证截止日期(valid to) 指明凭证的有效期间(也就是说,凭证开始生效的时间到凭证过期的时间。)</span><span  id=Layer71></li><br></font><font size=2 face=arial color=#3c3c3c><li><font size=2 face=arial color=#3e80d7><b>&nbsp;主题</span><span  id=Layer72>&nbsp;</b></font>(</span><span  id=Layer73><font size=2 face=arial color=#3e80d7><b>&nbsp;Subject</span><span  id=Layer74>&nbsp;</b></font>) principal的名字,它的公开金钥被包含在这个凭证中。</span><span  id=Layer75></li><br></font><font size=2 face=arial color=#3c3c3c><li><font size=2 face=arial color=#3e80d7><b>&nbsp;公开金钥</span><span  id=Layer76>&nbsp;</b></font>(</span><span  id=Layer77><font size=2 face=arial color=#3e80d7><b>&nbsp;Public key</span><span  id=Layer78>&nbsp;</b></font>) principal的公开金钥。</span><span  id=Layer79></li><br></font><font size=2 face=arial color=#3c3c3c><li><font size=2 face=arial color=#3e80d7><b>&nbsp;许多的其它栏位</span><span  id=Layer80>&nbsp;</b></font>(</span><span  id=Layer81><font size=2 face=arial color=#3e80d7><b>&nbsp;Various other fields</span><span  id=Layer82>&nbsp;</b></font>) 有些栏位被视为延伸的属性栏位。

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -