RSA算法

目錄


  • 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ù) pq
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'

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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

友情鏈接更多精彩內(nèi)容