移动端 | 加入收藏 | 设为首页 | 最新ss | 赞助本站 | RSS
 

freefq.comfree——免费、自由fq——翻墙

困在墙内,请发邮件到freefqcom#gmail.com获得最新免费翻墙方法!
您当前的位置:首页 > 网络安全

扫盲HTTPS和SSL/TLS协议:密钥交换(密钥协商)算法及其原理

时间:2016-10-01  来源:program-think  作者:编程随想 条评论

扫盲 HTTPS 和 SSL/TLS 协议[3]:密钥交换(密钥协商)算法及其原理hjJ免费翻墙网

文章目录hjJ免费翻墙网

★密钥交换/协商机制要达到啥目的?hjJ免费翻墙网

★密钥交换/协商机制的几种类型hjJ免费翻墙网

★基于 RSA 的密钥协商hjJ免费翻墙网

★基于 DH 的密钥协商hjJ免费翻墙网

★DH 的变种hjJ免费翻墙网

★基于 PSK 的密钥协商hjJ免费翻墙网

★基于 SRP 的密钥协商hjJ免费翻墙网

★各种组合的一览表hjJ免费翻墙网

先插播一个好消息:hjJ免费翻墙网
本月初俺发了一篇《老流氓CNNIC 的接班人——聊聊“沃通/WoSign”的那些破事儿》。前2天看到新闻说,Mozilla 组织(Firefox)已经把沃通的根证书加入黑名单了,为期一年。一年之后看它的表现再决定是否永久性屏蔽。hjJ免费翻墙网
对这种流氓公司,就应该给它点颜色看看(老实说,俺还觉得处罚偏轻了)hjJ免费翻墙网


  本系列的前一篇,咱们聊了“密钥交换的难点”以及“证书体系”的必要性。今天这篇来介绍一下实战中使用的“密钥协商算法”。hjJ免费翻墙网
hjJ免费翻墙网
hjJ免费翻墙网

★密钥交换/协商机制要达到啥目的?

hjJ免费翻墙网
前一篇介绍了 SSL/TLS 的身份认证机制。这个机制是为了防止攻击者通过【篡改】网络传输数据,来假冒身份,以达到“中间人攻击/MITM”的目的。hjJ免费翻墙网
而今天要聊的“密钥协商机制”是:(在身份认证的前提下)如何规避【偷窥】的风险。hjJ免费翻墙网
通俗地说,即使有攻击者在偷窥你与服务器的网络传输,客户端(client)依然可以利用“密钥协商机制”与服务器端(server)协商出一个用来加密应用层数据的密钥(也称“会话密钥”)。hjJ免费翻墙网
hjJ免费翻墙网
hjJ免费翻墙网
hjJ免费翻墙网

★密钥交换/协商机制的几种类型

hjJ免费翻墙网
俺总结了一下,大致有如下几种类型:hjJ免费翻墙网

◇依靠非对称加密算法

hjJ免费翻墙网
原理:hjJ免费翻墙网
拿到公钥的一方先生成随机的会话密钥,然后利用公钥加密它;再把加密结果发给对方,对方用私钥解密;于是双方都得到了会话密钥。hjJ免费翻墙网
hjJ免费翻墙网
举例:hjJ免费翻墙网
RSAhjJ免费翻墙网

◇依靠专门的密钥交换算法

hjJ免费翻墙网
原理:hjJ免费翻墙网
这个原理比较复杂,一两句话说不清楚,待会儿聊到 DH 的那个章节会详谈。hjJ免费翻墙网
hjJ免费翻墙网
举例:hjJ免费翻墙网
DH 算法及其变种hjJ免费翻墙网

◇依靠通讯双方事先已经共享的“秘密”

hjJ免费翻墙网
原理:hjJ免费翻墙网
既然双方已经有共享的秘密(这个“秘密”可能已经是一个密钥,也可能只是某个密码/password),只需要根据某种生成算法,就可以让双方产生相同的密钥(并且密钥长度可以任意指定)hjJ免费翻墙网
hjJ免费翻墙网
举例:hjJ免费翻墙网
PSKSRPhjJ免费翻墙网
hjJ免费翻墙网
hjJ免费翻墙网
hjJ免费翻墙网

