公鑰,證書,以及公鑰基礎通訊設施模型的一個詳細實現例項流程。
阿新 • • 發佈:2018-11-03
說是加密,不是隻用一種加密方法,而是多種方法協作,達到我們的加密目的。
加密不是說加密完,就完事了,還要考慮第三方能不能解密 如果解密了該怎麼辦?
怎麼加密更快?
如果對方解密了?我們怎麼確保被解密的資料不被篡改?
加密特點:
對稱加密:快速(加密資料,防止資料被檢視,接收方反向解密得到資料明文)
非對稱加密:認證身份(私鑰簽名,公鑰解籤,驗證身份或資料)
單向加密:驗證資料內容(生成資料簽名,接收方用相同金鑰執行單向加密,驗證資料簽名)
加密目的: 1.驗證通訊雙方的身份 2.保證資料不能被(第三方)檢視 3.保證資料沒有被(第三方)篡改 加密流程: 首先公鑰和金鑰在加密的流程中其實牽涉到多個金鑰。 其中包括:a.CA機構的公鑰和私鑰。b.CA認證的Server私鑰和證書中的公鑰。c.CA認證的Client的私鑰和證書中的公鑰。d.對稱加密的金鑰。 有7個之多,但不管有多少金鑰,只要是成對出現的,都是一個公鑰,一個私鑰。這種成對出現的金鑰用於非對稱加密。如RSA加密。公鑰用來加密,私鑰用來簽名,用法是固定的。 加密和簽名的區別在於: 加密的資料針對的是接收者,而不是傳送者。即只希望被接收者一個人看到加密之後的明文資料。 簽名針對的則是傳送者,不是被接收者。即解密之後,任何接收者都可以檢視這個被加密的明文,因為這個明文只是為了說明發送者的身份,並沒有其他不想讓別人知道的資料。 正常情況下需要CA頒發的證書,這個的作用就相當於現實生活中的身份證。 一般的認證流程為: ServerClient --下發CA的證書--> 驗證證書的有效性。 [在OS或者瀏覽器中自帶的證書中,找到該CA對應 的證書(注意是證書鏈,不是單個證書) 比如 用chrome開啟www.wosign.com 然後點更多 工具->開發者工具->Security我們就能看到證 書。 開啟證書,在證書的路徑這一選項卡中,詳細顯示 了證書鏈: DigiCert(A) : WoTrus EV SSL Pro CA(B) : www.wosign.com(C) 可以看到最下層是CA頒發給這個網站的證書。往上 則是頒發證書的中間證書頒發機構。最上面則是受 信任的根證書頒發機構。且者三個證書都是可以查 看的,主要包括頒發者,使用者,有效期,公鑰, 指紋。這裡先驗證證書的有效性。要驗證C的有效 性,先要用它的上一級CA命名為B_CA的公鑰來解 密C上的CA(即B_CA)簽名,解籤後如果明文和上 一級的B_CA資訊匹配, 說明證書C確實是B_CA頒 發的。但是還要證明B_CA的有效性,所以要驗證 證書B的可靠性,同樣要用到證書A上的公鑰要解密 B上的CA(即A_CA)簽名,解籤後,如果明文和上 一級的A_CA資訊匹配,則說明B證書確實是A_CA頒 發的。這樣遞迴檢測父證書,直到出現信任的根證 書(證書列表內置於作業系統)。由此可見,除了 最底層的證書的公鑰沒有用到之外,上層的每一層 證書的公鑰都用來解密下一層證書的證書指紋籤 名。所以證書是否可靠呢?一句話,根證書可靠, 整個證書鏈就可靠。而根證書要看是否在作業系統 或瀏覽器內建的可信證書內。在的話就可靠。 此時,Client就可以確定Server的真實身份了。 ] <--將Client的證書發給Server--Server驗證Client證書的有效性。 使用單向加密(MD5,SHA)生成資料D的特徵碼X。 得到DX=D+X。 保證資料不被篡改。 用Server私鑰將X用RSA加密生成資料簽名S。 得到DS=D+S。 對DS使用Server的AES金鑰AK進行AES對稱加密。 得到DS=>New_DS。 對AK使用Client公鑰加密生成EAK,並附加在DS上。得到EDS=New_DS+EAK; --傳送EDS到客戶端--> 先用Client私鑰解密EDS中的EAK。得到AK。此時 資料有New_DS+AK. 再用AK解密EDS中的New_DDS。得到DS(D+S)。此 時資料有D+S. 使用Server公鑰解密資料簽名S。得到特徵碼X。 此時資料有D+X. 對資料D進行單向加密。得到Y特徵碼。 和進行對比。如果X==Y,說明資料D沒有被篡改。 ============================================================================================== /**在本Server中沒有使用CA頒發的證書,而是預先使用ssl命令獲得RSA金鑰和公鑰.客戶端伺服器都省略了各自驗證身份 的這一步驟。只是保證了資料不被第三方篡改和檢視內容,並未實現各自身份的校驗。所以伺服器流程先各自預備好了,自己的 私鑰和公鑰,和對方的公鑰。以營造一種已經互相驗證過身份的環境。 **/
這種步驟是一般比較常見的通訊步驟,加密和解密都相當繁瑣。效率不高。
當然還有SSL這種方式,不過用在遊戲伺服器中,也是首先模擬好已經各自驗證過彼此身份的程式碼環境。
但是在握手之後,已經彼此信任的情況下,我們就不必對資料進行如此繁瑣的加密方式,只需要簡單的進行對稱加密就行了。
當然對稱加密的金鑰肯定大有講究的。SSL通訊詳細步驟可參考。
SSL/TLS協議執行機制的概述
SSL/TLS 握手過程詳解
此文參考:資訊保安第三篇(網路傳輸的加密與解密)