數字簽名 數字證書

數字簽名原理簡介(附數字證書)

首先要了解什麼叫對稱加密和非對稱加密,消息摘要這些知識。html

1. 非對稱加密算法

在通訊雙方,若是使用非對稱加密,通常聽從這樣的原則:公鑰加密,私鑰解密。同時,通常一個密鑰加密,另外一個密鑰就能夠解密。安全

由於公鑰是公開的,若是用來解密,那麼就很容易被沒必要要的人解密消息。所以,私鑰也能夠認爲是我的身份的證實。網絡

若是通訊雙方須要互發消息,那麼應該創建兩套非對稱加密的機制(即兩對公私鑰密鑰對),發消息的一方使用對方的公鑰進行加密,接收消息的一方使用本身的私鑰解密。post

2.消息摘要加密

消息摘要能夠將消息哈希轉換成一個固定長度的值惟一的字符串。值惟一的意思是不一樣的消息轉換的摘要是不一樣的,而且可以確保惟一。該過程不可逆,即不能經過摘要反推明文(彷佛SHA1已經能夠被破解了,SHA2尚未。通常認爲不可破解,或者破解須要耗費太多時間,性價比低)。url

利用這一特性,能夠驗證消息的完整性。spa

消息摘要一般用在數字簽名中,下面介紹用法。.net

 

瞭解基礎知識以後,就能夠看一下數字簽名和數字證書了。3d

3.數字簽名

假設如今有通訊雙方A和B,二者之間使用兩套非對稱加密機制。

如今A向B發消息。

那麼,若是在發送過程當中,有人修改了裏面密文消息,B拿到的密文,解密以後獲得明文,並不是A所發送的,信息不正確。

要解決兩個問題:1. A的身份認證 2. A發送的消息完整性 那麼就要用到上面所講的基礎知識。

數字簽名的過程以下圖:

簡單解釋:

A:將明文進行摘要運算後獲得摘要(消息完整性),再將摘要用A的私鑰加密(身份認證),獲得數字簽名,將密文和數字簽名一塊發給B。

B:收到A的消息後,先將密文用本身的私鑰解密,獲得明文。將數字簽名用A的公鑰進行解密後,獲得正確的摘要(解密成功說明A的身份被認證了)。

對明文進行摘要運算,獲得實際收到的摘要,將兩份摘要進行對比,若是一致,說明消息沒有被篡改(消息完整性)。

疑問:

摘要使用A的私鑰加密,若是被擁有A的公鑰的第三者截獲,不就能夠獲取到摘要了麼?會不會對安全形成威脅。

不會。由於摘要是不可逆推出原文的。

 

4.數字證書

理解了數字簽名以後,數字證書就好理解了。

因爲網絡上通訊的雙方可能都不認識對方,那麼就須要第三者來介紹,這就是數字證書。

數字證書由Certificate Authority( CA 認證中心)頒發。

關於數字證書的具體描述,須要百度,目前未徹底理解。記一個TODO。

圖解以下:

首先A B雙方要互相信任對方證書。//TODO

而後就能夠進行通訊了,與上面的數字簽名類似。不一樣的是,使用了對稱加密。這是由於,非對稱加密在解密過程當中,消耗的時間遠遠超過對稱加密。若是密文很長,那麼效率就比較低下了。但密鑰通常不會特別長,對對稱加密的密鑰的加解密能夠提升效率。

 


 

 

一.什麼是數字證書?

  數字證書是一種權威性的電子文檔。它提供了一種在Internet上驗證您身份的方式,其做用相似於司機的駕駛執照或平常生活中的身份證。它是由一個由權威機構----CA證書受權(Certificate Authority)中心發行的,人們能夠在互聯網交往中用它來識別對方的身份。固然在數字證書認證的過程當中,證書認證中心(CA)做爲權威的、公正的、 可信賴的第三方,其做用是相當重要的。

  Ok,知道什麼是數字證書後,先看看它長的什麼樣吧:>,文件縮略圖以下:

  

  雙擊後打開以下:

  

 

