See also: << Essential Security Tools: OpenSSL and Keytool>>
一、PKI与数据通信中的安全相关概念
这几个概念是正交的,所谓正交,是指:
-
彼此独立,互不影响,可独立演化
-
可两两结合使用
1. 保证安全通常需要解决三个问题
-
数据本身的机密性:数据有没有被造成信息泄漏,即电子世界的行为
-
数据本身的正确性:数据有没有被篡改造成数据破坏,即电子世界的侵略行为
-
数据来源和目的的合法性:数据有没有被伪造或诱拐,即电子世界的欺诈行为
如果这三个问题都得到解决,那么就解决了安全通信的终极问题:数据的不可抵赖性
2. 针对这几个问题,通常有两种应对方案
-
保密:认为所有的一切都是不安全的,因此需要进行加密和解密
-
验证:包括验证数据的正确性和合法性:
-
数据的正确性:在正文之外包含额外的信息,这种信息通常是将正文作为某个算法的输入后产生的输出,因此需要发明保证两个不同的输入不会产生相同输出的算法
-
数据的合法性:认为数据来源和目的具有某种凭据才是可信任的,因此出现颁发凭据和验证凭据的安全机制
-
如前所述,这几种方式可以结合使用
3. 保密世界观中的加密与解密
3.1 概念
-
加密:改变数据本来的意思
-
解密:还原数据本来的意思
-
密钥:加密解密时所使用的参数,可以是一个整数或一串字符,或其它任何加解密方法所能理解的形式
-
对称密钥:加密和解密使用同一个密钥
-
非对称密钥:加密和解密使用两个密钥,其中任何一个密钥加密的数据都能且都只能被另一个密钥解开
-
公钥私钥:非对称密钥的一种实践形式,两个密钥中公开的人人皆知的那个称为公钥,保密的那个称为私钥
-
PKI:公钥基础设施,泛指使用了非对称加密的平台、工具等
3.2 常见实践
-
公钥私钥:
A将数据用自己的私钥加密,发送给B,C,D
B,C,D用A的公钥解密
B,C,D将各自的响应用A的公钥加密,发送给A
A将返回的响应用自己的私钥解密
-
用公钥加密对称密钥:
A用对称密钥将数据加密,然后用自己的私钥把对称密钥本身加密,一起发送给B,C,D
B, C, D用A的公钥解密对称密钥
B, C, D用解密后的对称密钥继续解密,得到原始数据
...
4. 验证世界观中的数据正确性
4.1 概念
-
消息摘要(Message Digest):一种算法,对正文进行计算后得到比较精简(通常是固定长度)的一小段摘要数据,该算法保证不会有两个不同的输入能够产生相同的输出,从而在保证摘要正确的前提下可验证数据的正确性,即没有被篡改;一个较为普遍的算法是MD5
-
数字签名:消息摘要的一种应用,通常算法的输入涉及了通信方的身份标识,如私钥信息等,接收方收到数字签名后,可结合使用对方的公钥,消息摘要算法等验证消息的发送方确实是所声称的实体,比如,如果没有私钥就不可能计算出那个签名
4.2 常见实践
-
正文明文,摘要加密
A将正文产生的摘要加密(可使用前述加密实践中的任何一种),然后将正文明文和摘要密文一起发送给B,C,D
B,C,D解密摘要,然后重新根据正文明文计算摘要,判断两个摘要是否相同,用以验证数据的正确性
-
正文和摘要都加密
即将“加密”和“验证”完全正交的配合使用
5. 验证世界观中的数据合法性
5.1 概念
-
证书:即电子世界中的身份证,通信开始前它可能是硬盘上的一个文件,或文件中的一段,通信开始后,它可能被传输到网络上到通信的另一方,用于告知对方自己的身份信息;这些身份信息具有一定的标准格式,即证书格式标准,常见的有X.509等,通常包括:公司名称,地址等,当然还有公钥,发证机关标识;是的,就像现实世界中的身份证,学生证,军人证一样,电子证书也需要发证机关,这就是CA
-
CA:证书颁发机构,类似现实世界中的公安局、学生处、军队等,但在电子世界中,这是一个逻辑上的概念,用于指称一切可以接受证书申请,可以签署证书,可以吊销证书的实体,因此CA可以是:
1,某座写字楼里的几十人的公司,他们处理客户的书面证书申请,核实他们的信息,签署证书,将证书以电子邮件附件或网址的形式告知客户供他们下载,并收取一定的费用;该公司通常具有较高的公信力,有较多的交易方信任他们签署的证书
2,某个软件,如Windows证书服务,如OpenSSL,它可以交互的提问和接受你的证书申请,并签署之,最后产生一个硬盘文件给你,你可以在信任该证书的范围内使用,如Windows域用户的各种安全服务
-
信任:就像银行信任客户的身份证,不信任你的QQ号码一样,通信方可以有选择的信任某些证书,确切的说,信任某些CA颁发的证书,就像银行信任公安局颁发的身份证,不信任腾讯颁发的QQ号一样
-
证书库:通信方在得到对方的证书后,需要验证是否在信任范围内,这个信任范围由信任的证书库给出,这个证书库通常是一个或多个硬盘文件,里面包含了信任的证书信息;证书库的建立,通常由使用的通信软件完成,如IE,它可以在你首次碰到一个证书时,询问你是否信任之,若选择始终信任,它将该证书导入到证书库中,下次便不再提问
-
CA层次:由于众多客户,分布可能极广,几个少数的CA显然不能满足全世界的交易需求,因此就像公安部、公安厅、公安局、派出所一样,CA也以层次化的形式存在,最顶层的CA称为根CA
-
CA层次与信任关系:就像你信任了公安部,也顺便信任了公安局、派出所一样(这个例子不太恰当,呵呵),信任了根CA(签署的证书),便信任了该根CA所有的下属分支(签署的证书)
5.2 实践
证书的应用,可以说是结合了几乎所有电子安全手段的一种应用,既有加密解密,又有正确性验证和身份验证
-
CA签发证书时,在证书上包含了自己的数字签名,从而保证了证书的不可伪造性
-
证书上包含了证书拥有者的公钥信息,接收方可以使用该信息解密正文数据和加密响应
二、SSL
SSL比较好理解,就是使用了PKI的一种应用,完全可以google之:
SSL(Secure Socket Layer)是一个介于HTTP协议与TCP之间的一个可选层,其位置大致如下:
---------
| HTTP/FTP etc.|
---------
| SSL |
---------
| TCP |
---------
| IP |
---------
SSL层: 借助下层协议的的信道安全的协商出一份加密密钥,并用此密钥来加密HTTP请求。
TCP层:与web server的443端口建立连接,传递SSL处理后的数据。
接收端与此过程相反。
SSL在TCP之上建立了一个加密通道,通过这一层的数据经过了加密,因此达到保密的效果。
SSL协议分为两部分:Handshake Protocol和Record Protocol,。其中Handshake Protocol用来协商密钥,协议的大部分内容就是通信双方如何
利用它来安全的协商出一份密钥。 Record Protocol则定义了传输的格式。
Client Authentication
SSL是保护消费者的, 通常只需要服务器出示证书就行了, 证明消费者连接的确实是某个银行网站, 而不是被诱拐了; 如果网站担心被不是自己用户的人骗取信息,那就有可能要求客户端也出示证书,这就是"Client Authentication".
某 些客户端工具提供了选项, 允许你设置某个网站是否需要Client Authentication, 如果需要的话, 就继续指定你自己的证书; 注意这个选项一定要与网站一致; 如果网站不要求Client Authentication, 而你设置了Client Authentication, 有可能无法建立SSL连接
三、Xml Security
1,概念
Xml Security也是PKI的一种应用, 有两种含义
a,Xml文件本身的安全;或曰,跟其它格式的文件的安全有什么不一样呢?毕竟加密或签名算法都可以用在任何类型的数据上,完全可以将Xml文件看作普通数据文件来加密签名;是的,这是对的,不过可以对Xml文件提供更灵活的加密和签名方式:就是只加密或签名Xml文件的某一部分或某几部分,这些部分通过标准的XPath语法来指定
b,以Xml格式表示的安全数据;加密和签名后的数据总要在另外的时间或地点进行解密和验证,如何表示解密和验证需要的信息?比方说具体到PKI,如何将公钥,密文,数字签名等有机联系在一起存储和传输?之前可能各有各的方法,而Xml Security建立了一些规范,可以将安全相关数据用自描述的Xml格式来存放,毕竟任何二进制数据都可以通过Base64之类的算法转换为文本
2,签名
就是用私钥加密后的摘要
3,Canonicalization: C14N
即Xml 的规范化算法; 不同的Xml字符串可能表示完全相同的含义,比方说它们只是属性的排列顺序不一致;这种情况会发生在Xml经过一些解析器后重新输出时; 大部分情况下这没什么问题,但它会破坏数字签名,因为目前的签名算法都是基于文本,而不是语义;于是有了规范化算法,用于签名前和校验签名前规范一下格式
规范化在其它领域的应用,如URI Scheme. In some cases, data that could be represented by an unreserved character may appear escaped; for example, some of the unreserved "mark" characters are automatically escaped by some systems. If the given URI scheme defines a canonicalization algorithm, then unreserved characters may be unescaped according to that algorithm. For example, "%7e" is sometimes used instead of "~" in an http URL path, but the two are equivalent for an http URL. Another Example: "/a/../b" must be canonicalized as "/b"
4,Transform
转换,通常用于剔除会干扰签名或干扰签名验证的元素
5,Kerberos and Passport
密钥只在服务伙伴之间共享,有可能是通过带外交换;客户端(用户)永远不知道密钥(所谓带外交换就是不是实时的通过软件来交换,而是预先就换好了,比如说约在某个咖啡馆见面,各带一个U盘互相交换 )
6,相关应用, 及顺便回答为什么SSL之外还需要Xml Security
WS-Security便是Xml Security的一种应用, 参见<<WS-Security Interoperability Issues>>, <<WS-Security Interoperability Workarounds>>
不同于SSL是传输层的协议, Xml Security是应用层的协议, 至少存在以下两种情况, 传输层的安全无法方便的满足我们的需要
a, 有选择性的对部分通信数据进行安全保护时
b, SSO单点登录或需要将某一方的身份信息沿着通信链传递时; SSL是一种传输层的端到端的通信, 你的应用程序实际上对客户的身份一无所知, 也拿不到客户身份的凭证, 当你的应用程序需要与第三方应用交户以完成业务功能, 而第三方需要你的客户的身份证明时, 你便无法出示; 应用层的安全协议如Xml Security则可以解决这个问题, 你完全可以路由客户请求至第三方应用