目錄
- https通信抓包
- 消息驗(yàn)證
- RAS算法
- RAS數(shù)字簽名驗(yàn)證
1. https通信抓包
使用如下命令,我們可以抓去https的通信數(shù)據(jù)包:
curl --key ssl/private_keys/privatekey.pem --cacert ssl/certs/ca.pem --cert
ssl/certs/publickkey.pem -v https://www.example.com

通過上圖,我們可以看到https的通信過程:

圖中包含了客戶端的證書驗(yàn)證。
2. 消息驗(yàn)證
下面內(nèi)容參考此網(wǎng)絡(luò)
step1: “客戶”向服務(wù)端發(fā)送一個(gè)通信請(qǐng)求
“客戶”->“服務(wù)器”:你好
step2: “服務(wù)器”向客戶發(fā)送自己的數(shù)字證書。證書中有一個(gè)公鑰用來加密信息,私鑰由“服務(wù)器”持有
“服務(wù)器”->“客戶”:你好,我是服務(wù)器,這里是我的數(shù)字證書
step3: “客戶”收到“服務(wù)器”的證書后,它會(huì)去驗(yàn)證這個(gè)數(shù)字證書到底是不是“服務(wù)器”的,數(shù)字證書有沒有什么問題,數(shù)字證書如果檢查沒有問題,就說明數(shù)字證書中的公鑰確實(shí)是“服務(wù)器”的。
檢查數(shù)字證書后,“客戶”會(huì)發(fā)送一個(gè)隨機(jī)的字符串給“服務(wù)器”用私鑰去加密,服務(wù)器把加密的結(jié)果返回給“客戶”,“客戶”用公鑰解密這個(gè)返回結(jié)果,如果解密結(jié)果與之前生成的隨機(jī)字符串一致,那說明對(duì)方確實(shí)是私鑰的持有者,或者說對(duì)方確實(shí)是“服務(wù)器”。
“客戶”->“服務(wù)器”:向我證明你就是服務(wù)器,這是一個(gè)隨機(jī)字符串 //前面的例子中為了方便解釋,用的是“你好”等內(nèi)容,實(shí)際情況下一般是隨機(jī)生成的一個(gè)字符串。
“服務(wù)器”->“客戶”:{一個(gè)隨機(jī)字符串}[私鑰|RSA]
step4: 驗(yàn)證“服務(wù)器”的身份后,“客戶”生成一個(gè)對(duì)稱加密算法和密鑰,用于后面的通信的加密和解密。這個(gè)對(duì)稱加密算法和密鑰,“客戶”會(huì)用公鑰加密后發(fā)送給“服務(wù)器”,別人截獲了也沒用,因?yàn)橹挥小胺?wù)器”手中有可以解密的私鑰。這樣,后面“服務(wù)器”和“客戶”就都可以用對(duì)稱加密算法來加密和解密通信內(nèi)容了。
“服務(wù)器”->“客戶”:{OK,已經(jīng)收到你發(fā)來的對(duì)稱加密算法和密鑰!有什么可以幫到你的?}[密鑰|對(duì)稱加密算法]
“客戶”->“服務(wù)器”:{我的帳號(hào)是aaa,密碼是123,把我的余額的信息發(fā)給我看看}[密鑰|對(duì)稱加密算法]
“服務(wù)器”->“客戶”:{你好,你的余額是100元}[密鑰|對(duì)稱加密算法]
…… //繼續(xù)其它的通信
3. RAS算法
參考RSA算法
step1: 選擇兩個(gè)質(zhì)數(shù) p 和 q
step2: 計(jì)算modulus
n = p x q
step3:
Φ = (p-1)(q-1)
step4: 選擇一個(gè)質(zhì)數(shù)作為公鑰系數(shù) e, 1 < e < Φ
gcd(e, Φ) = 1, //即 e, Φ互質(zhì)
step5: 從下面公式可計(jì)算出私鑰系數(shù) d, 1 < d < Φ
d x e = 1 (mod Φ)
if d > Φ:
d = d mod Φ
if d < 0:
d = d + Φ
step6: 加密數(shù)據(jù)如 P
C = Pe (mod n)
step7: 解密數(shù)據(jù)
P = Cd (mod n)
其中公鑰保存系數(shù)(n, e), 私鑰保存系數(shù)(n, d, p, q)
Example:
step1: 選擇兩個(gè)質(zhì)數(shù)
p = 7
q = 11
step2: 計(jì)算乘積
n = p x q = 7 x 11 = 77
n = 77
step3:
Φ = (p-1)(q-1) = (7-1)(11-1) = 60
Φ = 60
step4: 公鑰系數(shù) e = 13
step5: 私鑰系數(shù) d = 37
d x e = 1 (mod Φ)
d x 13 = 1 (mod 60)
可計(jì)算的出d值為 37
step6: 假設(shè)加密數(shù)據(jù) P=5
C = Pe (mod n)
C = 513 (mod 77) = 26
step7: 解密數(shù)據(jù)
P = Cd (mod n)
P = 2637 (mod 77) = 5
4. RAS數(shù)字簽名驗(yàn)證
參考RSA算法
step1: 服務(wù)端數(shù)字簽名,假設(shè) m為將發(fā)送消息的MD5值
s = md (mod n)
step2: 客戶端驗(yàn)證
m' = se (mod n)
if m' = m, then return 'True',
if m' ≠ m, then return 'False'