二.CA認證機構/CA認證中心

  1.CA認證中心是什麼?

  CA認證中心是負責簽發管理認證數字證書的機構,是基於國際互聯網平臺創建的一個公正,權威,可信賴的第三方組織機構。

  2.世界上的CA認證中心不止一間,那他們之間的關係是什麼(CA認證中心之間的關係)?

  嗯,回答這個問題以前能夠先看看下圖:

  

  從圖中能夠看到,CA認證中心之間是一個樹狀結構,根CA認證中心能夠受權多個二級的CA認證中心,同理二級CA認證中心也能夠受權多個3級的CA認證中心...若是你是數字證書申請人(好比說:交通銀行),你能夠向根CA認證中心,或者二級,三級的CA認證中心申請數字證書,這是沒有限制的,當你成功申請後,你就稱爲了數字證書全部人。值得注意的是,根CA認證中心是有多個的,也就是說會有多棵這樣的結構樹。FireFox裏面默認記錄了一些根CA認證機構的信息,如圖:

  

  看到這裏,確定有人會問,若是有如今新的根CA認證機構成立,FireFox確定是沒有這個CA認證中心的信息的(這些信息是用來驗證子CA認證機構的,很重要,後面來會講到),那怎麼辦呢?嗯~~確實,若是今天2009-1-8日忽然在哪裏成立一個新的CA認證中心,我FireFox裏面確定沒有他的信息的!但解決辦法仍是有的,看上圖,能夠找到一個"Import"按鈕,當咱們遇到這樣的倒黴事時,只有本身去下載並導入根CA認證中心信息了(其實這樣作是不太安全的!),或者指望FireFox的升級會升級這些信息,但這個我是不肯定的。

  3.爲何CA認證中心是權威的?

  其實搞清楚這個問題後,你也會真正瞭解「CA認證中心是如何受權子CA認證中心的?」,「爲何僞造的數字證書是無效的」,「爲何數字證書是一種權威性的電子文檔」等等一系列的問題。而且SSL能夠說是創建在CA認證中心的權威,公正,可信賴的基礎上的,若是CA認證中心的信息能夠被僞造的,那麼SSL的一切就完了......

  首先,咱們先來看看,在FireFox裏記錄的CA認證中心的信息究竟是什麼東西??見上圖,單擊某項,Export導出....你會看到導出的東西很面熟,原來就是數字證書!!

  實際上每一個CA認證中心/數字證書全部人,他們都有一個數字證書,和屬於本身的RSA公鑰和密鑰,這些是他們的父CA認證中心給他們頒發的,這裏先大概解釋一下RSA,RSA是一種非對稱加密的算法,它的公鑰和密鑰是配對的,若是用公鑰加密,用私鑰解密就能夠獲得明文;若是用私鑰加密,用公鑰解密也能夠獲得原來的明文,這由RSA特性決定,他效果能夠用下圖歸納:

  

  對於私鑰:CA認證中心/數字證書全部人本身保存,不公開。

  對於公鑰:CA認證中心/數字證書全部人會把公鑰存在他的CA認證中心的數字證書內。

  (1).首先,CA認證中心/數字證書全部人,它在網絡上的表現形式只能是一張數字證書!因此咱們能夠把某張數字證書等價於某個CA認證中心/數字證書全部人。這樣的話,驗證數字證書的合法性就能夠肯定CA認證中心/數字證書全部人是不是合法的!!!

  (2).數字證書使用數字簽名做驗證!這裏簡單說明一下數字簽名的過程:你從Firefox/IE導出的數字證書包含3個部分:證書內容(F),加密算法(A),F加密密文(F') (數字證書結構會在第三部分詳細介紹),在這裏,A不是一個算法,而是兩個,因此密文F'是F兩次加密後的結果。

  首先,F會被散列算法SHA1計算出hash值h1(稱爲128bit的摘要),而後h1會被髮布這個數字簽名的CA認證機構的用私鑰進行RSA加密,注意:是發佈這個數字簽名的CA認證機構,若是如今被加密的數字證書是屬於二級CA認證機構的,那麼用來加密這個證書的私鑰是根CA認證機構的私鑰!!RAS加密完後,就造成密文F'。

  當你要驗證這個數字證書可信/合法性時,你須要找到你的上一層CA認證中心的數字證書,而且從中獲取公鑰,把數據證書中的密文F'進行RSA解密,若是得出的值h2和h1比較(h1能夠當即用數據證書中的F現場算出來),若是相等,則認爲證書是可信的,合法的!因爲你是不可能知道上一層CA認證中心的私鑰,因此你沒法僞造一個能夠用上一層CA認證中心公鑰解密的數字證書!!

  詳細流程圖以下:

  

   因爲一個數字證書基於上層的數字證書做驗證,那上層的數字證書又是否合法呢??這就會出現一直遞歸上去的現象,事實也是這樣的,驗證一個證書是否合法,須要驗證到他的最頂層的根證書是否合法!從其餘的文章弄來的這幅圖很好地表達了這個思想:

   

  這裏確定又有人會問,那麼最頂層的CA認證中心如何證實它的合法性呢?.......呵~這就是爲何FireFox要預先把一些最頂層(這裏的"最頂層"和"根"是同一個概念)的CA認證中心的證書加入到權威信任列表中了,由於,最頂層CA認證中心沒有辦法證實,因此,最頂層的CA認證中心是老是受信任的!!而事實上,最頂層的CA認證中心在是世界上也是爲數很少的。這裏你們應該瞭解爲何我剛纔說本身導入根CA證書是不太安全的,由於你沒法驗證。

三.數字證書的組成

  能夠先看看我從Firefox的證書截圖:

  

  1.Certificate(證書):

   (1).Common Name(證書全部人姓名,簡稱CN,其實就是證書的名字,如第一幅圖看到的:ABA.ECOMRoot....)

   (2).Version(版本,如今通常是V3了)

   (3).Issuer(發證機關)

   (4).Validity(有效日期)

   (5).Subject(證書信息,你會發現它和Issuer裏面的內容是同樣的)

   (6).Subject's Public Key Info(證書全部人公鑰,剛纔所說的公鑰就是這個!)

   (7).Extension(擴展信息)

   (8).Certificate Signature Algorithm(公鑰加密算法)、

    以上這幾項就是上面所說的證書內容(F)。 

  2.Certificate Signature Algorithm:

    這是描述證書的加密算法,就是上所說的加密算法(A),看它的Fireld Value,通常會寫:PKCS #1 SHA-1 With RSA Encryption

  3.Certificate Signature Value:

   這記錄的是證書被加密後的結果,至關於上面說講的F'。

四.數字證書的驗證

  要回答數字證書是如何驗證的,首先要知道數字證書是要驗證些什麼東西:>,數字證書的驗證,上面已經講了一些,這作一個總結:

  1.可信性驗證/合法性驗證:這個剛纔已經說的很明白了吧:>

  2.完整性驗證:在驗證可信性的過程當中,h1和h2的比較,其實已經順便驗證其完整性了。

  3.有效性驗證:好比驗證它的Vilidity值,看是否過時...

 

五.參考資料:

1.http://baike.baidu.com/view/204415.htm

2.http://finance.sina.com.cn/money/roll/20080401/00404692291.shtml

3.http://blog.csdn.net/sfdev/archive/2008/03/12/2174305.aspx

4.http://man.chinaunix.net/develop/rfc/RFC2313.txt

5.http://www.zhlmmc.com/diary/14554

 

原文連接:http://www.cnblogs.com/SirSmith/p/4985571.html

http://www.cnblogs.com/hyddd/archive/2009/01/07/1371292.html

相關文章
相關標籤/搜索