基於非對稱金鑰演算法,bob生成了一對公私鑰。bob將公鑰發布在公開的金鑰庫中。而alice在向bob傳送加密檔案或者驗證bob簽名的檔案時,均要從公鑰庫取到bob的公鑰。我們已經知道,一般來說公鑰就是一段固定長度的字串,並沒有特定的含義。
為了讓alice能夠方便的辨別公鑰,我們可以考慮對給公鑰附加一些資訊,例如該公鑰使用的演算法,該公鑰的所有者(
主題),該公鑰的有效期等一系列屬性。這樣的資料結構我們稱作
pkcs10
資料報
公鑰的主題我們採用唯一標示符(或稱
dn-distinguished name)
,以盡量唯一的標示公鑰所有者。以下是基於抽象語法表示法所定義的pkcs10
資料結構:
[plain]view plain
copy
certificationrequestinfo ::= sequence (v1,...),
subject name,
subjectpkinfo subjectpublickeyinfo},
attributes [0] attributes}
}
subjectpublickeyinfo ::= sequence },
subjectpublickey bit string
}
pkinfoalgorithms algorithm ::=
attributes ::= set of attribute}
criattributes attribute ::=
attribute ::= sequence ),
values set size(1..max) of attribute.&type()
}
我們已經有了pkcs10資料報,除了公鑰資訊外,還有公鑰的持有者,公鑰的版本號等資訊。然而這樣的資料結構其實並沒有任何權威性。例如有一天乙個叫做richard的人想冒充bob,也生成一對公私鑰,並且使用了相同的公鑰主題封裝為p10資料結構。alice其實並沒有辦法分辨哪個是真實bob的公鑰。
為了解決這個問題,就需要乙個權威的第三方機構,對p10結構的資料進行認證。就如同對p10檔案蓋上乙個權威的章,防止仿照。這樣的權威機構,我們稱作ca
(certificate authority)
數字證書認證中心。而
ca如何為p10資料蓋章呢?非常簡單,就是我們前文已經提到的數字簽名技術:
① 如上圖所示,ca機構其實也持有一張私鑰。一般來說,
ca會對這份私鑰進行特別的保護,嚴禁洩漏和盜用。
② bob將自己的公鑰附加上一系列資訊後,形成了
p10資料報(請求包),並傳送給ca。
③ ca機構通過其他一些手段,例如檢視
bob的身份資訊等方式,認可了
bob的身份。於是使用自己的私鑰對
p10請求進行簽名。(也可能會先對資料進行一些簡單修改,如修改有效期或主題等)
④ 這樣的簽名結果,我們就稱作數字證書。
數字證書同樣遵循乙個格式標準,我們稱作x509標準,我們一般提到的x509
證書就是如此。以下是
x509
的格式:
[plain]view plain
copy
[certificate ::= sequence
tbscertificate ::= sequence
version ::= integer
certificateserialnumber ::= integer
validity ::= sequence
certificatevaliditydate ::= choice
uniqueidentifier ::= bit string
subjectpublickeyinfo ::= sequence
extensions ::= sequence of extension
extension ::= sequence
基於數字證書,我們可以再來看看bob如何給alice傳送乙份不可否認、不可篡改的檔案:
第一步:bob除了對檔案進行簽名操作外,同時附加了自己的數字證書。一同發給alice
第二步:alice首先使用ca
的公鑰,對證書進行驗證。如果驗證成功,提取證書中的公鑰,對
bob發來的檔案進行驗籤。如果驗證成功,則證明檔案的不可否認和不可篡改。
可以看到,基於數字證書後,alice
不在需要乙個公鑰庫維護
bob(或其他人)的公鑰證書,只要持有
ca的公鑰即可。數字證書在電子商務,電子認證等方面使用非常廣泛,就如同計算機世界的身份證,可以證明企業、個人、**等實體的身份。同時基於數字證書,加密演算法的技術也可以支援一些安全互動協議(如ssl
ssl協議的原理。
數字簽名與數字證書技術簡介(二)
現在我們可以繼續我們的場景 假設有一天,alice 收到了乙份署名為 bob的檔案。alice 希望能夠確認這份檔案一定是來自 bob 另外 alice 希望能夠確信,這份檔案在傳輸過程中並沒有被它人篡改。那麼基於非對稱金鑰演算法我們應該怎麼做?確認檔案一定來自於bob 其實就是 bob無法否認自己...
數字簽名與數字證書
數字簽名 將 報文按雙方約定的hash 演算法計算得到乙個固定位數的 報文摘要。在 數學上保證 只要改動報文中任何一位,重新計算出的 報文摘要值就會與原先的值不相符。這樣就保證了報文的不可更改性。將該報文摘要值用傳送者的私人 金鑰加密,然後連同原報文一起傳送給接收者,而產生的報文即稱 數字簽名 數字...
數字簽名與數字證書
數字簽名 將 報文按雙方約定的hash 演算法計算得到乙個固定位數的 報文摘要。在 數學上保證 只要改動報文中任何一位,重新計算出的 報文摘要值就會與原先的值不相符。這樣就保證了報文的不可更改性。將該報文摘要值用傳送者的私人 金鑰加密 然後連同原報文一起傳送給接收者,而產生的報文即稱 數字簽名 數字...