網(wǎng)絡(luò)安全攻防:密碼技術(shù)之?dāng)?shù)字證書
數(shù)字證書(CA證書)是由可信任的第三方權(quán)威機構(gòu)(CA中心)頒發(fā)給個人或企業(yè)用戶,用來驗證身份、數(shù)據(jù)簽名、數(shù)據(jù)加密等操作。CA證書是整個公鑰基礎(chǔ)設(shè)施(PKI,Public Key Infrastructure)體系的核心,目前國內(nèi)CA中心由國家密碼管理局管理,基本上每個省都有一個CA中心,用來簽發(fā)省內(nèi)CA證書和提供相關(guān)應(yīng)用。
數(shù)字證書是一個經(jīng)證書授權(quán)中心數(shù)字簽名的包含公開密鑰擁有者信息以及公開密鑰的文件。最簡單的證書包含一個公開密鑰、名稱以及證書授權(quán)中心的數(shù)字簽名。目前,數(shù)字證書均采用X.509國際標準。數(shù)字證書的結(jié)構(gòu)包含如下信息。
版本號:書所遵循的X.509標準的版本。
序列號:唯一標識證書且由證書頒發(fā)機構(gòu)頒發(fā)的編號。
證書算法標識:證書頒發(fā)機構(gòu)用來對數(shù)字證書進行簽名的特定公鑰算法的名稱。
頒發(fā)者名稱:實際頒發(fā)該證書的證書頒發(fā)機構(gòu)的標識。
有效期:數(shù)字證書保持有效的時間段,并包含起始日期和過期日期。
使用者名稱:數(shù)字證書所有者的姓名。
使用者公鑰信息:與數(shù)字證書所有者關(guān)聯(lián)的公鑰以及與該公鑰關(guān)聯(lián)的特定公鑰算法。
頒發(fā)者唯一標識符:可以用來唯一標識數(shù)字證書頒發(fā)者的信息。
使用者唯一標識符:可以用來唯一標識數(shù)字證書所有者的信息。
擴充信息:與證書的使用和處理有關(guān)的其他信息。
證書頒發(fā)機構(gòu)的數(shù)字簽名:使用證書算法標識符字段中指定的算法以及證書頒發(fā)機構(gòu)的私鑰進行的實際數(shù)字簽名。
數(shù)字證書就是對公鑰加上認證機構(gòu)的數(shù)字簽名所構(gòu)成的。要驗證公鑰的數(shù)字簽名,需要通過某種途徑獲取認證機構(gòu)自身的合法公鑰。下面以數(shù)字簽名和散列算法的實際應(yīng)用例,來說明數(shù)字證書的基本用途。
(1)Bob有兩把鑰匙,一把是公鑰,另一把是私鑰。
(2)Bob把公鑰送給他的朋友們Craol、Alice每人一把。
(3)Alice要給Bob寫一封保密的信。她寫完后用Bob的公鑰加密,就可以達到保密的效果,如圖1所示。
圖1 Alice信件加密
(4)Bob收信后,用私鑰解密,就看到了信件內(nèi)容。這里要強調(diào)的是,只要Bob的私鑰不泄露,這封信就是安全的,即使落在別人手里,也無法解密,如圖2所示。
圖2 信件解密
(5)Bob給Alice回信,決定采用“簽名”寫完后先用散列函數(shù),生成信件的摘要(Digest),如圖3所示。
圖3 生成信件摘要
(6)然后,Bob使用私鑰,對這個摘要加密,生成“數(shù)字簽名”(Signature),如圖4所示。
圖4 生成數(shù)字簽名
(7)Bob將這個簽名,附在信件下面,一起發(fā)給Susan,如圖5所示。
圖5 附簽名信件
(8)Alice 收信后,取下數(shù)字簽名,用 Bob 的公鑰解密,得到信件的摘要。由此證明,這封信確實是Bob發(fā)出的,如圖6所示。
圖6 公鑰解密
(9)Alice再對信件本身使用散列函數(shù),將得到的結(jié)果,與上一步得到的摘要進行對比。如果兩者一致,就證明這封信未被修改過,如圖7所示。
圖7 修改驗證
(10)復(fù)雜的情況出現(xiàn)了。Craol想欺騙Alice,他偷偷使用了Susan的電腦,用自己的公鑰換走了Bob的公鑰。此時,Alice實際擁有的是Craol的公鑰,但是還以為這是Bob的公鑰。因此,Craol 就可以冒充 Bob,用自己的私鑰做成“數(shù)字簽名”寫信給 Alice,讓 Alice用假的Bob公鑰進行解密。
(11)后來,Alice感覺不對勁,發(fā)現(xiàn)自己無法確定公鑰是否真的屬于Bob。她想到了一個辦法,要求Bob去找“證書中心”(CA,Certificate Authority),為公鑰做認證。證書中心用自己的私鑰,對Bob的公鑰和一些相關(guān)信息一起加密,生成“數(shù)字證書”(Digital Certificate),如圖8所示。
圖8 生成數(shù)字證書
(12)Bob拿到數(shù)字證書以后,就可以放心了。以后再給Alice寫信,只要在簽名的同時,再附上數(shù)字證書就可以了,如圖9所示。
圖9 附證書信件
(13)Alice收信后,用CA的公鑰解開數(shù)字證書,就可以拿到Bob真實的公鑰了,然后就能證明“數(shù)字簽名”是否真的是Bob簽的,如圖10所示。
圖10 確認簽名
基于數(shù)字證書的安全認證如下。
認證是安全通信的前提,如果認證出問題,A不是和A想要聊天的人B在聊天,而是和一個C(假冒B)在聊天,則接下來所有的安全措施都是白搭。以目前常用的數(shù)字證書(Digital Certificate)認證為例。
CA(Certificate Agent)存放A、B數(shù)字證書,在數(shù)字證書里包含有各自的RSA公鑰與加密算法。
A、B各自保管自己的RSA私鑰與加密算法,RSA公鑰與私鑰類似鎖與鑰匙的關(guān)系,即RSA私鑰加密,可以用RSA公鑰解密,反過來亦是如此。
A與B安全通信認證過程如下。
(1)A向CA請求B的數(shù)字證書。
(2)CA把B的數(shù)字證書做輸入?yún)?shù),生成一個散列。
(3)CA用自己的私鑰加密散列,生成一個數(shù)字簽名(Digital Signature)
(4)CA把數(shù)字簽名附在B的數(shù)字證書之后,即B的數(shù)字證書+CA數(shù)字簽名,發(fā)送給A。
(5)A擁有CA的公鑰(預(yù)裝或離線方式獲得),可以解密CA的數(shù)字簽名(CA私鑰加密),得到散列,同時對接收到的 B 的數(shù)字證書做散列運算,也得到一個散列,如果兩個散列相等,則認為此證書安全可靠,在傳輸途中沒有被篡改,稱這個過程為數(shù)據(jù)完整性(Data Integrity)保護。
(6)A請求認證B,B用自己的私鑰加密自己的身份信息,發(fā)送給A,由于A已經(jīng)從CA處獲得B的公鑰,所以可以解密B的加密報文。既然公鑰與私鑰是一對一的關(guān)系,由于只有B自己知道私鑰,以此邏輯推斷,A通信的對象為真實的B。
(7)B認證A的過程類似。