TLS 握手过程

TLS 握手过程,主要目的是为了协商对称加密的密钥,因为在最终的通信链路上使用对称加解密会更快。

我们知道,生成最终通信的对称密钥需要三个随机数:

  • 客户端随机数
  • 服务端随机数
  • pre-master

前两个是公开的,那么最重要的就是 pre-master,在协商过程中如何保证它不会被窃取。为了保证协商安全性、对端可靠性,那么采用非对称加密的方式会更加合适,因为私钥只有服务端持有。

在 TLS 中采用的非对称加密方式主要有如下两种:

  • RSA
  • ECDHE

而这两种方式的区别,就在于 pre-master 的生成方式不同。

对称和非对称加密

先简单解释一下对称加密和非对称加密。

  • 对称加密:只有一个密钥,加解密使用同一个密钥。
  • 非对称加密:存在一对公私钥。私钥只有一方持有,公钥是公开的。公钥加密,可以用私钥解密;私钥加密,可以用公钥解密。但私钥加密的方式,一般是用于验证持有私钥的发送人是否可信,因为只有它持有私钥(私钥泄露了另算)。当接收方用公钥能正常解密时,则可认为是由公钥匹配的私钥所加密的数据,也就可认为发送方可信。另外,由于公钥所有人都可以获取,所以不会使用私钥加密敏感数据,因为所有人都可解密。

注:即使接收方用公钥能正常解密,但这并不能完全保证发送方就是接收方想要通信的一方,因为接收方不能确认公钥的端正确性只是和发送方的私钥配对而已,发送方可以被伪装。因此在握手过程中又引入了证书校验的过程。这一节中我们暂且不讲。

RSA 握手

如果双方使用传统的 RSA 算法进行密钥交换,那么 pre-master 是由客户端生成的一个随机数,然后用服务器公钥加密后发给服务端,服务端用私钥解密得到 pre-master

双方再根据 client-random + server-random + pre-master 三个参数计算出主密钥 master-key

流程图如下:

RSA.png

但是这种方式会存在安全问题,它不具有前向安全性。那什么是前向安全性?也就是指历史数据的安全性,不会被破解。

假设一个黑客收集了很多历史数据,当他破解服务端私钥后,可以计算出 pre-master,从而根据历史数据中的 client-random + server-random 计算出密钥,然后就可解密所有之前的加密数据。并且,由于私钥是固定的,在后续新的会话中,仍然可以获取 pre-master,继续截获信息。所以 RSA 并不安全。

ECDHE 握手

而现在主流的 TLS 握手算法,一般会选择安全性更强的 ECDHE 实现密钥交换,即椭圆曲线算法,相比 RSA 算法来说具有前向安全性

因为在每次握手过程中,服务端和客户端都重新会生成 ECDHE 算法的参数,也就是一对公私钥,并且是一次一密。即使黑客截获了当前会话,那也只能监听该次通信内容。

流程图如下:

ECDHE.png

从图中我们可以看到,在服务端发送 Server Certificate 后,多了一步 Server Key Exchange 的过程。

  • 服务端会生成一个公钥 server-public-key 发给客户端。
  • 客户端在 Client Key Change 时也会生成一个公钥 client-public-key 发给服务端。
  • 最终,pre-master 由服务端的 server-public-key + 客户端的 client-public-key,再根据 ECDHE 算法计算而来。

该算法可以保证两边计算出来的结果是一样的。

ECDHE 原理

在了解什么是 ECDHE 之前,首先可先了解下 DH 算法 的原理。

其实很简单,就是利用了模幂运算的特性。

gᵃᵇ mod p = (gᵃ mod p)ᵇ mod p = (gᵇ mod p)ᵃ mod p

对照上面 ECDHE 握手过程图来说。

客户端在 Client Key Change 这一步的公私钥数据如下:

私钥:a
公钥:A = gᵃ mod p

服务端在 Server Key Change 这一步的公私钥数据如下:

私钥:b
公钥:B = gᵇ mod p

客户端根据服务端传来的公钥 B 和自己的私钥 a,计算出秘钥 k1:

k1 = Bᵃ mod p = (gᵇ mod p)ᵃ mod p = gᵃᵇ mod p

服务端根据客户端传来的公钥 A 和自己的私钥 b,计算出秘钥 k2:

k2 = Aᵇ mod p = (gᵃ mod p)ᵇ mod p = gᵃᵇ mod p

那么,由此计算出的 k1 和 k2 是相等的。

那 DHE 又是什么呢?DHE 算法与 DH 原理是相同的,只不过由于 DH 算法一方的公钥是固定的,不具有前向安全性。因此改进成了 DHE,E 代表 ephemeral,短暂的,即每次都生成公私钥。

ECDHE 则是在 DHE 的基础上,将整数域里的离散对数替换成了椭圆曲线的离散对数,使其更难以破解,更加安全。

注意:ECDHE 算法参数 public-key 是不需要加密的。因为即使黑客拿到了公钥参数,也很难计算出 pre-master。

两者区别

两种算法的区别主要在于:

  • RSA 私钥是固定的,破解后可以得到所有的算法参数。
  • ECDHE 是每次重新生成参数,一次一密,更加安全。

因此在 TLS 1.3 中,废除了 RSADH 算法,使用了更加安全的 ECDHE

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,843评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,538评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,187评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,264评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,289评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,231评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,116评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,945评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,367评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,581评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,754评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,458评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,068评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,692评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,842评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,797评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,654评论 2 354