★基于 RSA 的密钥协商

 hjJ免费翻墙网

◇概述

hjJ免费翻墙网
这大概是 SSL 最古老的密钥协商方式——早期的 SSLv2 只支持一种密钥协商机制,就是它。(前一篇)介绍身份认证重要性的时候,也是拿 RSA 来演示。hjJ免费翻墙网
RSA 是一种【非】对称加密算法。在本系列第1篇的背景知识介绍中,已经聊过这种算法的特点——加密和解密用使用【不同的】密钥。并且“非对称加密算法”既可以用来做“加密/解密”,还可以用来做“数字签名”。hjJ免费翻墙网

◇密钥协商的步骤

hjJ免费翻墙网
(下列步骤只阐述原理,具体的协议细节在下一篇讲)hjJ免费翻墙网
hjJ免费翻墙网
1. 客户端连上服务端hjJ免费翻墙网
2. 服务端发送 CA 证书给客户端hjJ免费翻墙网
3. 客户端验证该证书的可靠性hjJ免费翻墙网
4. 客户端从 CA 证书中取出公钥hjJ免费翻墙网
5. 客户端生成一个随机密钥 k,并用这个公钥加密得到 k'hjJ免费翻墙网
6. 客户端把 k' 发送给服务端hjJ免费翻墙网
7. 服务端收到 k' 后用自己的私钥解密得到 khjJ免费翻墙网
8. 此时双方都得到了密钥 k,协商完成。hjJ免费翻墙网

◇如何防范偷窥(嗅探)

hjJ免费翻墙网
攻击方式1hjJ免费翻墙网
攻击者虽然可以监视网络流量并拿到公钥,但是【无法】通过公钥推算出私钥(这点由 RSA 算法保证)hjJ免费翻墙网
hjJ免费翻墙网
攻击方式2hjJ免费翻墙网
攻击者虽然可以监视网络流量并拿到 k',但是攻击者没有私钥,【无法解密】 k',因此也就无法得到 khjJ免费翻墙网

◇如何防范篡改(假冒身份)

hjJ免费翻墙网
攻击方式1hjJ免费翻墙网
如果攻击者在第2步篡改数据,伪造了证书,那么客户端在第3步会发现(这点由证书体系保证)hjJ免费翻墙网
hjJ免费翻墙网
攻击方式2hjJ免费翻墙网
如果攻击者在第6步篡改数据,伪造了k',那么服务端收到假的k'之后,解密会失败(这点由 RSA 算法保证)。服务端就知道被攻击了。hjJ免费翻墙网
hjJ免费翻墙网
hjJ免费翻墙网
hjJ免费翻墙网

★基于 DH 的密钥协商

 hjJ免费翻墙网

◇概述

