TCP IP協議族 三 數字簽名與HTTPS詳解

2022-03-10 23:52:58 字數 3926 閱讀 2006

前面幾篇部落格聊了http的相關東西,今天就來聊一聊https的東西。因為http協議本身存在著明文傳輸、不能很好的驗證通訊方的身份和無法驗證報文的完整性等一些安全方面的確點,所以才有了https的缺陷。https確切的的說不是一種協議,而是http + ssl (tsl)的結合體。http報文經過ssl層加密後交付給tcp層進行傳輸。ssl(安全套節層)主要採取的是rsa(非對稱加密)與aes(對稱加密)結合的加密方式。先通過rsa互動aes的金鑰,然後通過aes進行報文加密和解密。本篇部落格主要聊的就是https具體的工作過程。

一、rsa與aes簡述

在本篇部落格的第一部分呢,先聊一下ras與aes這兩個加密策略,如果你在公司做過支付相關的東西,對資料傳輸的安全性要求比較高,這時候就得採取一些加密措施將傳輸的報文進行加密,必要時再進行md5驗籤。當然本部分聊的ras與aes是比較簡潔的,關於這兩者具體的內容,請自行google吧。因為https在傳輸的過程中使用到了rsa與aes加密演算法,所以在聊http+ssl之前呢,我們先簡單的聊一下aes與rsa。

1、advanced encryption standard (aes: 高階加密標準)

aes,全稱:advanced encryption standard----高階加密標準。該加密演算法有乙個金鑰,該金鑰可以用來加密,也可以用來解密,所以aes是對稱加密演算法。下方這個就是aes加密和解密的過程。client端與server端有乙個共同的key, 這個key是用來加密和解密的。如果報文在傳輸的過程中被竊取了,沒有這個key, 對加密的內容進行破解是非常困難的,當然竊取者如果有key的話,也是可以輕而易舉的解密的。所以在aes中,key是關鍵。這也就相當於你們家的門鑰匙,誰拿到鑰匙後都可以開啟你們家的門。即使門鎖再結實,再安全,在鑰匙面前也是不行呢。

所以對於aes加密策略來說這個key的保密措施要做足一些,如果之後有時間的話可以分享一些具體的aes加密策略。比如每次加密的key都是從乙個密碼本中動態生成的,而這個密碼本服務端和客戶端都有同一本,每次傳輸的是一些引數。這些引數在經過一些演算法的對映,從密碼本中取出相應的key用來解密。這樣一來,就相當於給aes加了一層防盜門,加大了破解的難度。這樣做的好處是每次加密的key都是不同的,而且需要密碼本以及對映演算法的支援。

2、rsa 公鑰加密演算法

ras這個名字,就是該演算法三位發明者的名字的首字母的組合。ras是非對稱加密,其在加密和解密的過程中,需要兩個key,乙個公鑰(public key),乙個是私鑰(private key)。公鑰負責加密,而私鑰負責解密。從名字就可以看出,公鑰是可以開放出去的,任何人都可以持有公鑰進行加密。而私鑰必須得進行保護,因為是用來解密的。

這樣一來,加密和解密就可以用不同的鑰匙來處理。對於加密放來說,即使你可以對報文進行加密,如果沒有私有的話也是不可以對你加密的內容進行解密的。這就相當於乙個盒子,盒子上有把鎖。你可以把東西放進去,然後再鎖上盒子。但是如果你沒有鑰匙的話,也是打不開這把鎖的。

下方這個簡圖就是服務端單向驗證的ras非對稱加密演算法,client內建了乙個公鑰,該公鑰與server端的私鑰是配對的,所以client端可以使用這個內建的public key加密,而服務端就可以使用這個private key進行解密。目前最常用的是服務端單向認證機制。

二、ca證書

如果你自己通過ras演算法生成了乙個私鑰和公鑰,在公鑰傳送給客戶端的過程中有可能被篡改成其他的公鑰,而客戶端在沒有其他措施的保護下是不知道該公鑰是否就是伺服器那邊的私鑰對應的公鑰的。這種自己做的ras的公鑰和私鑰有可能在公鑰分發的過程中被篡改。下方就是client從server端獲取公鑰時被中間者篡改了,將public換成了自己的偽public key, 同樣這個中間者持有這個偽public key所對應的偽private key。如果客戶端使用的偽public key進行加密傳輸的話,那麼中間者是可以使用自己的private key進行解密的。

舉個例子來模擬一下這個問題。

