一、两种基本加密方式
1.1 对称加密
对称加密是指双方持有相同的密钥进行通信,加密速度快。常见的对称加密算法有DES、3DES、AES等。存在问题:通信双方如何获得相同的密钥?
1.2 非对称加密
非对称加密,又称为公开密钥加密,是为了解决对称加密中的安全问题而诞生,一个称为公开密钥(public key),即公钥,另一个称为私钥(private key),即私钥。相对于对称加密来说,其加密速度很慢。
- 公钥(public key)是对外开放的,私钥(private key)是自己拥有的。
- 公钥(public key)加密的数据,只能用私钥(private key)解密。
- 私钥(private key)加密的数据,只能用公钥(public key)解密。
二、如何使用两种基本加密方式保证数据安全
2.1 数据安全的类型
现在信息传输中,需要保证三类数据传输安全:
a. 数据的保密性:即保证数据即使被窃听,hacker也无法获取信息内容;
b. 数据的完整性:即保证数据不会中途被hacker修改
c. 身份认证:即保证接收的数据来源可信,不是hacker冒充发送的。
2.2 数据保密性
解决方法:对称加密+非对称加密
为保证数据的保密性,可以使用对称加密或非对称加密。使用对称加密,速度相对非对称加密很快,但是存在一个安全问题,密钥如何传递?
由此通用的方法是使用非对称加密+对称加密来完成,即用非对称加密方式传输对称加密的密钥,利用对称密钥进行数据传输。具体过程为:客户端使用公钥对对称加密的密钥进行加密,然后传递给服务端,服务端使用私钥进行解密确认密钥。两端开始对称加密的传输数据。
2.3 数据完整性
解决方法:散列算法+非对称加密
数据传输的途中,数据有可能被第三方劫持篡改。为了防止这种情况的通用方法是使用散列算法如SHA1,MD5等。使用散列算法将传输内容hash一次获得hash值(即摘要)。客户端使用服务端的公钥对摘要和信息内容进行加密,然后传输给服务端,服务端使用私钥进行解密获得原始内容和摘要值,这时服务端使用相同的hash算法对原始内容进行hash,然后与摘要值比对,如果一致,说明信息是完整的。
2.4 身份识别(数字签名)
解决方案:证书(私钥公用)
为了保证数据安全性,在接收到数据后,接收方需要验证数据的发送方的身份。通用方法是把发送端的公钥发送给接收端,发送端通过把自己的内容使用私钥加密然后发送给接收端,接收端只能用发送端的公钥解密,自然就验证了发送端的身份。
进阶思考:
在保证数据保密性、完整性、来源确定的时候,都需要互相持有对方的公钥。为保证数据保密性,数据发送方要有接收方的公钥;为保证完整性,数据发送方要有接收方的公钥;身份识别的时候,数据接收方要有发送方的公钥。
这就引出一个问题,这个公钥要如何传输到对方的手中?如果在传输公钥的过程中,公钥被劫持,第三方就能伪造一对公私钥,在接收方这里伪装发送方,在发送方这里伪装接收方。为了避免这种情况,引出数字证书。
三、数字证书
3.1 数字证书的作用与内容
数字证书是由权威容的CA(Certificate Authority)机构颁发给服务端(数据发送方)。CA机构通过服务端(发送方)提供的相关信息生成证书,证书内容包含了持有人的相关信息,服务器的公钥,签署者签名信息(数字签名,即用私钥加密,保证这个信息真的来自签署者)等。
但是证书也是可以伪造的,如何保证证书为真呢?
一个证书中含有三个部分:"证书内容,散列算法,加密密文"。证书内容会被散列算法hash计算出hash值,然后使用CA机构提供的私钥进行RSA加密。过程如下图:
当客户端(接收方)发起请求,要客户端(发送端)的公钥的时候,服务器将该数字证书发送给客户端,客户端通过CA机构提供的公钥对加密密文进行解密获得散列值(数字签名),同时将证书内容使用相同的散列算法进行Hash得到另一个散列值,比对两个散列值,如果两者相等则说明证书没问题。
3.2 数字证书分类
一些常见的数字证书类型:
- X.509#DER 二进制格式证书,常用后缀.cer .crt
- X.509#PEM 文本格式证书,常用后缀.pem
- 有的证书内容是只包含公钥(服务器的公钥),如.crt、.cer、.pem
- 有的证书既包含公钥又包含私钥(服务器的私钥),如.pfx、.p12