PKI, SSL and Xml Security

一、PKI与数据通信中的安全相关概念

这几个概念是正交的,所谓正交,是指:

  • 彼此独立,互不影响,可独立演化

  • 可两两结合使用

1. 保证安全通常需要解决三个问题

  1. 数据本身的机密性:数据有没有被qie听造成信息泄漏,即电子世界的dao窃行为

  2. 数据本身的正确性:数据有没有被篡改造成数据破坏,即电子世界的侵略行为

  3. 数据来源和目的的合法性:数据有没有被伪造或诱拐,即电子世界的欺诈行为

如果这三个问题都得到解决,那么就解决了安全通信的终极问题:数据的不可抵赖性

2. 针对这几个问题,通常有两种应对方案

  1. 保密:认为所有的一切都是不安全的,因此需要进行加密和解密

  2. 验证:包括验证数据的正确性和合法性:

    1. 数据的正确性:在正文之外包含额外的信息,这种信息通常是将正文作为某个算法的输入后产生的输出,因此需要发明保证两个不同的输入不会产生相同输出的算法

    2. 数据的合法性:认为数据来源和目的具有某种凭据才是可信任的,因此出现颁发凭据和验证凭据的安全机制

如前所述,这几种方式可以结合使用

3. 保密世界观中的加密与解密

3.1 概念

  • 加密:改变数据本来的意思

  • 解密:还原数据本来的意思

  • 密钥:加密解密时所使用的参数,可以是一个整数或一串字符,或其它任何加解密方法所能理解的形式

  • 对称密钥:加密和解密使用同一个密钥

  • 非对称密钥:加密和解密使用两个密钥,其中任何一个密钥加密的数据都能且都只能被另一个密钥解开

  • 公钥私钥:非对称密钥的一种实践形式,两个密钥中公开的人人皆知的那个称为公钥,保密的那个称为私钥

  • PKI:公钥基础设施,泛指使用了非对称加密的平台、工具等

3.2 常见实践

  • 公钥私钥:

  1. A将数据用自己的私钥加密,发送给B,C,D

  2. B,C,D用A的公钥解密

  3. B,C,D将各自的响应用A的公钥加密,发送给A

  4. A将返回的响应用自己的私钥解密

  • 用公钥加密对称密钥:

  1. A用对称密钥将数据加密,然后用自己的私钥把对称密钥本身加密,一起发送给B,C,D

  2. B, C, D用A的公钥解密对称密钥

  3. B, C, D用解密后的对称密钥继续解密,得到原始数据

  4. ...

4. 验证世界观中的数据正确性

4.1 概念

  • 消息摘要(Message Digest):一种算法,对正文进行计算后得到比较精简(通常是固定长度)的一小段摘要数据,该算法保证不会有两个不同的输入能够产生相同的输出,从而在保证摘要正确的前提下可验证数据的正确性,即没有被篡改;一个较为普遍的算法是MD5

  • 数字签名:消息摘要的一种应用,通常算法的输入涉及了通信方的身份标识,如私钥信息等,接收方收到数字签名后,可结合使用对方的公钥,消息摘要算法等验证消息的发送方确实是所声称的实体,比如,如果没有私钥就不可能计算出那个签名

4.2 常见实践

  • 正文明文,摘要加密

  1. A将正文产生的摘要加密(可使用前述加密实践中的任何一种),然后将正文明文和摘要密文一起发送给B,C,D

  2. B,C,D解密摘要,然后重新根据正文明文计算摘要,判断两个摘要是否相同,用以验证数据的正确性

  • 正文和摘要都加密

  1. 即将“加密”和“验证”完全正交的配合使用

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 实践

证书的应用,可以说是结合了几乎所有电子安全手段的一种应用,既有加密解密,又有正确性验证和身份验证 

  1. CA签发证书时,在证书上包含了自己的数字签名,从而保证了证书的不可伪造性

  2. 证书上包含了证书拥有者的公钥信息,接收方可以使用该信息解密正文数据和加密响应

 

二、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 acanonicalization 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则可以解决这个问题, 你完全可以路由客户请求至第三方应用

你可能感兴趣的:(ssl,PKI,Xml Security)