文章目錄
- TLS/SSL 協議-非對稱加密(RSA)原理
- 1.非對稱加密作業原理
- 2.非對稱加密和解密程序示意圖
- 3.RSA 演算法介紹
- 3.1 RSA 演算法生成公鑰和私鑰原理
- 3.2 RSA 演算法加解密流程
- 4.基于 openssl 生成的公鑰和私鑰
- 4.1 生成私鑰
- 4.2 創建一個明文檔案
- 4.3 生成公鑰
- 4.4 RFC3447 檔案定義的私鑰格式
- 4.5 RFC3347 檔案定義的公鑰格式
- 4.6 查看 ASN.1 格式的私鑰
- 4.7 密鑰內容格式決議
- 4.8 查看 ASN.1 格式的公鑰
- 4.9 公鑰內容格式決議
- 4.10 使用公鑰對明文加密
- 4.11 使用私鑰對密文解密
TLS/SSL 協議-非對稱加密(RSA)原理
前面文章學習過 對稱加密的原理,在通信雙方發送完加密的密文之后,需要發送密鑰給對方才能解密,這就要求發送密鑰的資訊通道安全可靠,才能保證資料的安全性,而非對稱加密演算法 是一種密鑰的保密方法,需要有 公鑰(公開密鑰)和私鑰(私有密鑰),這篇文章主要介紹公鑰和私鑰生成原理,然后圍繞公鑰和私鑰研究和分析加密和解密原理,
1.非對稱加密作業原理
- (1)
Bob要向Alice發送資訊,Alice需要先要產生一對用于加密和解密的公鑰和私鑰, - (2)
Alice的私鑰保密,Alice的公鑰告訴Bob, - (3)
Bob把要發送的資訊用Alice的公鑰加密生成密文發送給Alice, - (4)
Alice收到這個訊息后,用自己的私鑰解密Bob的訊息,其他所有收到這個報文的人都無法解密,只有Alice私鑰才能解密此資訊,
Tips:
Alice向Bob發送資訊時也是同理,Bob也需要生成一對公鑰和私鑰,
2.非對稱加密和解密程序示意圖

3.RSA 演算法介紹
1977 年由羅納德·李維斯特(Ron Rivest)、阿迪·薩莫爾(Adi Shamir)、倫納德·阿德曼(Leonard Adleman)一起提出,因此命名為 RSA 演算法:
3.1 RSA 演算法生成公鑰和私鑰原理
- (1)隨機選擇兩個不相等的質數
p和q, - (2)計算
p和q的乘積n(明文小于n), - (3)計算
n的歐拉函式v=φ(n), - (4)隨機選擇一個整數
k(1 < k < v,且 k 與 v 互為質數), - (5)計算
k對于v的模反元素d, - (6)公鑰:
(k,n), - (7)私鑰:
(d,n),
Tips:如果兩個正整數
a和n互質,那么一定可以找到整數b,使得ab-1被n整除,或者說ab被n除的余數是1,此時,b就叫做a的模反元素,
3.2 RSA 演算法加解密流程
下面以加解密一個數字 123 為例,公鑰是 (3,319),密鑰是 (187,319):
- (1)加密:
c = (m^k)mod n,其中m是明文,c是密文,公鑰是k和n,即c = (123^3) mod 319 =140, - (2)解密:
m = (c^d) mod n,其中m是明文,c是密文,私鑰是d和n,即m = (140^187) mod 319 = 123,
4.基于 openssl 生成的公鑰和私鑰
首先需要在 Linux 上安裝一個 openssl,安裝成功之后可以使用 openssl version -a 查看 openssl 版本資訊,如下:

4.1 生成私鑰
生成私鑰的命令如下:
openssl genrsa -out private.pem
如下圖所示:

Tips:
openssl genrsa -out private.pem命令中的-out private.pem表示將生成的密鑰保存到private.pem檔案中,
4.2 創建一個明文檔案
使用 vim test.txt 命令創建一個明文檔案,內容如下:
關注愛因詩賢,每天進步一點點!
如下圖所示:

4.3 生成公鑰
公鑰可以由上面生成的 私鑰 中提取出來,命令如下:
openssl rsa -in private.pem -pubout -out public.pem
如下圖所示:

Tips:
openssl rsa -in private.pem -pubout -out public.pem命令中的-in表示輸入priviate.pem檔案內容,-out public.pem表示將公鑰輸出到public.pem檔案中,
4.4 RFC3447 檔案定義的私鑰格式
RSAPrivateKey ::= SEQUENCE {
version Version,
modulus INTEGER, -- n
publicExponent INTEGER, -- e
privateExponent INTEGER, -- d
prime1 INTEGER, -- p
prime2 INTEGER, -- q
exponent1 INTEGER, -- d mod (p-1)
exponent2 INTEGER, -- d mod (q-1)
coefficient INTEGER, -- (inverse of q) mod p
otherPrimeInfos OtherPrimeInfos OPTIONAL
}
Tips:
RFC3347地址:https://www.rfc-editor.org/rfc/rfc3447.txt,
4.5 RFC3347 檔案定義的公鑰格式
RSAPublicKey ::= SEQUENCE {
modulus INTEGER, -- n
publicExponent INTEGER -- k
}
Tips:
RFC3347地址:https://www.rfc-editor.org/rfc/rfc3447.txt,
4.6 查看 ASN.1 格式的私鑰
私鑰是基于 ASN.1 格式進行編碼的,可以使用 openssl asn1parse -i -in private.pem 命令查看 ASN.1 格式的私鑰資訊,如下圖所示:

4.7 密鑰內容格式決議

Tips:
--n和--k對應著前面加密流程中的n和k,圖中n的值是EC9F0F3574...3E855161,k的值是010001,
4.8 查看 ASN.1 格式的公鑰
使用 openssl asn1parse -i -in public.pem 可以查看到如下資訊:

然后使用 openssl asn1parse -i -in public.pem -strparse 19 命令可以查看到公鑰的內容如下:

4.9 公鑰內容格式決議

Tips:可以對比一下私鑰格式化內容和公鑰格式化內容,兩者是一致的,由此可見,公鑰可以由私鑰推到出來,反過來則比較困難,
4.10 使用公鑰對明文加密
使用 openssl rsautl -encrypt -in test.txt -inkey public.pem -pubin -put test.en 可以將前面創建的 test.txt 檔案生成密文 test.en 如下圖所示:

Tips:
test.en是生成的密文,
4.11 使用私鑰對密文解密
使用 openssl rsautl -decrypt -in test.en -inkey private.pem -out new.txt 可以將密文 test.en 解密出來如下圖所示:

掃碼關注

轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/238604.html
標籤:區塊鏈
下一篇:cinta作業12
