數字證書的原理

2021-07-27 11:39:39 字數 4377 閱讀 2452

先說加密。

明文p,加上密碼w一混淆之後,變成密文m

如果不知道w,則無法從m反推回p。也就是無法進行解密。

類似這種加密方式,稱為對稱加密。也就是加密、解密使用的密碼是一樣的。

實際上加解密並不是直接使用密碼,而是經由密碼生成的金鑰。

這種演算法有很多,比如aes。

另外還有一種神奇的加解密演算法,叫做非對稱加密。比如rsa。

非對稱加密使用的密碼有一對,乙個稱為公鑰pub,乙個稱為私鑰priv。

明文p,經過公鑰pub使用rsa加密演算法一混淆之後,變成了密文m。這個密文m,用公鑰pub是解不開的,需要用私鑰priv來解密。

同樣地,明文p,經過私鑰priv使用rsa加密演算法一混淆之後,變成了密文m。

這個m,也只能用公鑰pub來解密。

所謂公鑰,就是可以公開出去可以供所有人使用的金鑰。不像對稱加密裡的密碼,要小心翼翼的存著。

還有一種演算法,叫做hash演算法。是單向加密。就是只能從明文得到密文,卻無法從密文得到明文。這種演算法有乙個好處,就是明文哪怕只有一位不一樣,加密後得到的密文也不一樣。所以常用來進行比較明文是否被篡改過。

有了以上的基礎,就可以開始說數字證書了。

首先,有乙個權威的證書簽發機構,稱為ca——全球就那麼幾個公司比較權威啦,這個機構,先用rsa產生一對公私鑰。

私鑰自己留著藏起來,你要是能偷到手就厲害了。

然後用自己的私鑰對自己的公鑰進行簽名,生成所謂的數字證書。

這個過程大概是這樣的:

先生成乙個檔案,檔案內容大概是這樣的:

- 公鑰內容

- 簽發者id—-誰簽發的證書

- subject—-也就是這個證書簽發給誰。這裡subject和簽發者id相同。

- 有效期

- 其他資訊

以上內容都是明文。我們稱為內容p。

然後使用hash演算法,對內容p進行hash計算,得到乙個hash值h。

然後使用簽發機構的私鑰對h進行rsa加密,得到簽名資訊s。這個步驟稱為簽名,就是用私鑰對某公開內容的hash值進行加密。

然後將p,s連成乙個檔案,這個檔案就是所謂的數字證書了。所以數字證書裡,包括證書持有者的身份資訊,證書資訊,證書持有人的公鑰,以及簽名資訊。

現在假設某人得到了這個證書,如何確認這個證書屬於誰的呢?

我們看數字證書裡有些什麼?可以得到p,可以得到s。

我們用同樣的hash演算法對p進行hash計數,得到乙個hash值h1。

p裡有公鑰,簽發者id,subject,有效期,及其他資訊。我們用公鑰解密s,得到了乙個值h』。

這個h『就是製作數字證書的時候,用私鑰對s加密的h。

現在對比h』和h1是否相等,如果相等,那麼就證明這個證書是有簽發者簽發給subject的證書。否則就說明:1.內容p被篡改過,或者2.證書不是由ca簽發的。

這個是對自簽發證書的驗證過程。需要說明的是,這種自簽發證書的驗證不常使用,但如何驗證證書的原理類似。

既然自己可以給自己簽發證書,那黑客宣稱自己是某著名ca,然後給自己簽發乙個證書。那驗證者如何來驗證這個證書是黑客自己的呢還是那個著名的ca呢?

如果僅僅按照上文所說的自簽發證書驗證過程來看,是無法確認身份的。這個問題,就是ca存在的意義了。

所謂全球權威的ca,就那麼幾個公司,這幾個公司的證書,被各軟體廠商設定成「可信任的根證書」了。至於這些ca是怎麼把自己的數字證書交給軟體廠商而且讓他們信任自己,我也不知道。

如果你知道了,你就可以自己給自己簽發乙個證書,交給微軟的ie,或者firefox等,讓他們把你的證書嵌入到軟體裡去。這樣一來,你就成了全球權威的ca之一了!

現在知道了,自簽發的數字證書,要被各軟體信任,是不容易的。一旦ca的根證書存在使用者的系統了,就可以用這個根證書來驗證其他證書了。並用被驗證過的證書來認證身份。

我們舉乙個例子,說明數字證書用來進行身份認證,就是https連線某**的時候的身份認證過程。

首先,某**當然是乙個web伺服器,它要有乙個數字證書。這個證書,要麼是自己簽發的,要麼是由第三方簽發的,一般這個第三方是全球權威的ca。

ie或者firefox用https連上web server,這個時候,ie或者firefox最擔心的是這個web server是冒充的**,比如我登入某銀行**,結果連上了乙個釣魚**,使用者也沒有發現,就在這個釣魚**做的和真**一樣的頁面裡,輸入了自己的使用者名稱密碼,豈不是就這麼洩露了機密資訊麼?

那麼怎麼確認這個**是正確的呢?這個就需要瀏覽器要求web server提供自己的數字證書來證明自己的身份。

**的身份是什麼?網域名稱,比如你如果打了也出現跟知乎一樣的**,瀏覽器沒有警告你說此**不合法,結果你輸入了自己的使用者名稱和密碼登入,你覺得這個是什麼問題?

繼續剛才的話題。瀏覽器要求web server的證書來證明我在瀏覽器中輸入的**,並沒有連線到錯誤的**上去,於是web server把自己的數字證書傳給瀏覽器。瀏覽器對之進行驗證,確認此**的身份。

請注意兩個情況的區別:一,我在瀏覽器輸入連線到了黑客的釣魚伺服器,而沒有連線到真正的伺服器;二,我在瀏覽器輸入連線到了乙個黑客的釣魚伺服器。

現在我們繼續看這個數字證書怎麼證明自己的身份。

假設數字證書是第三方簽發的,但這個第三方卻不權威。也就是說,給**簽發證書的這個ca,沒有被ie等瀏覽器認可。

我們也可以在瀏覽器檢視此證書。檢視12306**的證書,內容是這樣的:

簽發者是srca,這是什麼意思呢?

就是說,中鐵數字認證中心簽發給12306**的數字證書,其簽發者」中鐵數字認證中心「,在ie眼裡是不受信任的。那ie自然對乙個不受信任的簽發機構簽發的數字證書也認為不安全了。那麼這個數字證書到底能不能證明12306的身份呢?答案是不能。

因為這個證書是由srca簽發的。也就是說,12306**的數字證書,是用srca的私鑰簽名過的。

回憶一下簽名的意思,就是用私鑰對公開內容的hash值進行加密。這裡的公開內容,就是12306的數字證書中的身份資訊,12306**公鑰,證書資訊等內容;而簽名,就是srca的私鑰對12306的數字證書部分公開內容的hash值的加密。

既然是用srca的私鑰簽名過的,就必須使用srca的公鑰來驗證這個簽名。

但是srca的公鑰在**?怎麼能證明這個公鑰就是srca的而不是其他黑客的?這就回到了最初的ca存在意義的問題那裡了。我們無法證明。

所以ie並沒有srca的公鑰。如果srca將自己的數字證書嵌入到ie裡了,ie自然就有了。

既然沒有嵌入進ie裡,那通過手動新增srca到ie裡可以嗎?當然可以,這就是為什麼12306要求安裝受信任的根證書的原因。

那麼srca是如何驗證12306**的身份的呢?是如何驗證12306提供的數字證書的有效性呢?

也就是受信任的根證書,如何來驗證**的數字證書的呢?

在以上描述中,對於自簽發證書中的公鑰的使用,可能對大家有一些誤導。實際上,數字證書中的公鑰,可以被用來驗證其他數字證書,也可以被用來進行兩個節點間通訊時候的加密金鑰(當然實際使用的加密金鑰是另一回事情,這裡暫且略過)。大多數https**提供的數字證書的目的,乙個是確認身份,乙個是加密瀏覽器與web server之間的通訊資料。

我們構造乙個場景:

假設srca的公鑰證書已經被使用者新增為受信任的根證書。也就是srca的公鑰存於使用者的計算機系統中了。而srca的私鑰存在於srca公司董事長的某個保險櫃裡。

首先是12306**向srca申請數字證書。

12306**申請數字證書的時候,需要提供一些資訊,主要包括:12306的url,12306自己產生的一對rsa公私鑰對中的公鑰,其他一些相關資訊。

srca就用自己的私鑰對12306的申請內容進行簽名,形成乙個數字證書,還給12306**。

所以這個證書裡,包括了:

1. 12306**的url

2. 12306**使用的rsa公私鑰對中的公鑰。

3. 證書簽發者的資訊。

4. 證書簽名。

在12306**裡,於是就有乙個數字證書,還有乙份該數字證書中的公鑰對應的私鑰,這對公私鑰是12306自己產生的。其中數字證書由srca的私鑰簽名了。而srca的公鑰已經存在於使用者瀏覽器中。12306**的數字證書中包括了12306中的公私鑰對的公鑰和url。

所以12306數字證書的驗證,是使用srca公鑰證書中的公鑰驗證的。因為12306**數字證書是srca簽發的,就必須用srca公鑰驗證。

自簽發證書,是用自己證書中的公鑰來驗證自己的。因為自簽發證書是自己的私鑰簽發的,所以需要使用自己的公鑰驗證。

也就簽名的時候用的什麼公私鑰對中的私鑰,則驗證簽名的時候就需要用對應的公鑰。

而**的數字證書提供了公鑰,**自己有私鑰。瀏覽器於是產生乙個隨機數r1,用公鑰加密發給伺服器,伺服器用私鑰解密後,得到這個隨機數r1,後續兩者就用這個r1作為對稱加密的金鑰來加密傳輸的資料,這個大約是ssl協議的簡單過程。

數字證書原理

概念介紹 對稱加密演算法 加密和解密使用同乙個金鑰。非對稱加密演算法 加密和解密使用的金鑰不是同乙個。典型的如rsa 公鑰加密演算法 擁有一對金鑰,公鑰和私鑰,用私鑰進行解密和數字簽名,用公鈅來進行加密及驗證簽名。encryption 加密 decryption 解密 asymmetric 非對稱 ...

數字證書原理

證書,也叫做數字證書,是網路世界中的 身份證 證書將持有者的身份資訊和公鑰關聯到一起,保證公鑰確實是這個證書持有者的,通過證書就可以確認持有者的身份。證書由權威的 公正的 可信任的第三方機構頒發,我們把證書的頒發機構稱為ca certificate authority 相當於現實生活中的公安局。為什...

數字證書原理(1)

對原文做出部分修改 一 基礎知識 1.1 數字加密 不使用金鑰 如下圖所示,明文進行一次加密,生成密文,再由解碼器解碼 編碼器演算法為 旋轉3個字元 a d,c f.使用金鑰 編碼演算法和編碼機可能落入敵人手裡,所以大部分編碼機上使用 號盤,使用不同的值進行加密 演算法為 旋轉n個字元 金鑰為n n...