HTTPS 介绍

Tuesday, April 21, 2020

HTTPS

https

机密性

如何保证数据的机密性而不是明文传输呢?很直接的方法就是加密,通过密钥对明文进行加密,只有密钥才可以解密。这就是加密算法。

对称加密

对称加密就是双方拥有同一个密钥,这样就可以加密和解密了,中间的人只能看到加密后的数据,同时没有密钥所以也无法解密。

对称加密算法:

  • AES
  • ChaCha20

加密分组

让算法用固定长度的密钥加密任意长度的明文

  • GCM
  • CCM
  • Poly1305

非对称加密

对称加密的风险也是很显而易见的,只要密钥被窃取了,就没有机密性可言了。所以有了非对称加密,这个有两个密钥,分为私钥和公钥,加密的一方只有对方的密钥才可以解开。

公钥可以公开给人使用,私钥必须严格保密。

非对称加密就可以用来解决密钥交换问题了,也就是上图中的第一步,密钥交换。网站秘密保管私钥,在网上任意分发公钥,你想登录网站,只要用公钥加密就可以了。

非对称加密算法:

  • RSA
  • DSA
  • ECC
  • EH

混合加密

既然非对称加密这么安全,那是不是没必要考虑对称加密了呢?不是的,因为非对称加密的运算速度非常慢,相比对称加密差了几个数量级。所以混合加密就是集合了两种方法。

  • 在通信刚开始,先用非对称算法解决密钥交换问题。
  • 用随机数算法产生对称加密使用的会话密钥,用公钥加密该密钥,因为密钥很短,通常只有16字节或者32,所以对性能影响不大。
  • 对方拿到密文后,用私钥解开该密钥,就拿到了会话密钥了,就可以对报文进行解密了

简单来讲就是,数据用对称加密来保证速度,对称加密的密钥用非对称加密来保障密钥的安全。密钥安全了数据也就安全了。

完整性

通过上述的方法,保证了数据的安全性了,但是这还不够,我们还得保障数据的完整性,否则就可以随意被篡改了。这里就要用到摘要算法了。

摘要算法

其实很常见,比如 MD5 就是,把一串数据转换成固定长度的摘要字符串。双方只要比对一下摘要算法得出的字符串是否一致,就可以知道数据是否被篡改。

TLS 里一般用 SHA-2,常用的是 SHA224,SHA256,SHA384

把数据传过去,同时把摘要传过去,这样对方就可以比对数据是否篡改了,但是这一切得建立在机密性的基础上,否则对方把数据和摘要一起改了发给你,你也不知道。

所以摘要和明文数据都需要用会话密钥进行加密和解密,再进行比对。

身份认证 不可否认

数字签名

经过上述的做法后,已经比安全了,但是还有一个漏洞,那就是通信的两个端点。黑客可以伪装成网站来窃取信息,也可以伪装成你来向网站发送消息。

有一样东西是,是只有本人持有的,而其他人没有,那就是私钥,使用私钥加上摘要算法就可以实现数字签名,同时实现身份认证和不可否认。

数字签名的原理就是用私钥来加密,公钥来解密。因为非对称的性能问题,所以私钥只加密原文的摘要,这样就方便传输了。拿到摘要后,再对比原文验证完整性,就可以确定是你发的了。

这两个行为就是签名和验签,因为私钥是保密的,黑客不能获取,也就保证了双方的身份。

数字证书和 CA

上述的方法看似已经解决了所有问题,但其实还有一个公钥信任的问题,也就是说谁都可以发布公钥,那你怎么知道你收到的公钥就是该网站的公钥而不是黑客伪造的呢?

CA(证书认证机构)

通过第三方 CA 自身的信誉来保障公钥无法伪造,是可信的,把一系列的东西打包起来再签名,这就是数字证书了。

CA 怎么证明自己,这是个信任链的问题,小一点的 CA 让大的 CA 认证,Root CA 是自己证明自己,这就是自签名证书。

操作系统和浏览器内置了各大 CA 的根证书,上网的时候只要服务器发过来它的证书,它就可以验证证书里的签名,顺着证书链一层层地验证,最终确定证书可信任。

如果是自制证书,肯定是不被浏览器信任的,所以 Chrome 之类的就会显示成不安全。

网络

TLS 介绍

字符串习题