GT(Globus Toolkit)安全
公钥密码系统(Public Key Cryptography)
(翻译:http://www-unix.globus.org/security/public-key-cryptography.html)
最重要的是要了解公钥密码系统与早期的密码系统的区别,它不象早期的密码系统是依赖于一个密钥的(口令或者是密码),而是依赖于两个密钥。这对密钥是一些有以下数学关系的一系列数字:如果用一个密钥来加密信息,那么必须用另外的一个密钥来解密。另外一个重要的事实就是在我们的数学知识和计算能力范围内是不可能从一个密钥和(或)由该密钥加密的任何信息来获得另外一个密钥。
通过公开其中的一个密钥(公钥)保管另外一个密钥(私钥),一个实体可以很简单的通过加密一段信息来证明自己是私钥的所有者。如果经过加密的信息可以被公钥解密,那么该实体一定是通过私钥来加密这段信息的。
需要注意的是私钥的所有者一定要将私钥保密好。任何人如果拥有了你的私钥将很容易的冒充你的角色。
数字签名(Digital Signatures)
(翻译:http://www-unix.globus.org/security/digital-signatures.html)
利用公钥加密系统,可以对一段信息进行数字签署(sign)。对信息签署本质上是要保证有这样的一种信息容器(recipient),那就是信息从离开你之后能保证不被篡改(tamper)
对一段信息进行签署,首先要计算出信息的数学Hash码。(一段Hash码是信息的一个浓缩版本。用来计算这段Hash码的算法必须被这个信息的容器所知道,但是这不是一个秘密。)利用你的私钥,加密这段Hash码,然后把它附加在信息中。保证这个容器知道你的公钥。
为了验证你签署的信息是是否可信,信息容器需要用同样的Hash算法计算信息的Hash码,然后解密你附加在信息中的Hash码。如果新计算出的Hash码和解密出的Hash码吻合,这就可以证实是你签署的信息,并且这个信息自从你签署过后没有被更改过。
网格安全体系结构(Grid Security Infrastructure)
(翻译:http://www-unix.globus.org/security/overview.html )
网格安全体系结构的概况
GSI利用公钥密码系统(又称不对称密码系统)作为完成其功能的基础。因为使用了公钥密码雄,描述GSI中使用了很多术语和概念。
关于公钥密码系统的详细参考文献见1996年由CRC出版的 A. Menezes,P. van Oorschot和S. Vanstone所著的《Handbook of Applied Cryptography》,其中第八章专门描述了公钥密码系统。
在阅读这个概要之前,我们需要回顾以下公钥私钥和数字签名的概念。(译者注:已翻译如上)
GSI的主要动机:
证书(Certificates)
GSI认证的关键概念之一就是证书。网格中的每个用户和服务都是通过一个证书来识别的,这个证书包含了一些识别和认证用户或者服务的至关重要的信息。
一个GSI证书主要包括以下四方面的信息:
注意到第三方(CA)是用来证实证书中的公钥和主题的关系。为了信任证书和它的内容,必须首先信任CA的证书。CA和它的证书之间的关系必须通过一些非加密(non-cryptographic)的方法来建立,否则系统就不值得信赖。
GSI证书采用X.509的证书格式来编码,该格式是一种由IETF(Internet Engineering Task Force)确定的证书的标准数据格式。这些证书可以用来和其他基于公钥的软件共享,包括Microsoft和Netscape等的商业浏览器。
相互认证(Mutual Authentication)
如果两个实体都拥有证书,并且都信任签署对方证书的CA,那么这个两个实体可以互相证明自己所声称的身份(prove to each other that they are who they say they are)。这就是所谓的相互认证。GSI利用SSL(安全套接层,Secure Sockets Layer)作为相互认证的协议,详见以下描述。(众所周知,SSL有一个新名,IETF标准命名:传输层安全,Transport Layer Security(TLS)。)
在相互认证之前,参与各方必须信任签署对方证书的CA。事实上,这就意味着它们必须拥有CA的证书的拷贝――包含CA的公钥――并且它们必须信任这些证书真正的是属于CA的。
在相互认证中,第一方(A)和第二方(B)建立一个连接。然后开始认证过程,A把自己的证书给B。B从这个证书中获得A声称的(标识),A的公钥和A是采用哪个CA来证实证书的。B首先通过需要确认证书的有效性,B通过检验CA的数字签名来保证是这个CA来签署证书的并且证书没有被篡改过。(这就是B所要相信CA签署了A的证书的地方。)
一旦B检查了A的证书,B必须确认A是否是证书中所标识的那个实体。B产生一段随机的信息给传输给A,请A加密这段信息。A使用它的私钥加密这段信息后返回给B。B使用A的公钥来解密它。如果解密出的结果是原来的那段信息,那么B就知道A是它说的那个它(B knows that A is who he says he is)。
现在B已经信任A的身份了,同样的操作需要反向操作。B发送给A它的证书,A验证证书然后发送一段挑战性的信息给B加密。B加密这段信息然后返回给A,A解密然后和原来的信息比较。如果匹配的话,那么A就知道B是它说的那个它。
到此,A和B已经互相建立其一个连接,并且互相肯定它们的身份。
保密通信(Confidential Communication)
缺省情况下,GSI没有在各实体之间建立起保密(加密)通信的渠道。一旦相互认证完成,GSI退出,使得通信可以减少加密和解密的成本开销(overhead)。
如果需要保密通信,GSI可以很方便的建立一个共享的密钥。最近,美国的相关法律允许我们将加密通信作为GSI标准可选特性之一。
一项相关的安全特性是通信完整性。完整性是指在两个实体的通信过程中偷听者(eavesdropper)可以获得通信信息,但是无法以任何方式修改通信信息。GSI缺省情况下提供通信的完整性。(如果需要的话可以关闭。)通信完整性会带入一些成本开销,但是没有加密带来的开销大。
安全私钥(Securing Private Keys)
GT(Globus Toolkit)提供GSI核心软件期望用户的私钥存放在本地计算机的存储系统中的一个文件中。为了防止该计算机的其他用户偷取私钥,这个包含私钥的文件通过一个密码(也称为口令(pass phrase))加密了。为了使用GSI,用户必须输入该口令来解密包含私钥的文件。
我们也提供一个使用加密的智能卡(cryptographic smartcards)的原型来和GSI连接。这允许用户把私钥存储在一个智能卡中而不是存放在文件系统中,这使得其他人获得你的私钥变得更加困难。
授权和单点登录(Delegation and Single Sign-On)
GSI提供授权的功能:一种标准SSL协议的扩展,能减少用户必须输入口令的次数。如果一个网格计算任务需要访问几个网格资源(每个都需要相互认证),或者如果有几个智能体(agent)(本地或者远程的)代表一个用户请求某个服务的需求,需要多次输入用户的口令,但是这样情况可以通过产生一个代理(proxy)来避免。
一个代理包含一个新的证书(里面含有一个新的公钥)和一个新的私钥。新的证书包含所有这的标识,为了以示区别说明这是个代理证书而稍微修改一下标识。新的证书是由所有这签署,而不是CA。(如下图所示。)这个证书同样包含一个时间戳,超时后将不会被其他实体所接受。代理证书的生命周期有限。
代理的私钥必须被保密的,但是因为代理证书的有效期不是很长,所以它没有像用户的私钥那样的保密。因此,可以把代理证书的私钥不加密的保存在本地的存储系统中,只要文件的权限能防止任何用户能够很容易的查看到它们就行。一旦代理证书生成并且保存下来,用户就可以通过代理证书和私钥来进行相互认证而不需要输入密码。
当代理证书开始使用,相互认证的过程有一些细微的差别。远程实体不但接受到代理证书(由所有者签署的),而且包含所有者的证书。在相互认证的过程中,所有者的公钥(从它的证书中获得)被用来验证代理证书的签名。然后CA的公钥被用来验证所有者证书的签名。这通过所有者建立了一条从CA到代理的信任链。
注意到GSI和基于此的软件(典型的如:Globus Toolkit,GSI-SSH和GridFTP)是目前支持TLS(又称SSL)授权扩展的唯一软件。Globus项目正在与Grid Forum和IETF积极工作建立TLS的标准扩展代理证书,最终能够将GSI代理证书和其他的TLS软件同时使用
后记:随着GT4.0的发行,GT的安全有了新的变化。其网站文档也有了变动,这篇文档已经有了新的家园 http://www-unix.globus.org/toolkit/docs/4.0/security/key/index.html ,成为了GT4.0 Security 的关键概念。