hjJ免费翻墙网
DH 算法又称“Diffie–Hellman 算法”。这是两位数学牛人的名称,他们创立了这个算法。该算法用来实现【安全的】“密钥交换”。它可以做到——“通讯双方在完全没有对方任何预先信息的条 件下通过不安全信道创建起一个密钥”。这句话比较绕口,通俗地说,可以归结为两个优点:hjJ免费翻墙网
1. 通讯双方事先【不】需要有共享的秘密。hjJ免费翻墙网
2. 用该算法协商密码,即使协商过程中被别人全程偷窥(比如“网络嗅探”),偷窥者也【无法】知道协商得出的密钥是啥。hjJ免费翻墙网
hjJ免费翻墙网
但是 DH 算法本身也有缺点——它不支持认证。也就是说:它虽然可以对抗“偷窥”,却无法对抗“篡改”,自然也就无法对抗“中间人攻击/MITM”(在本系列的前一篇,俺已经强调过了——缺乏身份认证,【必定会】遭到“中间人攻击/MITM”)。hjJ免费翻墙网
为了避免遭遇 MITM 攻击,DH 需要与其它签名算法(比如 RSADSAECDSA)配合——靠签名算法帮忙来进行身份认证。当 DH 与 RSA 配合使用,称之为“DH-RSA”,与 DSA 配合则称为“DH-DSA”,以此类推hjJ免费翻墙网
反之,如果 DH 【没有】配合某种签名算法,则称为“DH-ANON”(ANON 是洋文“匿名”的简写)。此时会遭遇“中间人攻击/MITM”。(具体的中间人攻击手法,可以参见本系列前一篇hjJ免费翻墙网
hjJ免费翻墙网
关于该算法的更多介绍,可以参见维基百科(这个条目)。hjJ免费翻墙网

◇数学原理

hjJ免费翻墙网
(如果你属于那种“看了数学公式就犯晕的人”,可以直接略过本小节,不影响你看后续的章节)hjJ免费翻墙网
hjJ免费翻墙网
从概念上讲:DH 依赖的是:求解“离散对数问题”的复杂性。具体的算法如下:hjJ免费翻墙网
通讯双方(张三、李四)需要先约定好算法参数(algorithm parameters):一个素数 p 作为模数,一个素数 g 作为基数(g 也称为“生成元”)。这两个算法参数是可以对外公开滴。hjJ免费翻墙网
对于张三而言,需要先想好一个秘密的自然数 a 作为私钥(不能公开),然后计算 A = ga mod p 作为自己的公钥(可以公开)。hjJ免费翻墙网
对李四而言也类似,先想好一个秘密的自然数 b 作为私钥(不能公开),然后计算 B = gb mod p 作为自己的公钥(可以公开)。hjJ免费翻墙网
张三和李四互相交换各自的公钥。hjJ免费翻墙网
然后张三计算出 k = Ba mod p,李四计算出 k = Ab mod phjJ免费翻墙网
hjJ免费翻墙网
该算法至少确保了如下几点:hjJ免费翻墙网
1. 张三和李四分别计算出来的 k 必定是一致的hjJ免费翻墙网
2. 张三和李四都无法根据已知的数来推算出对方的私钥(张三无法推算出 b,李四无法推算出 a)hjJ免费翻墙网
3. 对于一个旁观者(偷窥者),虽然能看到 p,g,A,B,但是无法推算出 a 和 b(就是说,旁观者无法推算出双方的私钥),自然也无法推算出 khjJ免费翻墙网
hjJ免费翻墙网
举例hjJ免费翻墙网
前面说得都是符号,比较抽象。下面拿具体数字举例:hjJ免费翻墙网
假设约定的算法参数:模数是 97,基数是 3hjJ免费翻墙网
张三用的私钥是 6,李四用的私钥是 21,用 python 代码演示如下(python 语言用两个连续星号表示“幂运算”,用百分号表示“取模运算”):hjJ免费翻墙网

p = 97hjJ免费翻墙网
g = 3hjJ免费翻墙网
hjJ免费翻墙网
a = 6hjJ免费翻墙网
b = 21hjJ免费翻墙网
hjJ免费翻墙网
A = (g**a) % phjJ免费翻墙网
B = (g**b) % phjJ免费翻墙网
hjJ免费翻墙网
print((B**a) % p) # 47hjJ免费翻墙网
print((A**b) % p) # 47

  最后打印出来的两个 47 就是双方都计算出了【相同的】结果(这个数值可以用作之后的“会话密钥”)hjJ免费翻墙网
hjJ免费翻墙网
上面因为是举例,用的数字都比较小。在实战中需要注意如下几点,以降低被攻击的风险。hjJ免费翻墙网
1. p 必须是质数且足够大(至少300位)hjJ免费翻墙网
2. a,b 也要足够大(至少100位),且必须是随机生成。hjJ免费翻墙网
3. g 必须是质数,【不】需要很大,比如 2 或 3 或 5 都可以。g 如果太大并【不能】显著提升安全性,反而会影响性能。 hjJ免费翻墙网

◇密钥协商的步骤

hjJ免费翻墙网
(下列步骤只阐述原理,具体的协议细节在下一篇讲)hjJ免费翻墙网
hjJ免费翻墙网
1. 客户端先连上服务端hjJ免费翻墙网
2. 服务端生成一个随机数 s 作为自己的私钥,然后根据算法参数计算出公钥 S(算法参数通常是固定的)hjJ免费翻墙网
3. 服务端使用某种签名算法把“算法参数(模数p,基数g)和服务端公钥S”作为一个整体进行签名hjJ免费翻墙网
4. 服务端把“算法参数(模数p,基数g)、服务端公钥S、签名”发送给客户端hjJ免费翻墙网
5. 客户端收到后验证签名是否有效hjJ免费翻墙网
6. 客户端生成一个随机数 c 作为自己的私钥,然后根据算法参数计算出公钥 ChjJ免费翻墙网
7. 客户端把 C 发送给服务端hjJ免费翻墙网
8. 客户端和服务端(根据上述 DH 算法)各自计算出 k 作为会话密钥hjJ免费翻墙网

◇如何防范偷窥(嗅探)

hjJ免费翻墙网
嗅探者可以通过监视网络传输,得到算法参数(模数p,基数g)以及双方的公钥,但是【无法】推算出双方的私钥,也【无法】推算出会话密钥(这是由 DH 算法在数学上保证的)hjJ免费翻墙网

◇如何防范篡改(假冒身份)

hjJ免费翻墙网
攻击方式1hjJ免费翻墙网
攻击者可以第4步篡改数据(修改算法参数或服务端公钥)。但因为这些信息已经进行过数字签名。篡改之后会被客户端发现。hjJ免费翻墙网
hjJ免费翻墙网
攻击方式2hjJ免费翻墙网
攻击者可以在第7步篡改客户端公钥。这步没有签名,服务端收到数据后不会发现被篡改。但是,攻击者篡改之后会导致“服务端与客户端生成的会话密钥【不一致】”。在后续的通讯步骤中会发现这点,并导致通讯终止。hjJ免费翻墙网
(下一篇讲具体协议的时候会提到:协议初始化/握手阶段的末尾,双方都会向对方发送一段“验证性的密文”,这段密文用各自的会话密钥进行【对称】加密,如果双方的会话密钥不一致,这一步就会失败,进而导致握手失败,连接终止)hjJ免费翻墙网
hjJ免费翻墙网
hjJ免费翻墙网
hjJ免费翻墙网

★DH 的变种

 hjJ免费翻墙网

◇基于“椭圆曲线”的 ECDH

hjJ免费翻墙网
DH 算法有一个变种,称之为 ECDH(全称是“Elliptic Curve Diffie-Hellman”)。维基条目在“这里hjJ免费翻墙网
它与 DH 类似,差别在于:hjJ免费翻墙网
DH 依赖的是——求解“离散对数问题”的困难。hjJ免费翻墙网
ECDH 依赖的是——求解“椭圆曲线离散对数问题”的困难。hjJ免费翻墙网
hjJ免费翻墙网
ECDH 的数学原理比 DH 更复杂。考虑到本文读者大都【不是】数学系出身,俺就不展开了。hjJ免费翻墙网
ECDH 跟 DH 一样,也是【无认证】的。同样需要跟其它签名算法(比如 RSADSAECDSA)配合。hjJ免费翻墙网

◇对 DH 和 ECDH 进行“临时密钥”的改良——DHE 和 ECDHE

hjJ免费翻墙网
刚才介绍的 DH 和 ECDH,其密钥是持久的(静态的)。也就是说,通讯双方生成各自的密钥之后,就长时间用下去。这么干当然比较省事儿(节约性能),但是存在某种安全隐患——无法做到“前向保密”(洋文是“forward secrecy”)。hjJ免费翻墙网
为了做到“前向保密”,采用“临时密钥”(洋文是“ephemeral key”)的方式对 DH 和 ECDH 进行改良。于是得到两种新的算法——DHE 和 ECDHE。(这两种新算法的名称,就是在原有名称后面加上字母 E 表示 ephemeral)。其实算法还是一样的,只是对每个会话都要重新协商一次密钥,且密钥用完就丢弃。hjJ免费翻墙网
(估计很多同学不太了解“前向保密”这个概念。俺会在本系列中单独开一帖,介绍“前向保密”的概念及其好处)hjJ免费翻墙网
hjJ免费翻墙网
hjJ免费翻墙网
hjJ免费翻墙网

★基于 PSK 的密钥协商

 hjJ免费翻墙网

◇概述

hjJ免费翻墙网
PSK 是洋文“Pre-Shared Key”的缩写。顾名思义,就是【预先】让通讯双方共享一些密钥(通常是【对称加密】的密钥)。所谓的【预先】,就是说,这些密钥在 TLS 连接尚未建立之前,就已经部署在通讯双方的系统内了。hjJ免费翻墙网
这种算法用的不多,它的好处是:hjJ免费翻墙网
1. 不需要依赖公钥体系,不需要部属 CA 证书。hjJ免费翻墙网
2. 不需要涉及非对称加密,TLS 协议握手(初始化)时的性能好于前述的 RSA 和 DH。hjJ免费翻墙网
更多介绍可以参见维基百科,链接在“这里”。hjJ免费翻墙网

◇密钥协商的步骤

hjJ免费翻墙网
(由于 PSK 用的不多,下面只简单介绍一下步骤,让大伙儿明白其原理)hjJ免费翻墙网
hjJ免费翻墙网
在通讯【之前】,通讯双方已经预先部署了若干个共享的密钥。hjJ免费翻墙网
为了标识多个密钥,给每一个密钥定义一个唯一的 IDhjJ免费翻墙网
协商的过程很简单:客户端把自己选好的密钥的 ID 告诉服务端。hjJ免费翻墙网
如果服务端在自己的密钥池子中找到这个 ID,就用对应的密钥与客户端通讯;否则就报错并中断连接。hjJ免费翻墙网

◇如何防范偷窥(嗅探)

hjJ免费翻墙网
使用这种算法,在协商密钥的过程中交换的是密钥的标识(ID)而【不是】密钥本身。hjJ免费翻墙网
就算攻击者监视了全过程,也无法知晓密钥啥。hjJ免费翻墙网

◇如何防范篡改(假冒身份)

hjJ免费翻墙网
PSK 可以单独使用,也可以搭配签名算法一起使用。hjJ免费翻墙网
对于单独使用hjJ免费翻墙网
如果攻击者篡改了协商过程中传送的密钥 ID,要么服务端发现 ID 无效(协商失败),要么服务端得到的 ID 与客户端不一致,在后续的通讯步骤中也会发现,并导致通讯终止。hjJ免费翻墙网
(下一篇讲具体协议的时候会提到:协议初始化/握手阶段的末尾,双方都会向对方发送一段“验证性的密文”,这段密文用各自的会话密钥进行【对称】加密,如果双方的会话密钥不一致,这一步就会失败,进而导致握手失败,连接终止)hjJ免费翻墙网
hjJ免费翻墙网
对于搭配签名算法hjJ免费翻墙网
如果攻击者篡改了协商过程中传送的密钥 ID,验证签名会失败hjJ免费翻墙网

◇补充说明

hjJ免费翻墙网
PSK 与 RSA 具有某种相似性——既可以用来搞“密钥协商”,也可以用来搞“身份认证”。hjJ免费翻墙网
所以,PSK 可以跟 DH(及其变种)进行组合。例如:DHE-PSK、ECDHE-PSKhjJ免费翻墙网
关于 PSK 的更多细节,可以参见 RFC4279hjJ免费翻墙网
hjJ免费翻墙网
hjJ免费翻墙网
hjJ免费翻墙网

★基于 SRP 的密钥协商

 hjJ免费翻墙网

◇概述

hjJ免费翻墙网
SRP 是洋文“Secure Remote Password”的缩写。这个算法有点类似于刚才提到的 PSK——只不过 client/server 双方共享的是比较人性化的密码(password)而不是密钥(key)。该算法采用了一些机制(盐/salt、随机数)来防范“嗅探/sniffer” 或“字典猜解攻击”或“重放攻击”。hjJ免费翻墙网
这个算法应该用得很少——OpenSSL 直到2012年才开始支持该算法。所以俺这里就不展开了。有兴趣的同学可以去看 RFC2945 的协议描述。hjJ免费翻墙网

◇密钥协商的步骤

hjJ免费翻墙网
(由于 SRP 用的不多,俺偷懒一下,略去此小节)hjJ免费翻墙网
hjJ免费翻墙网
hjJ免费翻墙网
hjJ免费翻墙网

★各种组合的一览表

 hjJ免费翻墙网

算法组合 密钥交换 身份认证 是否会遭遇hjJ免费翻墙网
中间人攻击
是否具备hjJ免费翻墙网
前向保密
SSL 2.0 SSL 3.0 TLS 1.0 TLS 1.1 TLS 1.2 TLS 1.3hjJ免费翻墙网
(草案)
RSA RSA RSA
DH-RSA DH RSA
DH-DSA DH DSA
DHE-RSA DHE RSA
DHE-DSA DHE DSA
ECDH-RSA ECDH RSA
ECDH-ECDSA ECDH ECDSA
ECDHE-RSA DHE RSA
ECDHE-ECDSA DHE ECDSA
PSK PSK PSK
PSK-RSA PSK RSA
DHE-PSK DHE PSK
ECDHE-PSK DHE PSK
SRP SRP SRP
SRP-RSA SRP RSA
SRP-DSA SRP DSA
DH-ANON DH
ECDH-ANON ECDH

hjJ免费翻墙网
(截至本文发布时,TLS 1.3 还处于“草案”阶段,尚未正式发布。等到它正式发布,俺会把上述表格的最后一列再补充一下)hjJ免费翻墙网

来自https://program-think.blogspot.com/2016/09/https-ssl-tls-3.htmlhjJ免费翻墙网

来顶一下
返回首页
返回首页
欢迎评论:免登录,输入验证码即可匿名评论 共有条评论
用户名: 密码:
验证码: 匿名发表

推荐资讯

Octohide VPN:快如闪电的免费VPN
Octohide VPN:快如闪
原子网络加速器 - 免费高速VPN 一键链接 方便快捷
原子网络加速器 - 免费
foxovpn绿狐VPN——即连即用、快速、安全
foxovpn绿狐VPN——即
Dubai VPN - Free, Fast & Secure VPN下载
Dubai VPN - Free, Fa
相关文章
栏目更新
栏目热门
墙外新闻
读者文摘

你可以访问真正的互联网了。You can access the real Internet.

管理员精中特别提醒:本网站域名、主机和管理员都在美国,且本站内容仅为非中国大陆网友服务。禁止中国大陆网友浏览本站!若中国大陆网友因错误操作打开本站网页,请立即关闭!中国大陆网友浏览本站存在法律风险,恳请立即关闭本站所有页面!对于您因浏览本站所遭遇的法律问题、安全问题和其他所有问题,本站均无法负责也概不负责。

特别警告:本站推荐各种免费科学上网软件、app和方法,不建议各位网友购买收费账号或服务。若您因付费购买而遭遇骗局,没有得到想要的服务,请把苦水往自己肚子里咽,本站无法承担也概不承担任何责任!

本站严正声明:各位翻墙的网友切勿将本站介绍的翻墙方法运用于违反当地法律法规的活动,本站对网友的遵纪守法行为表示支持,对网友的违法犯罪行为表示反对!

网站管理员定居美国,因此本站所推荐的翻墙软件及翻墙方法都未经测试,发布仅供网友测试和参考,但你懂的——翻墙软件或方法随时有可能失效,因此本站信息具有极强时效性,想要更多有效免费翻墙方法敬请阅读本站最新信息,建议收藏本站!本站为纯粹技术网站,支持科学与民主,支持宗教信仰自由,反对恐怖主义、邪教、伪科学与专制,不支持或反对任何极端主义的政治观点或宗教信仰。有注明出处的信息均为转载文章,转载信息仅供参考,并不表明本站支持其观点或行为。未注明出处的信息为本站原创,转载时也请注明来自本站。

鉴于各种免费翻墙软件甚至是收费翻墙软件可能存在的安全风险及个人隐私泄漏可能,本站提醒各位网友做好各方面的安全防护措施!本站无法对推荐的翻墙软件、应用或服务等进行全面而严格的安全测试,因此无法对其安全性做保证,无法对您因为安全问题或隐私泄漏等问题造成的任何损失承担任何责任!

S. Grand Ave.,Suite 3910,Los Angeles,CA 90071

知识共享许可协议
本作品采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可。