前言

电影《模仿游戏》讲述了计算机之父——艾伦·图灵在二战期间,帮助盟军破译德国军事密码—— Enigma 的故事,为盟军的胜利起了巨大的推动作用,拯救了 1000 多万人的生命。
20201027185310.jpg

加密

加密,是以某种特殊的算法改变原有的信息数据,使得未授权的用户即使获得了已加密的信息,但因不知解密的方法,仍然无法了解信息的内容。

加密最初源自战争用途,雅典间谍的腰带情报,是世界上最早的密码情报,具体运用方法是,通信双方首先约定密码解读规则,然后通信—方将腰带(或羊皮等其他东西)缠绕在约定长度和粗细的木棍上书写。收信—方接到后,如不把腰带缠绕在同样长度和粗细的木棍上,就只能看到一些毫无规则的字母。

20201107163333.jpg

从加密方式的维度来看,上述两种加密都属于对称加密。加密技术起源于军事通讯领域,在现代被广泛应用于各类通讯技术中。
加密之所以安全的原因,并不在于加密解密算法的方法,而在于加密的密钥是绝对的隐藏。流行的 RSA 和 AES 加密算法都是完全公开的,一方得到已加密的数据,就算知道加密算法,如果没有加密的密钥,也不能破解出被加密保护的信息。
加密的方式分为两种:对称加密和非对称加密。

对称加密

对称加密,即使用相同的密钥来进行加密和解密。对称加密的优点是加密和解密速度快,适合大量加密的场景。其缺点也非常明显,密钥不易维护,加密方和解密方需要约定并分配密钥,双方对密钥的保管和传输过程中一旦发生泄漏,安全性就会被打破。

20201029191902.png

常见的对称加密算法有以下几种:

  • DES
  • 3DES
  • AES

非对称加密

非对称加密算法需要两个密钥来进行加密和解密,这两个密钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)。
非对称加密的流程是,A 生成公钥和私钥,将公钥共享给 B,私钥自己保存。B 用公钥加密后将信息传输给 A ,A 使用私钥解密得到原始信息。
很明显可以看出,非对称加密在安全性上要更高,即使公钥和密文被截取,没有私钥也无法获取原始信息。
非对称加密算法的特点是算法强度复杂,使得加密解密的速度远远低于对称加密算法,因此不适用于数据量较大的情况。
使用公钥加密的文本只能使用私钥解密,同时,使用私钥加密的文本也可以使用公钥解密。

20201029193223.png

常见的非对称加密算法有以下几种:

  • RSA
  • DSA
  • ECDSA

HTTPS

在网络传输协议方面,越来越多的公司将服务从 HTTP 协议切换到 HTTPS 协议,来应对纷繁复杂的网络安全问题。

HTTPS (Hyper Text Transfer Protocol over SecureSocket Layer),是以安全为目标的 HTTP 通道,在 HTTP 的基础上通过传输加密和身份认证保证了传输过程的安全性。

HTTP 协议是没有加密过程的,数据以明文方式传输,因此其安全性较低,使用抓包软件可以轻易的获取到隐私的数据,篡改数据的中间人攻击也难以防御。

HTTPS 在 HTTP 基础上增加了 TSL 或 SSL 层,使用了对称加密和非对称加密两种加密方式来保证数据传输的安全性。

HTTPS = HTTP + 加密 + 认证 + 数据完整性保护

以下是 HTTPS 协议客户端与服务端的交互流程:

客户端与服务端的通信流程如下:

  • 1、客户端向服务端发送请求
  • 2、服务端将证书传输给客户端,证书中包含公钥信息,私钥在服务端保存
  • 3、客户端生成随机码,使用公钥加密
  • 4、客户端将加密后的随机码传输给服务端
  • 5、服务端通过私钥解密随机码
  • 6、客户端与服务端通过随机码作为对称加密的密钥来进行加密传输

20201107174007.png

混合加密

从流程中可以看出,加密方式使用对称加密和非对称加密的混合使用。对称加密的痛点是密钥传输有可能被窃听,导致加密变得不安全,所以用非对称加密传输对称加密的密钥,后续通信使用对称加密。
数据传输通信环节不使用公钥加密、私钥解密,因为非对称加密由于算法复杂效率低。

认证

服务端非对称加密所使用的公钥与私钥是由保证安全的第三方数字认证机构签发的,需要由服务端向数字认证机构申请。
数字认证机构的公钥会事先植入浏览器中,服务端传输给客户端证书后,客户端使用公钥验证证书签名的有效性,以确保服务端的真实存在性。

20201110192755.png

HTTPS 中还可以使用客户端证书,以确保客户端的真实存在性,但基于成本高的原因,只有在特殊场景才会使用,比如网上银行登录时需要下载安全控件

总结

HTTPS 中使用了对称加密和非对称加密的混合,使得数据传输变得更安全,但是并非所有场景都适用 HTTPS,受加密解密的通信步骤的增加和本身算法增加的机器负载影响,HTTPS 要比 HTTP 慢 2~100 倍,所以针对非敏感、隐私信息的数据传输场景使用 HTTP 才是一个更好的选择。