SSL握手兩大加密算法 : RAS算法 和 DH算法解析


寫下此博客記錄心得體會,如有不足之處請指正
 
先是手稿筆記 : 

 

 

 

 

 

 

 正文:

 
在Https協議中,Client端和Server端需要三個參數才能生成SessionKey來加密信息。
三個參數分別是

Client Random(客戶端隨機數) 假設是C
Server Random(服務端隨機數) 假設是S
PreMaster Random(待加密隨機數) 假設是P
 
前兩個都是通過明文的方式傳輸,即C從客戶端以明文的方式發送給服務端,S從服務端以明文的發送發送給客戶端
 
而P則是最重要,也是最關鍵的信息了,默認通過RSA算法對其加密,再傳輸到服務端,服務端再用私鑰對密文進行解密,得到P。
 
如果被而已的第三方截取了P加密后的密文,是否有P信息泄露的危險呢?
 
我們知道RSA算法的公鑰是對外公開的。假設公鑰對(e,n),密鑰對(d,n)那么從客戶端發送到服務端關於P的密文 M = P^e mod n

假設密文M被攻擊者攔截,如果要求得明文,必須求得

(log(P)M) mod n = e 的底數P,然而解P是十分復雜的過程,所以攻擊者一般無法獲得P的值。或者說要獲得私鑰的話,
 
ed = k f(n)[f = 歐拉函數] + 1, 而f(n) = f(p*q) = f(p)*f(q) = (p-1)*(q-1),而對n進行大素數分解的計算過程是十分難的。也不能通過M^d mod n 來獲得P
 
RAS是相對來說比較安全的算法,但是用算力大的機器暴力破解,也是可以成功的。一般銀行的重要密碼需要30秒左右更換一次。
 
第二種算法是DH算法,假設DH算法的數對為(p,q)
 
客戶端選取【1 ~ q - 1】中的一個隨機數RC,通過計算得出一個參數 PC
 
PC = (p ^ RC)  mod q
 
服務端同樣選取【1 ~ q - 1】中的一個隨機數RS,通過計算得出一個參數 PS
 
PS = (p ^ RS) mod q
 
客戶將自己的PC參數交給服務端

服務端將自己的PS參數交給客戶端
 
服務端計算 PC ^ RS mod q = A

客戶端計算 PS ^ RC mod q = B
 
實際上A = B,下面來證明一下,
 
首先 要用到一個定理

((W ^ X)  mod Y) ^  Z mod Y = W ^ (X * Z) mod Y
 
為什么呢,設 U = (W ^ X)  mod Y , 那么 U + k*Y = W^X (k為正整數)

即 : U  = W^X - k*Y
 
(W^X - k*Y)^Z 的中間的項和最后一項都含有Y 而只有第一項W^(X*Y)

不含有Y 所以

((W ^ X)  mod Y) ^  Z mod Y = W^(X*Z) mod Y

A = PC ^ RS mod q =
((p ^ RC)  mod q) ^ RS mod q = p ^ (RC * RS) mod q
 
B = PS ^ RC mod q =
((p ^ RS)  mod q) ^ RC mod q = p ^ (RC * RS) mod q
 
證明完畢,客戶端和服務端交換參數后計算得到的最終數字A 和 B是相等的,聰明的你應該猜到了, A = B 就是服務端和客戶端需要達成一致的PreMaster隨機數!
 
可見只要我們知道了 RC * RS 就可以知道PreMaster!
 
其實兩者交換的參數實際上是帶有他們各自生成的隨機數的信息的,因為,傳輸的參數公式為 ,參數P = (p ^ 各自隨機數) mod q
 
當 p 和 q是已知的時候,攔截了P的話,要算出各自隨機數,則要算出 (log( p)P) mod q = 各自隨機數,
對數運算復雜,我沒有實際想辦法計算過大數的對數運算,先暫不做解析。
 
另外就是(p,q)對的選取,

p^x mod q = L (x = 1, 2 , 3, 4 ......)

當L從1開始向上逐一遞增,L的取值不能周期性變化,

假設L以6為周期變化

那么p^1 mod q = p^7 mod q = p^13 mod q = ...
 
假如我們是攻擊者

假設我們知道了

PC = (p ^ RC)  mod q 中 PC的值

PS = (p ^ RS) mod q 中PS的值

因為p^x mod q = L是呈周期性變化的,通過觀察,我們就能輕易找到一個數 O

讓 PS = (p ^ O) mod q
 
假設周期是6,那么 O 和原來服務端隨機數RS的差值就是6*k(k為整數)
 
那么我們只要計算
ANS =   PC ^ O mod q = p ^ (RC * O) mod q   =   p ^ (RC * (RS + 6*k)) mod q   =   p ^ (RC * RS + 6 *k *RC )) mod q
 
因為p^x mod q = L是以6為周期變化的,又因為6 *k *RC是6的整數倍,所以p ^ (RC * RS + 6 *k *RC )) mod q = p ^ (RC * RS) mod q = PreMaster
 
我們盜取PreMaster成功!無需知道 RS 和 RC 的各自具體值, 直接知道他們的乘積就好了
 
所以(p,q)對的分布要滿足p^x mod q = L,x取【1~ q -1】的時候,L的取值是無序不重復的,這樣才能保證一定的安全性
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM