金鑰 數字簽名 數字證書

2021-09-12 08:25:25 字數 2300 閱讀 9477

公鑰和私鑰是非對稱密碼學中的概念。他們的特點是用公鑰加密的密文只能用私鑰解密,用私鑰加密的密文只能用公鑰解密。在通訊過程中,私鑰由伺服器持有,不可外洩,公鑰則通過http傳送給客戶端。伺服器傳送經過私鑰加密的密文給客戶端,客戶端可以通過公鑰解開密文;客戶端傳送經過公鑰加密的密文給伺服器,伺服器通過私鑰解開密文。這個過程如下圖所示↓

但是這樣會有乙個問題。中間商可以冒充伺服器篡改公鑰,如下圖↓

為了防止中間商篡改公鑰,需要用到數字證書,在講數字證書之前還需要先了解一下數字簽名。

數字簽名是個什麼東西呢?它是資訊的指紋。但是這不是重點,重點是數字簽名的生成過程。數字簽名的生成有兩個步驟:

對明文進行雜湊,得到一串雜湊值

對第一步得到的雜湊值私鑰加密。

這裡要特別注意,在數字證書中對雜湊值進行加密的私鑰是誰的?答案是ca認證機構的私鑰。切記!切記!不明白不要緊,到後面就明白了。網上很多文章都對https中的數字簽名有誤解,大家一定要注意搞清楚,數字簽名是先進行雜湊,然後用ca的私鑰加密,否則不可能明白為什麼數字簽名能防止中間商篡改公鑰。

那麼數字簽名是如何使用的呢?其實看一張圖就明白了。數字簽名會隨著內容一起被傳送出去,接收方首先用公鑰解密數字簽名得到雜湊值h1,然後對內容用同樣的演算法計算雜湊值h2,如果h1=h2,那麼說明內容沒有被串改過。

然而這個過程也存在風險,如果中間商篡改了公鑰,那麼他就可以偽造數字簽名,一樣完蛋。如下圖所示↓

所以問題的關鍵就是如何確保客戶端接收到的公鑰是真正的伺服器的公鑰,而不是中間商的公鑰。這就需要用到數字證書了。

數字證書包含兩部分內容:

伺服器資訊

數字簽名

這裡的伺服器資訊中就包含了伺服器的公鑰,當然還有一些其他資訊,比如證書名稱、發布機構、有限期、雜湊演算法等。數字簽名就是對伺服器資訊進行雜湊,然後用ca認證中心的私鑰加密的結果。

這裡特別強調數字簽名是用ca認證中心的私鑰加密的,因為這樣才能防止中間商串改公鑰。這裡還有一點需要注意,那就是作業系統會自動安裝ca認證中心的公鑰,所以,每個客戶端都預設有ca認證中心的公鑰。

如果中間商想偽造數字證書,篡改數字證書中的公鑰,由於中間商沒有ca認證中心的私鑰,無法偽造數字簽名,於是也就無法偽造數字證書了。

但是這樣就萬無一失了嗎?並不是,如果中間商也在ca認證中心註冊了數字證書,並且用這個合法的數字證書替換了伺服器的數字證書,還是會完蛋。但這就不是我們該操心的問題了,這是ca認證中心該考慮的問題,應該給什麼人發證書,拒絕給什麼人發證書。只有ca認證中心能夠區分好人和壞人,我們才是安全的。

其實到最後就是客戶端把對伺服器的信任委託給了ca認證中心,因為伺服器是不一定可信的,那就創造乙個相對一定可信的第三方。區塊鏈做的事是把對權威的信任分發給許多人,賭的是不可能大家同時不靠譜。這個社會啊,只要有人存在,就有信任問題。

真正的https通訊並不是通過公鑰和私鑰加密的,公鑰和私鑰只用在握手過程中,當客戶端請求到真正的公鑰後,會生成乙個隨機數(對稱金鑰)並用公鑰加密,傳送給伺服器,後續的通訊就用對稱金鑰加密了。這樣做的原因是對稱金鑰加解密過程太耗時了。

結論:數字證書是為了保證公鑰的真實,公鑰的真實是為了保證對稱金鑰的安全。

數字簽名,數字證書

數字簽名 將 報文按雙方約定的hash 演算法計算得到乙個固定位數的 報文摘要。在 數學上保證 只要改動報文中任何一位,重新計算出的 報文摘要值就會與原先的值不相符。這樣就保證了報文的不可更改性。將該報文摘要值用傳送者的私人 金鑰加密 然後連同原報文一起傳送給接收者,而產生的報文即稱 數字簽名 數字...

數字簽名 數字證書

一 數字簽名 1.1 為什麼需要數字簽名?由於網路環境的複雜性,我們無法保證通訊的雙方是真是的,而且內容是完整的 沒被修改過的,因此才需要數字簽名。數字簽名類似於現實生活中的簽名,有以下兩種功能 1 確認通訊雙方的真實身份,別人假冒不了 2 能確認訊息的完整性。它是基於非對稱加密演算法。1.2 數字...

數字簽名 數字證書 https

對稱加密和非對稱加密 對稱加密 加密和解密的金鑰是一樣的 缺點就是容易被中間人破解 非對稱加密 公鑰是所有人都可以認領 私鑰是保密的 只有乙個人知道 例如a給b傳送郵件 a用的b的公鑰 只有b的私鑰可以解密a的公鑰的內容 b的私鑰的唯一性 保證了信件不會被洩露 但是如果黑客冒充a給b傳送郵件 b是不...