互联网中常用的密码学场景

2019-07-22
3分钟阅读时长

本文简单介绍了互联网中常见的加密类型和公私钥等概念

对称加密

对称加密中,通话双方使用同一个密钥,发送消息和接收消息均使用该密钥进行加密和解密。 该加密方式项比与非对称加密来说加密解密速度快,但建立在双方均知道密钥的条件下,密钥在传输的过程中可能会被窃取。

非对称加密

非对称加密是指通信双方手持密钥不同,一方为公钥一方为私钥。通信开始时,消息的接受方需要先将公钥发送给消息发送方,然后发送方使用公钥来对消息进行加密,密文发送给接收方来使用私钥解密,完成通信。

在加密通信的过程中,公钥负责加密,私钥负责解密,数据即便在传输过程中被截取,因没有私钥,消息也不会被破解。

RSA 为常用的非对称加密算法,其原理为:

  • 单向函数正向求解容易,逆向求解很难。
  • 1.对两个质数相乘容易,而将相乘结果分解很难的特征进行加密。n=p1*p2,已知 p1、p2 求 n 简单,已知 n 求 p1、p2 困难。
  • 2.(m^e) mod n=c,已知 m、e、n 求 c 简单,已知 e、n、c 求 m 很难。

数字签名

以上所说的为消息的加密算法,是用来保证第三方不会窃取到未加密消息。

而数字签名的作用主要有两个:

  • 证明消息来源
  • 证明消息完整

与上述非对称加密相同,数字签名也是需要一个公钥和一个私钥,不同的是,数字签名中,私钥用来生成签名,公钥用来对签名进行校验。

考虑以下场景: 你发布了一个公告,需要一个手段来证明该消息是由你发布的,你只需要用自己的私钥来加密一段话并且附在公告的结尾,收到通知的一方使用公钥对结尾处的密文进行解密,成功解密的话就证明消息是由你本人发送的。这样就证明了消息来源。再次基础之上,想要证明消息完整的话,只需要将公告的原文全文做一次哈希,然后将得到的哈希值用私钥加密作为结尾的签名。收到公告的一方对结尾签名解密之后得到发送时公告的哈希值,之后验证收到的公告哈希是否和原文相同就能判断消息是否完整。

因此,数字签名是利用了私钥来生成签名,公钥来进行校验

SSL/TLS

SSL/TLS 就是综合利用了非对称加密,对称加密,数字签名来保证消息在互联网上传播的保密性。最终目的:

  • 所有消息加密传播,第三方无法窃听
  • 具有校验机制,一旦被修改,通信方立刻会发现
  • 配备身份证书,防止身份被冒充

SSL/TLS 基本过程:

  • 客户端向服务器端索要并验证公钥。
  • 双方协商生成"对话密钥"。
  • 双方采用"对话密钥"进行加密通信。

上述过程中前两部分称为握手阶段,通过非对称加密来交换信息从而生成密钥来实现对称加密通信。

SSL/TLS 握手过程:

  1. 首先客户端给出协议版本号,一个客户端生成的随机数 (Client random),以及客户端支持的加密方法。
  2. 服务端确认双方使用的加密方法,并给出数字证书,以及一个服务端生成的随机数 (Server random)。
  3. 客户端确认证书有效,然后生成一个新的随机数 (Premaster secret),并使用证书中的公钥进行加密,发送给服务端。
  4. 服务端使用私钥解密获取客户端发来的随机数 (Premaster secret)。
  5. 客户端和服务端根据约定的加密方式,使用 Client random、Premaster secret、Premaster secret 三种随机数生成会话密钥 (session key),来加密接下来的通信完成握手阶段。