RSA算法

目錄


  • https通信抓包
  • 消息驗證
  • RAS算法
  • RAS數字簽名驗證

1. https通信抓包


使用如下命令,我們可以抓去https的通信數據包:

curl --key ssl/private_keys/privatekey.pem --cacert ssl/certs/ca.pem --cert
ssl/certs/publickkey.pem -v https://www.example.com

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

圖中包含了客戶端的證書驗證。

2. 消息驗證


下面內容參考此網絡

step1: “客戶”向服務端發送一個通信請求

“客戶”->“服務器”:你好

step2: “服務器”向客戶發送自己的數字證書。證書中有一個公鑰用來加密信息,私鑰由“服務器”持有

“服務器”->“客戶”:你好,我是服務器,這里是我的數字證書

step3: “客戶”收到“服務器”的證書后,它會去驗證這個數字證書到底是不是“服務器”的,數字證書有沒有什么問題,數字證書如果檢查沒有問題,就說明數字證書中的公鑰確實是“服務器”的。
檢查數字證書后,“客戶”會發送一個隨機的字符串給“服務器”用私鑰去加密,服務器把加密的結果返回給“客戶”,“客戶”用公鑰解密這個返回結果,如果解密結果與之前生成的隨機字符串一致,那說明對方確實是私鑰的持有者,或者說對方確實是“服務器”。

“客戶”->“服務器”:向我證明你就是服務器,這是一個隨機字符串 //前面的例子中為了方便解釋,用的是“你好”等內容,實際情況下一般是隨機生成的一個字符串。

“服務器”->“客戶”:{一個隨機字符串}[私鑰|RSA]

step4: 驗證“服務器”的身份后,“客戶”生成一個對稱加密算法和密鑰,用于后面的通信的加密和解密。這個對稱加密算法和密鑰,“客戶”會用公鑰加密后發送給“服務器”,別人截獲了也沒用,因為只有“服務器”手中有可以解密的私鑰。這樣,后面“服務器”和“客戶”就都可以用對稱加密算法來加密和解密通信內容了。

“服務器”->“客戶”:{OK,已經收到你發來的對稱加密算法和密鑰!有什么可以幫到你的?}[密鑰|對稱加密算法]

“客戶”->“服務器”:{我的帳號是aaa,密碼是123,把我的余額的信息發給我看看}[密鑰|對稱加密算法]

“服務器”->“客戶”:{你好,你的余額是100元}[密鑰|對稱加密算法]

…… //繼續其它的通信

3. RAS算法


參考RSA算法
step1: 選擇兩個質數 pq
step2: 計算modulus

n = p x q

step3:

Φ = (p-1)(q-1)

step4: 選擇一個質數作為公鑰系數 e, 1 < e < Φ

gcd(e, Φ) = 1, //即 e, Φ互質

step5: 從下面公式可計算出私鑰系數 d, 1 < d < Φ

d x e = 1 (mod Φ)

if d > Φ:
d = d mod Φ
if d < 0:
d = d + Φ

step6: 加密數據如 P

C = Pe (mod n)

step7: 解密數據

P = Cd (mod n)

其中公鑰保存系數(n, e), 私鑰保存系數(n, d, p, q)

Example:
step1: 選擇兩個質數

p = 7
q = 11

step2: 計算乘積

n = p x q = 7 x 11 = 77
n = 77

step3:

Φ = (p-1)(q-1) = (7-1)(11-1) = 60
Φ = 60

step4: 公鑰系數 e = 13

step5: 私鑰系數 d = 37

d x e = 1 (mod Φ)
d x 13 = 1 (mod 60)

可計算的出d值為 37

step6: 假設加密數據 P=5

C = Pe (mod n)
C = 513 (mod 77) = 26

step7: 解密數據

P = Cd (mod n)
P = 2637 (mod 77) = 5

4. RAS數字簽名驗證


參考RSA算法
step1: 服務端數字簽名,假設 m為將發送消息的MD5值

s = md (mod n)

step2: 客戶端驗證

m' = se (mod n)
if m' = m, then return 'True',
if m' ≠ m, then return 'False'

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 姓名:于川皓 學號:16140210089 轉載自:https://baike.baidu.com/item/RS...
    道無涯_cc76閱讀 2,648評論 0 1
  • 前言 本文的RSA例子代碼更新在我的github上。 RSA算法是最重要算法之一,它是計算機通信安全的基石,保證了...
    game3108閱讀 11,771評論 2 53
  • 姓名:朱睿琦 學號:15180288015 參考:http://www.xzbu.com/8/view-65403...
    BLASSREITER閱讀 8,010評論 0 0
  • RSA加密算法是最常用的非對稱加密算法,CFCA在證書服務中離不了它。但是有不少新來的同事對它不太了解,恰好看到一...
    ikin閱讀 2,132評論 0 5
  • RSA算法它是第一個既能用于數據加密也能用于數字簽名的算法。它易于理解和操作,也很流行。算法的名字以發明者的名字命...
    火狼o閱讀 673評論 0 1