深入HTTPS系列二(加密&证书)

转自:https://www.jianshu.com/p/b4c775a26068

加密


1、“对称加密”

所谓的“对称加密技术”,意思就是说:“加密”和“解密”使用【相同的】密钥。
由于其速度快,对称性加密通常在消息发送方需要加密大量数据时使用。所以也称这种加密算法为密钥加密或单密钥加密。
  常见的对称加密有:DES(Data Encryption Standard)、AES(Advanced Encryption Standard)、RC4、IDEA。
  对称安全性不仅取决于加密算法本身,密钥管理的安全性更是重要。因为加密和解密都使用同一个密钥,如何把密钥安全地传递到解密者手上就成了必须要解决的问题。

2、“非对称加密”

所谓的“非对称加密技术”,意思就是说:“加密”和“解密”使用【不同的】密钥。
与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey);并且加密密钥和解密密钥是成对出现的。通过这种算法得到的密钥对能保证在世界范围内是唯一的。
  非对称加密算法在加密和解密过程使用了不同的密钥,非对称加密也称为公钥加密,在密钥对中,其中一个密钥是对外公开的,所有人都可以获取到, 称为公钥,其中一个密钥是不公开的称为私钥。
  非对称加密算法对加密内容的长度有限制,不能超过公钥长度。比如现在常用的公钥长度是 2048 位,意味着待加密内容不能超过 256 个字节。

如果只是单方面采用非对称性加密算法,其实有两种方式,用于不同用处:

  1. 第一种是签名,使用私钥加密,公钥解密。用于让所有公钥所有者验证私钥所有者的身份并且用来防止私钥所有者发布的内容被篡改。但是不用来保证内容不被他人获得。
    只要有发送方公开密钥的人都可以验证签名的正确性。
  2. 第二种是加密,用公钥加密,私钥解密。用于向公钥所有者发布信息,这个信息可能被他人篡改,但是无法被他人获得。如果甲想给乙发一个安全的保密的数据,那么应该甲乙各自有一个私钥,甲先用乙的[公钥加密]这段数据,再用自己的私钥加密这段加密后的数据。最后再发给乙,这样确保了内容即不会被读取,也不会被篡改。
    任何知道接收方公钥的人都可以向接收方发送消息。
    总结:公钥通常用于加密消息、验证数字签名(即解密)。

3、各自有啥优缺点?

看完刚才的定义,很显然:(从功能角度而言)“非对称加密”能干的事情比“对称加密”要多。这是“非对称加密”的优点。但是“非对称加密”的实现,通常需要涉及到“复杂数学问题”。所以,“非对称加密”的性能通常要差很多(相对于“对称加密”而言)。
这两者的优缺点,也影响到了 SSL 协议的设计。

4、摘要算法

数字摘要是采用单项Hash函数将需要加密的明文“摘要”成一串固定长度(128位)的密文,这一串密文又称为数字指纹,它有固定的长度,而且不同的明文摘要成密文,其结果总是不同的,而同样的明文其摘要必定一致。“数字摘要“是https能确保数据完整性和防篡改的根本原因。

验证


1、数字签名
  数字签名技术就是对“非对称密钥加解密”和“数字摘要“两项技术的应用,它将摘要信息用发送者的私钥加密,与原文一起传送给接收者。接收者只有用发送者的公钥才能解密被加密的摘要信息,然后用HASH函数对收到的原文产生一个摘要信息,与解密的摘要信息对比。如果相同,则说明收到的信息是完整的,在 传输过程中没有被修改,否则说明信息被修改过,因此数字签名能够验证信息的【完整性】。
  数字签名的过程如下:明文 --> hash运算 --> 摘要 --> 私钥加密 --> 数字签名
  数字签名验证的过程如下:数字签名 --> 公钥解密 --> 摘要 --> hash原文 --> 对比摘要

数字签名有两种功效:

  1. 确定消息确实是由发送方签名并发出来的,因为别人假冒不了发送方的签名。(来源可靠)
  2. 确定消息完整未篡改(完整性)。
    注意:数字签名只能验证数据的完整性,数据本身(即原文)是否加密不属于数字签名的控制范围

2、数字证书 
  为什么要有数字证书?
  对于请求方来说,它怎么能确定它所得到的公钥一定是从目标主机那里发布的,而且没有被篡改过呢?亦或者请求的目标主机本本身就从事窃取用户信息的不正当行为呢?这时候,我们需要有一个权威的值得信赖的第三方机构(一般是由政府审核并授权的机构)来统一对外发放主机机构的公钥,只要请求方这种机构获取公钥,就避免了上述问题的发生。
  数字证书的颁发过程
  用户首先产生自己的密钥对,并将公钥及部分个人身份信息传送给认证中心。认证中心在核实身份后,将执行一些必要的步骤,以确信请求确实由用户发送而来,然后,认证中心将发给用户一个数字证书,该证书内包含用户的个人信息和他的公钥信息,同时还附有认证中心的签名信息(根证书私钥签名)。用户就可以使用自己的数字证书进行相关的各种活动。数字证书由独立的证书发行机构发布,数字证书各不相同,每种证书可提供不同级别的可信度。
  证书包含哪些内容
证书颁发机构的名称
证书本身的数字签名
证书持有者公钥
证书签名用到的Hash算法

3、验证证书的有效性   
浏览器默认都会内置CA根证书,其中根证书包含了CA的公钥。
1.证书颁发的机构是伪造的:浏览器不认识,直接认为是危险证书
2.证书颁发的机构是确实存在的,于是根据CA名,找到对应内置的CA根证书、CA的公钥。用CA的公钥,对伪造的证书的摘要进行解密,发现解不了,认为是危险证书。
3.对于篡改的证书,使用【证书持有者公钥】对数字签名进行解密得到摘要A,然后再根据签名的Hash算法计算出证书的摘要B,对比A与B,若相等则正常,若不相等则是被篡改过的。
4.证书可在其过期前被吊销,通常情况是该证书的私钥已经失效。较新的浏览器如Chrome、Firefox、Opera和Internet Explorer都实现了在线证书状态协议(OCSP)以排除这种情形:浏览器将网站提供的证书的序列号通过OCSP发送给证书颁发机构,后者会告诉浏览器证书是否还是有效的。

此文到此结束!
请继续关注下文,深入HTTPS系列三(如何通信)

猜你喜欢

转载自blog.csdn.net/fanjint/article/details/81984688