SSL/TLS握手过程


SSL/TLS握手过程可以根据秘钥生成的方式不同分为RSA握手过程和DH握手过程,分别使用RSA非对称加密方法和DH秘钥交换算法生成客户端和服务端共享的秘钥。

基础知识

RSA 非对称加密算法的原理

欧拉函数

欧拉函数用来计算对于给定的正整数 n n n,在小于等于 n n n的元素之中有多少个元素与其互质。其解析式如下:
ϕ ( p k ) = p k − p k − 1 \phi(p^k) = p^k - p^{k - 1} ϕ(pk)=pkpk1
如果 n n n为质数,则 ϕ ( n ) = n − 1 \phi(n) = n - 1 ϕ(n)=n1
如果 n n n可以分解为两个互质的整数 p p p q q q之积,则 ϕ ( n ) = ϕ ( p ) ϕ ( q ) \phi(n) = \phi(p)\phi(q) ϕ(n)=ϕ(p)ϕ(q)

欧拉定理

如果两个正整数 a a a n n n互质,则 n n n的欧拉函数可以让如下等式成立:
a ϕ ( n ) ≡ 1 ( m o d   n ) a^{\phi(n)} \equiv 1(mod\ n) aϕ(n)1(mod n)

模反元素

如果 a a a n n n互质,则一定存在元素 b b b,使得如下等式成立:
a b ≡ 1 ( m o d   n ) ab \equiv 1(mod\ n) ab1(mod n)
b b b a a a的模反元素。

RSA密钥生成过程

  1. 选取两个不相等的质数 p p p q q q
  2. 计算 n = p q n = pq n=pq的欧拉函数 ϕ ( n ) = ϕ ( p q ) = ϕ ( p ) ϕ ( q ) = ( p − 1 ) ( q − 1 ) \phi(n) = \phi(pq)=\phi(p)\phi(q) = (p - 1)(q-1) ϕ(n)=ϕ(pq)=ϕ(p)ϕ(q)=(p1)(q1)
  3. 随机选择一个整数 e e e,并计算其对于 ϕ ( n ) \phi(n) ϕ(n)的模反元素 d d d,则 ( n , e ) (n,e) (n,e)作为公钥, ( n , d ) (n,d) (n,d)作为私钥,其他数字 p , q , n , ϕ ( n ) p,q,n,\phi(n) p,q,n,ϕ(n)不公开。
    如果一个攻击者在得知公钥的情况下获取私钥,需要根据 n , e n,e n,e计算出 d d d
    因为 d d d e e e关于 ϕ ( n ) \phi(n) ϕ(n)的模反元素,因而计算 d d d需要知道 ϕ ( n ) \phi(n) ϕ(n),而计算 ϕ ( n ) \phi(n) ϕ(n)则需要找到两个质数 p p p q q q,因为 ϕ ( n ) = ( p − 1 ) ( q − 1 ) \phi(n) = (p-1)(q-1) ϕ(n)=(p1)(q1)。而对于大整数的因数分解过程是非常耗时的,只有暴力一种解法。因而RSA算法被认为是安全的。

DH密钥交换算法的原理

DH秘钥交换算法涉及到离散对数的知识。选取两个大数 p p p g g g并公开,其中 p p p是一个质数, g g g p p p的模 p p p本原单位根,则DH密钥交换算法的流程为:

  1. Alice随机选择一个整数 a a a,计算 K a = a g   m o d   p Ka=a^g\ mod\ p Ka=ag mod p并将其发送给Bob;
  2. Bob随机算则一个证书 b b b,计算 K b = b g   m o d   p Kb=b^g\ mod\ p Kb=bg mod p并将其发送给Alice;
  3. Allice和Bob开始通过已知的信息计算密钥。Alice计算密钥 k e y = a × K b   m o d   p = a × b g   m o d p = ( a b ) g   m o d   p key=a\times Kb\ mod\ p=a\times b^g\ mod p = (ab)^g\ mod\ p key=a×Kb mod p=a×bg modp=(ab)g mod p,Bob计算密钥 k e y = b × K a   m o d   p = b × a g   m o d   p = ( b a ) g   m o d   p = ( a b ) g   m o d   p key=b\times Ka\ mod\ p= b\times a^g\ mod\ p = (ba) ^ g\ mod\ p = (ab) ^g\ mod\ p key=b×Ka mod p=b×ag mod p=(ba)g mod p=(ab)g mod p,所以Alice和Bob计算出的密钥相同。

