非對稱加密 以及 https握手

非對稱加密與RSA

一切的一切還得從 非對稱加密 說起。在信息安全領域,加密方式分為對稱加密與非對稱加密。對稱加密中,加密秘鑰和解密秘鑰完全相同,安全性不高。而非對稱加密的加密秘鑰和解密秘鑰不同,具有更高的安全性,應用更加廣泛.

在非對稱加密中,加密秘鑰稱為 公鑰 (Public Key),而解密秘鑰稱為 私鑰 (Private),而且他們總是成雙成對的。一般情況下,我們通過一些工具生成一對公鑰和私鑰后,將公鑰發(fā)布給其他人,這樣其他人就可以將消息使用公鑰加密后發(fā)給給我,我接受到消息后,使用我的私鑰將消息解密。

image.png

非對稱加密有很多種 ,使用最廣泛的是 RSA算法。

我們現在常用的RSA的秘鑰的長度是1024位,不過據稱這個長度的RSA已經有被破解的危險,因此提倡使用2048位長度的RSA。

SSH與RSA

我們在使用 SSH 連接到服務器時也會用到RSA。當然,SSH協(xié)議本身設計得具有很強大的擴展性,支持很多種加密算法,RSA只是其中的一種,不過也是應用最廣泛的一種。

ssh可以生成公鑰和密鑰id_rsa.pub id_rsa,公鑰在建立連接時傳給服務器,后者是私鑰,客戶端(本機)使用此秘鑰對服務器發(fā)送的數據進行解密,這個文件很重要,絕對不能外泄,因此最好是能對此文件進行加密,上面命令執(zhí)行時中間有一個步驟會請你輸入密碼,這個密碼就用于 加密私鑰 。

SSH除了使用用戶名密碼進行身份驗證外,也可以使用公鑰進行身份驗證。客戶端連接服務器時,將客戶端的公鑰傳送給服務器,服務器收到請求后,首先在服務器用戶根目錄 ~/.ssh/authorized_keys 尋找相應的公鑰,如果兩個秘鑰一致,則驗證通過。服務器會使用該公鑰將數據加密進行傳送。

而當客戶端連接到服務器時,服務器也會將其公鑰傳送給客戶端,可以在 ~/.ssh/known_hosts 文件中找到,從而實現雙向數據加密。

https加密

大機構CA 私鑰 已經裝進系統(tǒng)了,所以 每個系統(tǒng)都可以分清是不是CA,這樣保證CA時真的。

公司花錢請CA出證書,證書中帶有CA的證書,系統(tǒng)可以確認CA證書的真?zhèn)危@樣就保證了我公司證書的真?zhèn)巍?/p>

完整過程:

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

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

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

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

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

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

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

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

“客戶”->“服務器”:{我們后面的通信過程,用對稱加密來進行,這里是對稱加密算法和密鑰}[公鑰|RSA]

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

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

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

更詳細的可以參考:
https://www.cnblogs.com/franson-2016/p/5530671.html

總結:
加密
? 共享/對稱密鑰加密:客戶端和服務端使用相同的密鑰加密,缺陷:發(fā)送密鑰有被竊聽的風險,但不發(fā)送,對方就不能解密。如果密鑰能夠安全發(fā)送,那么數據也能安全送達,就無需加密。
? 公開密鑰加密:非對稱加密,一把私鑰,一把公鑰,成對。首先,發(fā)送公鑰給加密方,發(fā)送密文一方使用對方的公鑰進行加密,對方收到密文后,使用自己的私鑰進行解密。
? 混合加密:使用公開密鑰加密方式傳遞共享密鑰,再使用共享密鑰加密傳遞的數據
證書的正確性:CA(數字認證機構)頒發(fā)的公開密鑰證書
? 服務器把自己的公鑰登錄至CA進行認證;
? CA機構使用自己的私鑰給服務器的公鑰署數字簽名并頒發(fā)公鑰證書;
? 客戶端拿到服務器的公鑰證書后,使用數字證書認證機構的公開密鑰(事先植入到瀏覽器客戶端),向數字證書認證機構驗證公鑰證書上的數字簽名,以確認服務器的公開密鑰的真實性;
? 使用服務器的公開密鑰對報文加密并發(fā)送
服務器使用自己的私有密鑰進行解密
SSL/TLS握手協(xié)議:
? 客戶端給出協(xié)議版本號,一個隨機數(client random),以及客戶端支持的加密方式;
? 服務端確認雙方使用的加密方式,并給出數字證書,以及一個服務器生成的隨機數(server random);
? 客戶端確認證書有效,然后生成一個新的隨機數(premaster secret),并使用數字證書的公鑰加密這個隨機數,發(fā)送給服務端;
? 服務端使用自己的私鑰,獲得客戶端發(fā)送的隨機數(premaster secret);
? 客戶端和服務端,根據約定的加密方式,使用前面的三個隨機數,生成一個對話密鑰(session key),及共享密鑰,然后使用該密鑰加密整個數據交互過程。

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

相關閱讀更多精彩內容

友情鏈接更多精彩內容