TLS

TLS

TLS 协议

来讲讲密码学的东西,我们现在进入那些http开头的网页,我们的浏览器往往就会提示我们说,这个网页不安全。而现在安全的网页都至少是以https开头的,这多出的一个s就是TLS协议的缩写。

TLS 协议(Transport Layer Security,传输层安全协议。它其实兼用了对称加密和非对称加密(你不是说非对称加密就是叼吗,但是它慢,所以调和一下,俩都得用)。

对称加密

对称加密就是加密和解密使用相同的密钥。我们有明文和密码表,发送方就通过这样的方式加密成密文进行传输,接收方收到密文后,通过相同的密码表,对密文进行解密来得到明文。

这样的问题就是安全性低,首先,密码表必须在两个方向上都通行,如果中间人截获了密文,他就无法解密,其次,密码表容易泄露,如果有人获取了密码表,他就可以解密所有传输过来的密文。最后,随着算力的增长,攻击者可以暴力破解密码表,使得通信不再安全。(比如二战中的图灵机,我们现在的量子计算机都通过领先加密方式的算力暴力破解密码)

非对称加密

非对称加密就是加密和解密使用不同的密钥。我们有公钥和私钥,公钥是公开的,私钥是保密的。发送方使用公钥加密明文,接收方使用私钥解密密文,这样就保证了通信的安全性。

非对称加密的优点是,公钥和私钥是不同的,公钥可以公开,私钥只有发送方自己知道,这样就保证了通信的安全性。但是,非对称加密的缺点也很明显,首先,公钥和私钥的生成和配对过程比较复杂,需要花费大量的计算资源,其次,公钥的传输和存储也比较麻烦,第三,非对称加密的通信速度慢,因为需要多次加密和解密。

总结来说,非对称加密主打的就是一手公钥和私钥的艺术,私钥只能自己知道,而只有对应私钥才能开锁。

RSA 加密

基于非对称加密的 RSA 加密算法,是目前最常用的公钥加密算法。RSA 加密算法的基本思路是,选择两个大素数 p 和 q,计算它们的乘积 n=pq,计算出一个质数 e,使得 e 和 (p-1)(q-1) 互质,然后计算出一个整数 d,使得 ed=1 mod (p-1)(q-1)。

这种正向加密很简单,但是数字一大,反向解密的难度就非常大,即使动用量子计算机,也得好久。

DH 加密

核心就是生成一个仅通信双方知晓的密钥。DH 加密算法的基本思路是,双方各自生成一个随机数,然后用自己的私钥加密,发送给对方,对方用自己的公钥解密,得到对方的随机数,然后再用双方的随机数生成一个密钥,用这个密钥进行通信。

这种加密方式的优点是,通信双方不需要共享任何密钥,双方的通信可以直接进行,速度快。缺点是,通信双方必须事先协商好,协商过程比较麻烦,而且通信双方必须知道对方的公钥,否则无法通信。

数字证书

数字证书是用来证明公钥的合法性的。首先,我们需要有一个权威的证书颁发机构(CA),它是公认的,可以认证公钥的合法性。CA 会给公钥颁发证书,证书里面包含公钥的一些信息,比如公钥的哈希值、公钥的使用者、公钥的有效期等。

当浏览器访问一个https网页时,首先会向 CA 验证公钥的合法性,如果验证通过,浏览器就会生成一个随机的密钥,用公钥加密这个密钥,然后把密钥和证书一起发送给服务器。服务器收到密钥和证书后,会用私钥解密密钥,然后用密钥进行通信。这样就保证了通信的安全性。

总结来说,证书就是保存在源服务器当中,由权威机构发布的认证文件,里面包含公钥的一些信息,包括哈希值、使用者、有效期等。浏览器进行验证,成功后就可以信任进行访问,即公钥私钥的交换了。

TLS 握手

前置条件: 客户端已经验明了服务器的身份,也就是证书合法。

  1. 客户端发起请求,确定TLS版本,加密套件和第一随机数

  2. 服务器返回TLS版本,加密套件和第二随机数

  3. 客户端根据两个随机数生成一个预主密钥,并用服务器的公钥加密,发送给服务器

  4. 服务器用自己的私钥解密,得到预主密钥

  5. 这样两边都有了两个随机数和预主密钥,就可以生成一个相同的会话密钥

  6. 双方通过相同且唯一的会话密钥进行对称加密的通信,以提高通讯效率

If you have any questions, please contact me via the repo. Issues are welcome.
Built with Hugo
Theme Stack designed by Jimmy