我们都知道HTTPS原理是非对称加密传输密钥,对称加密传输消息,写这篇文章是为了简单理解里面的原理.

非对称加密

数学原理:

密文 = f(明文, key1)
明文 = g(密文, key2)
-------------------
密文 = 明文^E(E次方) mod N          --> E 和 N 的组合就是key1
明文 = 密文^D(D次方) mod N          --> D 和 N 的组合就是key2

以下是计算过程:

  1. 求N: 准备两个很大的质数p,q, N=p*q
  2. 求L: L是临时使用的数. L=最小公倍数(p-1, q-1)
  3. 求E: 满足 最大公约数(E, L)=1 也就是 E,L 互质
  4. 求D: 满足 E*D mod L = 1

举例:

  1. 求N: p=17, q=19, N=323
  2. 求L: 最小公倍数(16, 18)=144
  3. 求E: 最大公约数(E, 144)=1, 满足条件的E有很多, 这里选择E=5
  4. 求D: 5*D mod 144 = 1, D=29可以满足

公钥: E=5, N=323
私钥: D=29, N=323

假定: 消息发送者A, 消息接收者B.
流程: 由B生成公私钥, 把公钥发送给A, A用公钥加密消息, 把密文发给B, B用私钥解密.
公私钥解决了密钥配送问题, 但是也有缺点:

  • 公钥认证问题, A拿到的公钥是B生成的吗?也有可能中间人攻击
  • 处理速度慢

对称加密

共享相同的密钥密码

HTTPS

从非对称加密可以知道公钥认证问题, 这里就需要可信任的第三人来证明公钥是没问题的. 这就是认证机构. 机构的证书包含公钥和它自己的数字签名.

如果相信这个机构, 就有接下来的流程:

消息发送者A为浏览器一侧, 消息接受者B为服务器;

A生成对称加密所需的密钥K, 用受信任的B的公钥加密, 发送给B, B解密出对称加密所需的密钥K, 使用K加密消息 发送给A, A使用密钥K解密. 后续的消息都可以通过对称加密进行.

标签: none

添加新评论