公鑰密碼系統(tǒng)是本文的理解基礎(chǔ)革为。
本文不對(duì)公鑰密碼系統(tǒng)做過多描述。若對(duì)公鑰密碼不熟悉舵鳞,可以參考閱讀維基百科-公開密鑰加密
1.信息安全三要素
信息安全中有三個(gè)需要解決的問題:
- 保密性(Confidentiality):信息在傳輸時(shí)不被泄露
- 完整性(Integrity):信息在傳輸時(shí)不被篡改
- 有效性(Availability):信息的使用者是合法的
這三要素統(tǒng)稱為CIA Triad震檩。
公鑰密碼解決保密性問題
數(shù)字簽名解決完整性問題和有效性問題
2.數(shù)字簽名
現(xiàn)實(shí)生活中,簽名有什么作用蜓堕?在一封信中抛虏,文末的簽名是為了表示這封信是簽名者寫的。計(jì)算機(jī)中套才,數(shù)字簽名也是相同的含義:證明消息是某個(gè)特定的人迂猴,而不是隨隨便便一個(gè)人發(fā)送的(有效性);除此之外背伴,數(shù)字簽名還能證明消息沒有被篡改(完整性)沸毁。
簡(jiǎn)單來說峰髓,數(shù)字簽名(digital signature)是公鑰密碼的逆應(yīng)用:用私鑰加密消息,用公鑰解密消息息尺。
用私鑰加密的消息稱為簽名携兵,只有擁有私鑰的用戶可以生成簽名。
用公鑰解密簽名這一步稱為驗(yàn)證簽名搂誉,所有用戶都可以驗(yàn)證簽名(因?yàn)楣€是公開的)
一旦簽名驗(yàn)證成功徐紧,根據(jù)公私鑰數(shù)學(xué)上的對(duì)應(yīng)關(guān)系,就可以知道該消息是唯一擁有私鑰的用戶發(fā)送的炭懊,而不是隨便一個(gè)用戶發(fā)送的并级。
由于私鑰是唯一的,因此數(shù)字簽名可以保證發(fā)送者事后不能抵賴對(duì)報(bào)文的簽名凛虽。由此死遭,消息的接收者可以通過數(shù)字簽名,使第三方確信簽名人的身份及發(fā)出消息的事實(shí)凯旋。當(dāng)雙方就消息發(fā)出與否及其內(nèi)容出現(xiàn)爭(zhēng)論時(shí)呀潭,數(shù)字簽名就可成為一個(gè)有力的證據(jù)。
生成簽名
一般來說至非,不直接對(duì)消息進(jìn)行簽名钠署,而是對(duì)消息的哈希值進(jìn)行簽名,步驟如下荒椭。
- 對(duì)消息進(jìn)行哈希計(jì)算谐鼎,得到哈希值
- 利用私鑰對(duì)哈希值進(jìn)行加密,生成簽名
- 將簽名附加在消息后面趣惠,一起發(fā)送過去
驗(yàn)證簽名
- 收到消息后狸棍,提取消息中的簽名
- 用公鑰對(duì)簽名進(jìn)行解密,得到哈希值1味悄。
- 對(duì)消息中的正文進(jìn)行哈希計(jì)算草戈,得到哈希值2。
- 比較哈希值1和哈希值2侍瑟,如果相同唐片,則驗(yàn)證成功。
3.證書
證書實(shí)際上就是對(duì)公鑰進(jìn)行數(shù)字簽名涨颜,它是對(duì)公鑰合法性提供證明的技術(shù)费韭。
考慮這樣一種場(chǎng)景:我們對(duì)簽名進(jìn)行驗(yàn)證時(shí),需要用到公鑰庭瑰。如果公鑰也是偽造的星持,那怎么辦?如果公鑰是假的弹灭,驗(yàn)證數(shù)字簽名那就無從談起钉汗,根本不可能從數(shù)字簽名確定對(duì)方的合法性羹令。
這時(shí)候證書就派上用場(chǎng)了。
證書一般包含:公鑰(記住證書中是帶有公鑰的)损痰,公鑰的數(shù)字簽名福侈,公鑰擁有者的信息
若證書驗(yàn)證成功,這表示該公鑰是合法卢未,可信的肪凛。
接下來又有問題了:驗(yàn)證證書中的數(shù)字簽名需要另一個(gè)公鑰,那么這個(gè)公鑰的合法性又該如何保證辽社?該問題可以無限循環(huán)下去伟墙,豈不是到不了頭了?這已經(jīng)是個(gè)社會(huì)學(xué)問題了滴铅。我們?yōu)槭裁窗彦X存進(jìn)銀行戳葵?因?yàn)槲覀兿嘈陪y行,它是一個(gè)可信的機(jī)構(gòu)(雖然也有破產(chǎn)的風(fēng)險(xiǎn))汉匙。跟銀行一樣拱烁,我們需要一個(gè)可信的機(jī)構(gòu)來頒發(fā)證書和提供公鑰,只要是它提供的公鑰噩翠,我們就相信是合法的戏自。
這種機(jī)構(gòu)稱為認(rèn)證機(jī)構(gòu)(Certification Authority, CA)伤锚。CA就是能夠認(rèn)定”公鑰確實(shí)屬于此人”擅笔,并能生成公鑰的數(shù)字簽名的組織或機(jī)構(gòu)。CA有國(guó)際性組織和政府設(shè)立的組織屯援,也有通過提供認(rèn)證服務(wù)來盈利的組織猛们。
如何生成證書?
- 服務(wù)器將公鑰A給CA(公鑰是服務(wù)器的)
- CA用自己的私鑰B給公鑰A加密狞洋,生成數(shù)字簽名A
- CA把公鑰A弯淘,數(shù)字簽名A,附加一些服務(wù)器信息整合在一起徘铝,生成證書耳胎,發(fā)回給服務(wù)器惯吕。
注:私鑰B是用于加密公鑰A的惕它,私鑰B和公鑰A并不是配對(duì)的。
如何驗(yàn)證證書废登?
- 客戶端得到證書
- 客戶端得到證書的公鑰B(通過CA或其它途徑)
- 客戶端用公鑰B對(duì)證書中的數(shù)字簽名解密淹魄,得到哈希值
- 客戶端對(duì)公鑰進(jìn)行哈希值計(jì)算
- 兩個(gè)哈希值對(duì)比,如果相同堡距,則證書合法甲锡。
注:公鑰B和上述的私鑰B是配對(duì)的兆蕉,分別用于對(duì)證書的驗(yàn)證(解密)和生成(加密)。
證書作廢
當(dāng)用戶私鑰丟失缤沦、被盜時(shí)虎韵,認(rèn)證機(jī)構(gòu)需要對(duì)證書進(jìn)行作廢(revoke)。要作廢證書缸废,認(rèn)證機(jī)構(gòu)需要制作一張證書作廢清單(Certificate Revocation List)包蓝,簡(jiǎn)稱CRL
假設(shè)我們有Bob的證書,該證書有合法的認(rèn)證機(jī)構(gòu)簽名企量,而且在有效期內(nèi)测萎,但僅憑這些還不能說明該證書一定有效,還需要查詢認(rèn)證機(jī)構(gòu)最新的CRL届巩,并確認(rèn)該證書是否有效硅瞧。
使用場(chǎng)景
下面用兩個(gè)使用場(chǎng)景來幫助大家理解證書的作用。
客戶端在發(fā)送或接收消息之前恕汇,要驗(yàn)證服務(wù)器的合法性(這個(gè)服務(wù)器是真實(shí)的服務(wù)器腕唧,還是偽造者,我們不知道)
場(chǎng)景1
- 服務(wù)器生成公鑰和私鑰密碼對(duì)
- 服務(wù)器把公鑰給CA拇勃。CA生成證書四苇,發(fā)送給客戶端
- 客戶端驗(yàn)證證書,取得公鑰:此刻證明公鑰是合法的
- 客戶端用公鑰加密消息方咆,發(fā)送給服務(wù)器
- 服務(wù)器用私鑰解密消息(消息加密發(fā)送月腋,具有保密性)
場(chǎng)景2
- 服務(wù)器生成公鑰和私鑰密碼對(duì)
- 服務(wù)器生成消息,用私鑰對(duì)消息進(jìn)行數(shù)字簽名
- 服務(wù)器把公鑰給CA瓣赂。CA生成證書
- 服務(wù)器將消息榆骚,數(shù)字簽名,證書一起發(fā)送給客戶端
- 客戶端驗(yàn)證證書煌集,取得公鑰:此刻證明公鑰是合法的
- 客戶端用公鑰驗(yàn)證數(shù)字簽名妓肢,檢查消息的完整性和服務(wù)器的合法性