假設你在古代,你出門在外,妻子在家養子。你們家有個箱子,箱子上有把鎖,這就是你和你妻子互通的工具。你媳婦兒負責往箱子裡放東西,然後上鎖。你有把獨特的鑰匙,你負責開鎖,取東西。可是你再將箱子給鏢局託運的的過程中,被鏢局的「小黑」掉包了,箱子的外表一致,鎖看起來也一樣,可是已經不是你的箱子了。因為路途遙遠,古代又沒有什麼iphone啥的,你媳婦沒辦法來辨別該箱子是否是原裝的。然後就將一些東西放在了箱子裡邊,然後上鎖交給了鏢局的「小黑」。

因為「小黑」掉包的箱子,所以小黑有箱子的鑰匙呢,然後就可以開啟這個箱子,取東西了。原來的箱子又在小黑那,小黑就可以往原來的箱子裡邊隨便往箱子放點沒有價值的東西給你就行了。當你發現箱子裡的東西不是你想要的時候,完了,小黑從鏢局辭職了,找不到人了。找鏢局的人討說法,可是鏢局的人說「小黑」是鏢局的臨時工,這個責任鏢局說了,我們不能擔。鑑於你無權無勢,這事兒也就此罷了。(故事純屬虛構,如有雷同純屬巧合)

關於更多**的故事請移步網路劇《毛騙》一二三季

為了防止「小黑」再次作案,所以頒布乙個公正機構來證明你媳婦收到的箱子就是你發出的箱子。在ras加密中也有乙個第三方機構來充當這個角色,負責證明客戶端收到的證書就是你傳送的證書,中間沒有被篡改。這個中間認證機構,就是陣列證書認證機構, 其頒發的證書也就是我們常說的ca證書(ca , certificate authority)。

下面我們就來詳細的敘述一下證書簽名,證書分發以及證書驗證的整個過程。

下方這個截圖就是蘋果的根證書的一些資訊,從下方可以看出,ca證書內容中包括加密演算法,公共金鑰以及數字簽名。

下方就是公鑰以及數字簽名的具體內容,當對下方公共金鑰進行驗證時,需要使用內建的ca公鑰將數字簽名進行解密。然後將解密後的內容,與公鑰生成的hash值進行比較,如果匹配成功,那麼該證書就是ca機構頒布的合法證書。

三、https安全通訊機制的建立

上面我們聊完aes與rsa加密策略,然後又聊了帶有數字簽名的公共金鑰。上面這兩部分內容都是為https做鋪墊的,接下來就看一看http+ssl是如何進行資料傳輸的。

1.https簡介

在開頭的部分也說了,https不是乙個新的通訊協議,而是http與ssl(或tsl)的組合。ssl--安全套節層(secure socket layer), tsl(transport layer security 安全傳輸層)是以ssl為原型開發的協議,ietf以ssl3.0為基準後又制定了tls1.0、tls1.1和tls1.2,當前主流版本為ssl3.0與tls1.0。

https就是在http與tcp層中間新增了乙個ssl層。因為https被http多了這層加密的流程,所以https的速度要比http慢的多。

2. https的通訊過程

ssl的加密過程是rsa與aes混合進行的。簡單概括一下,就是通過rsa加密方式來交換aes加解密的金鑰,然後使用aes加密的方式來傳輸報文。下方是ssl建立連線以及傳輸資料的**。在下圖中大體可以分為四步:

數字簽名協議

可信,防偽造,防篡改,防抵賴,不可重用 協議思想 使用密碼技術,保證簽名性質 金鑰代表身份,密文防止篡改 簽名過程 將訊息m加密作為訊息的簽名s ek m 驗證過程 將簽名s解密獲得訊息m dk s trent和張三共享金鑰ka 和李四共享金鑰kb 張三m1 ea m1 c1 m1 tre nt,m...

數字簽名與數字加密

數字簽名主要經過以下幾個過程 資訊傳送者使用一單向雜湊函式 hash函式 對資訊生成資訊摘要 資訊傳送者使用自己的私鑰簽名資訊摘要 資訊傳送者把資訊本身和已簽名的資訊摘要一起傳送出去 資訊接收者通過使用與資訊傳送者使用的同乙個單向雜湊函式 hash函式 對接收的資訊本身生成新的資訊摘要,再使用資訊傳...

加密與數字簽名

加密與數字簽名 加密與數字簽名 一 加密 資料加密技術從技術上的實現分為在軟體和硬體兩方面。按作用不同,資料加密技術主要分為資料傳輸 資料儲存 資料完整性的鑑別以及金鑰管理技術這四種。在網路應用中一般採取兩種加密形式 對稱金鑰和公開金鑰,採用何種加密演算法則要結合具體應用環境和系統,而不能簡單地根據...