传纸条游戏之https原理揭秘

1,127 阅读3分钟

规则说明

今天和老婆还有儿子一起玩了一个传纸条的游戏,规则如下:

    1. 老婆和儿子可以把想说的话,写在纸条上,只能通过我来传递。
    1. 但是纸条的内容不能被我看到。

对话

儿子: 我可以写两张纸条,一张真一张假,这样你就分不清楚啦。

我: 我的确分不清楚哪张是真的,但是妈妈也分不清楚啊,你要怎么告诉妈妈哪张是真的呢?

儿子:。。。。。。

老婆: 我们是不是可以把纸条放进箱子里,然后拿把锁把箱子锁住,然后我和儿子各拿一把一样的钥匙,这样我们有钥匙可以开锁,而你没有钥匙,不就可以传纸条而不被你发现了。

我: 说到点子上了,这样的确可以传纸条而不被发现。但是你要怎么把钥匙交给儿子呢?如果你把钥匙较给我,我可以找佩钥匙的师傅复制一把钥匙啊,这样不就可以读到你们的小纸条了吗?

老婆:。。。。。。

我:我来揭晓谜底吧。

准备阶段:

1. 老婆准备好1把锁和1把钥匙(为了方便起见,记为锁L1,和钥匙 K1)
2. 儿子准备好1把锁和2把钥匙 (记为锁L2,和钥匙 K2)

现在开始传递啦:

1. 老婆先把锁 L1 传递给儿子
2. 儿子把钥匙 K2 放入箱子中,用 老婆给的锁 L1 把箱子锁上,然后传递给老婆
3. 老婆拿到箱子后用钥匙 K1 打开 锁L1, 就拿到了 钥匙 K2
4. 既然老婆和儿子都有钥匙 K2 就可以用 L2 锁住箱子后进行纸条传递了。

原理

我们来分析上面的步骤,上面的步骤其实就做了两件事情:

    1. 前三个步骤主要做的是钥匙的传递
    1. 第四个步骤是信息的传递。

而https协议也就分为 钥匙传递信息传递 这两个步骤。

名称说明

我们先把上面的名词解释换成计算机中的专业术语:

现实名词 专业术语 说明
老婆 服务端(server)
儿子 客户端(client)
锁 L1 公钥 只能加密使用,和 K1构成了非对称加密
钥匙 K1 私钥 只能解密使用,和 L1 构成了非对称加密
锁L2和钥匙K2 对称加密 即能加密又能解密

钥匙传递

  1. 客户端服务端 发起请求时,服务端 先把 公钥(锁L1) 传递给 客户端
  2. 客户端 拿到 公钥 后, 会生产一段 随机数 (钥匙K2),通过 公钥 加密(用L1上锁),然后传回 服务端
  3. 服务端 拿到 加密数据后, 使用 私钥 解密(使用钥匙K1打开锁L1),就拿到了那个 随机数,可以用于通信了。

信息传递

  1. 客户端 就可以使用那个 随机数 来加密了,而 服务端 可以拿 随机数 来解密,然后处理完成后,再把结果以 随机数 加密,然后传回 客户端

详细流程图

当然上面的段落只是https的原理说明,省略和很多的细节。如果要更全面的了解https,这里推荐李兵老师的一篇文章,

time.geekbang.org/column/arti…

这里就不做细说了,贴一张比较详细的https的流程说明图,供小伙伴参考,感兴趣的小伙伴可自行前往阅读。

意料之外的结局

老婆: 你这个方法太麻烦了,我有一个更加简便的方法。

我: 你说。

老婆: 我先纸条放入箱子,拿把锁锁住,然后传给儿子,然后再把钥匙传给儿子。

我: 这样虽然第一次能成功,但是我可以复制钥匙啊,以后怎么办呢?

老婆: 我每传一次换一把锁啊,反正财政大全掌握在我的手里,论财力你又拼不过我的。

我:。。。。。。土豪,你赢了。