知识梳理系列之六——HTTPS的握手过程

面中金问到,记录下:

知识梳理系列之六——HTTPS握手过程

  • 使用RSA加密算法的HTTPS握手过程
  • 使用DH加密算法的HTTPS握手过程

使用RSA加密算法的HTTPS握手过程

1. 先梳理下RSA算法:

了解下素数、互素、欧拉公式、费马小定理:

  • 如果一个正整数只能被自身和1整除,那么这个数是素数(或者称为质数);
  • 如果两个或两个以上的正整数的公因数只有1,那么称这些数互素(或者称为互质);
  • 已知两个素数P1、P2,它们的乘积: n = P 1 × P 2 ; n = P1 \times P2; n=P1×P2;欧拉公式: 欧拉函数的值是所有小于或等于n的正整数中与n互质的数的个数。 Φ ( n ) = ( P 1 − 1 ) ⋅ ( P 2 − 1 ) ; \Phi(n) = (P1-1) \cdot (P2-1); Φ(n)=(P11)(P21);
  • 费马小定理:假如m是一个整数,n是一个质数,那么 mn- mn的倍数,可以表示为:
    m n ≡ m   ( m o d n ) 或   m ( n − 1 ) ≡ 1   ( m o d n ) 又 ∵ n 是 质 数 , ∴ ( n − 1 ) = Φ ( n ) m Φ ( n ) ≡ 1   ( m o d n ) \begin{aligned} & m^n \equiv m \ (mod \quad n) \\ & 或 \ m^{(n-1)} \equiv 1 \ (mod \quad n) \\ & 又\because n是质数,\therefore (n-1) = \Phi(n) \\ & m^{\Phi(n)} \equiv 1 \ (mod \quad n) \\ \end{aligned} mnm (modn) m(n1)1 (modn)n,(n1)=Φ(n)mΦ(n)1 (modn)
  • 同余表示,数an(a除以n取余)与数bn相等
    ∵ a ≡ b   ( m o d n ) ⇔ a   ( m o d n ) ≡ b ∴ m Φ ( n )   ( m o d n ) ≡ 1 \begin{aligned} & \because a \equiv b \ (mod \quad n) \Leftrightarrow a \ (mod \quad n) \equiv b\\ & \therefore m^{\Phi(n)} \ (mod \quad n) \equiv 1 \end{aligned} ab (modn)a (modn)bmΦ(n) (modn)1

使用费马小定理就可以进行计算解密的密钥,RSA正是使用这种原理:
已知两个素数P1、P2,计算出n= P1 * P2;φ(n) = (P1-1)(P2-1);并取一个与φ(n)互质的数e
待加密的数据为m,使用幂运算和模运算对其加密,并传输密文: p r e M a s t e r K e y = m e   ( m o d n ) preMasterKey = m^e \ (mod \quad n) preMasterKey=me (modn)
收到密文进行解密: p r e M a s t e r K e y d   ( m o d n ) = m preMasterKey^d \ (mod \quad n) = m preMasterKeyd (modn)=m
此时未知d(它就是解密的私钥),计算它的结果就可以解密:
将 p r e M a s t e r K e y 带 入 : [ m e   ( m o d n ) ] d   ( m o d n ) ≡ m ; m e ∗ d   ( m o d n ) ≡ m ; . . . . . . . . . . . . . . ( 1 ) ∵ m Φ ( n )   ( m o d n ) ≡ 1 , 1 k ≡ 1 ; ∴ m k × Φ ( n )   ( m o d n ) ≡ 1 ; 两 边 同 乘 以 m , 得 : m k × Φ ( n ) + 1   ( m o d n ) ≡ m ; . . . . . . . ( 2 ) 由 ( 1 ) 、 ( 2 ) 得 : k × Φ ( n ) + 1 = e × d ∴ d = [ k × Φ ( n ) + 1 ] ÷ e \begin{aligned} & 将preMasterKey带入: \\ & [m^e \ (mod \quad n)]^d \ (mod \quad n) \equiv m; \\ & m^{e*d} \ (mod \quad n) \equiv m; ..............{(1)}\\ & \because m^{\Phi(n)} \ (mod \quad n) \equiv 1, 1^k \equiv 1; \\ & \therefore m^{k \times \Phi(n)} \ (mod \quad n) \equiv 1; \\ & 两边同乘以m,得:\\ & m^{k \times \Phi(n) + 1} \ (mod \quad n) \equiv m; .......{(2)}\\ & 由(1)、(2)得:\\ & k \times \Phi(n) + 1 = e \times d\\ & \therefore d = [k \times \Phi(n) + 1] \div e \end{aligned} preMasterKey:[me (modn)]d (modn)m;med (modn)m;..............(1)mΦ(n) (modn)1,1k1;mk×Φ(n) (modn)1;mmk×Φ(n)+1 (modn)m;.......(2)(1)(2)k×Φ(n)+1=e×dd=[k×Φ(n)+1]÷e
上面求出了解密私钥

2. 在结合流程图说明握手过程:
知识梳理系列之六——HTTPS的握手过程_第1张图片

图片来源:阮一峰的网络日志
http://www.ruanyifeng.com/blog/2014/09/illustration-ssl.html
如有侵权请联系删除

握手步骤
1.Client Hello: 客户端向服务器发起握手,客户端产生了一个随机数R1,传递给服务器;
2. Server Hello: 服务器收到R1,也产生一个随机数R2,并且携带服务器证书回复给客户端;
3. 客户端验证服务器证书,并从中取出公钥(n, e),随后产生一个随机数m,使用公钥加密: p r e M a s t e r K e y = m e   ( m o d n ) preMasterKey = m^e \ (mod \quad n) preMasterKey=me (modn) 然后将preMasterKey 发送给服务器;
4. 服务器收到preMasterKey ,使用私钥 d = [ k × Φ ( n ) + 1 ] ÷ e d = [k \times \Phi(n) + 1] \div e d=[k×Φ(n)+1]÷e 解密出客户端数据m;
5. 最后由R1、R2、m生成session key.

可以看出第三方窃听者可以获取R1、R2、preMasterKey三个数据,但是需要通过preMasterKey解密出m,一旦公钥数据长度足够长,要破解出其中的两个质数P1、P2是困难的,因此保证了加密的安全性,但是这个安全性全部寄托在一个数据上。


使用DH加密算法的HTTPS握手过程

为了更加安全使用Diffie-Hellman算法,替换RSA算法来进行HTTPS握手。
1. Diffie-Hellman算法的原理见——知识梳理系列之四——网络协议(TCP/IP、Http/Https)中的附:有趣的加密原理(Diffie-Hellman算法)

2. 下面是握手过程,与RSA的差别是,不再直接传输preMasterKey,而是传输计算它的中间参数,最终计算出相同的preMasterKey。
知识梳理系列之六——HTTPS的握手过程_第2张图片

图片来源:阮一峰的网络日志
http://www.ruanyifeng.com/blog/2014/09/illustration-ssl.html
如有侵权请联系删除

你可能感兴趣的:(http,安全,https)