基于以下原因:

已知 a a a,计算 b = a g   m o d   p b = a^g\ mod\ p b=ag mod p容易,但是在已知 b , g , p b,g,p b,g,p的情况下计算a很难(很难的意思是计算出结果需要很长很长时间)。函数 f ( x ) = x g   m o d   p f(x)=x^g\ mod\ p f(x)=xg mod p在密码学中被称为陷门函数,因为已知 x x x f ( x ) f(x) f(x)简单,但是已知 f ( x ) f(x) f(x) x x x很难。

假设有一个中间人Eve通过窃听得到了 p , g , K a , K b p,g,Ka,Kb p,g,Ka,Kb,要想求得Alice和Bob协商得到的密钥 k e y key key,其必须求得 a a a b b b才能算出密钥,因而 k e y key key被认为是安全的,除了Alice和Bob外没人能知道。

RSA握手过程

客户端 服务端 client hello {支持的TLS版本、加密和压缩算法、随机数C} server hello {支持的TLS版本、选择的加密和压缩算法、随机数S} 服务端证书 其他 server hello done 验证证书 pre_master随机数,使用server的公钥加密 change Cipher spec:使用协商的加密算法和秘钥加密信息 握手结束通知,使用协商的密钥和加密算法发送之前发送所有信息的哈希值。 使用pre_master、C和S生成密钥,解密哈希值验证消息。 change cipher spec:使用协商的加密算法和秘钥加密信息。 握手结束通知,发送加密的所有之前发送信息的哈希值 客户端 服务端

DH握手过程

客户端 服务端 client hello {支持的TLS版本、加密和压缩算法、随机数C} 使用私钥加密DH参数、客户端和服务端生成的随机数生成数字签名 server hello {支持的TLS版本、选择的加密和压缩算法、随机数S、数字签名} 验证数字签名 确认数字签名 { 客户端DH参数 } 计算会话密钥 计算会话密钥 change Cipher spec:通知后续使用协商的加密算法和秘钥加密信息 握手结束通知,使用协商的密钥和加密算法发送之前发送所有信息的哈希值。 change cipher spec:通知后续使用协商的加密算法和秘钥加密信息。 握手结束通知,发送加密的所有之前发送信息的哈希值 客户端 服务端

素性检验:如何生成一个大质数

方法1: 筛法。判断整数 n n n是否为素数的方法是 n   m o d   i = 0 , i ∈ [ 2 , n ) n\ mod\ i = 0, i \in [2, \sqrt{n}) n mod i=0,i[2,n ),即从2开始遍历直到 n \sqrt{n} n ,如果没有整数能被 n n n整除则认为 n n n是素数。
方法2: 利用费马小定理。费马小定理的内容为:

假设 a a a是整数, n n n是一个质数,则有如下条件成立:
a n − 1 ≡ 1 ( m o d   n ) a^{n-1} \equiv 1(mod\ n) an11(mod n)

费马小定理是判断一个数是否为质数的充分条件,即存在合数满足费马小定理,这些合数被称为迈克尔数。最小的迈克尔数为561。
利用费马小定理检验素数的方法被称为费马素性检验。费马素性检验是指通过多选择几个整数,如果满足费马小定理则 n n n是素数的可能性会很大。费马素性检验是概率性算法。
米勒—拉宾算法和AKS算法利用费马小定理进行素性检验。其中米勒—拉宾算法是概率性算法,在实际生活中应用较多,而AKS算法是确定性算法。两者都是多项式时间复杂度。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值