學(xué)習(xí)文章
數(shù)字簽名
鮑勃有兩把鑰匙,一把是公鑰,一把是私鑰.
鮑勃把公鑰送給他的朋友們:帕蒂,道格,蘇珊--每人一把.
蘇珊要給鮑勃寫一封保密的信.她寫完后用鮑勃給的公鑰加密,就可以達(dá)到保密的效果.
鮑勃收信后,用私鑰解密,就可以看到信件內(nèi)容.這里要強(qiáng)調(diào)的是,只要鮑勃的私鑰不泄露,這封信就是安全的,即使落在別人手里,也無法解密.
鮑勃給蘇珊回信,決定采用"數(shù)字簽名".他寫完后先用Hash函數(shù),生成信件的摘要(digest).
然后,鮑勃用私鑰,對(duì)這個(gè)摘要加密,生成"數(shù)字簽名".
鮑勃將這個(gè)簽名,附在信件下面,一起發(fā)給蘇珊.
蘇珊收信后,取下數(shù)字簽名,用鮑勃的公鑰解密,得到信件的摘要.由此證明,這封信確實(shí)是鮑勃發(fā)出的.
蘇珊再對(duì)信件本身使用Hash函數(shù),將得到的結(jié)果,與上一步得到的摘要進(jìn)行對(duì)比.如果兩者一致,就證明這封信未被修改過.
復(fù)雜的情況出現(xiàn)了.道格想欺騙蘇珊,他偷偷使用了蘇珊的電腦,用自己的公鑰換走了鮑勃的公鑰.此時(shí),蘇珊擁有的實(shí)際是道格的公鑰,但她還以為這是鮑勃的公鑰.因此,道格可以冒充鮑勃,用自己的私鑰做成數(shù)字簽名,寫信給蘇珊,讓蘇珊用假的鮑勃的公鑰(實(shí)際上是道格的公鑰)進(jìn)行解密.
后來蘇珊感覺不對(duì)勁,發(fā)現(xiàn)她無法確定公鑰是否真的屬于鮑勃.她想到了一個(gè)辦法,要求鮑勃去找證書中心
(Certificate Authority,簡(jiǎn)稱CA),為公鑰做認(rèn)證.證書中心用自己的私鑰,對(duì)鮑勃的公鑰和一些相關(guān)信息一起加密,生成數(shù)字證書
(Digital Certificate).
鮑勃拿到數(shù)字證書后,就可以放心了.以后再給蘇珊寫信,只要在簽名的同時(shí),在附上數(shù)字證書就行了.
蘇珊收信后,用CA的公鑰解開數(shù)字證書,就可以拿到鮑勃的真實(shí)公鑰了,然后就可以證明數(shù)字簽名是否是鮑勃簽的.
下面我們看一個(gè)用數(shù)字證書的實(shí)例:HTTPS協(xié)議.這個(gè)協(xié)議主要用于網(wǎng)頁加密.
首先,客戶端向服務(wù)器發(fā)出加密請(qǐng)求.
服務(wù)器用自己的私鑰加密網(wǎng)頁后,連同本身的數(shù)字證書,一起發(fā)送給客戶端.
客戶端(瀏覽器)的"證書管理器",有"受信任的根證書頒發(fā)機(jī)構(gòu)"列表.客戶端會(huì)根據(jù)這個(gè)列表,查看解開數(shù)字證書的公鑰是否在列表之內(nèi).
如果數(shù)字證書記載的網(wǎng)址,與你正在瀏覽的網(wǎng)址不一致,就說明這張證書可能被冒用,瀏覽器會(huì)發(fā)出警告.
如果這張數(shù)字證書不是由受信任的機(jī)構(gòu)頒發(fā)的,瀏覽器會(huì)發(fā)出另一種警告.
如果數(shù)字證書是可靠的,客戶端就可以使用證書中的服務(wù)器公鑰,對(duì)信息進(jìn)行加密,然后與服務(wù)器交換加密信息.