既然非對(duì)稱加密如此強(qiáng)大(為什么非對(duì)稱加密難以破解?),那在安全上還有沒(méi)有邏輯漏洞呢?
非對(duì)稱加密的實(shí)現(xiàn)過(guò)程如下:接收方生成一對(duì)公鑰和私鑰,將公鑰交付發(fā)送方,發(fā)送方用該公鑰對(duì)明文進(jìn)行加密,然后密文發(fā)送給接收方,接收方用自己的私鑰解密。這個(gè)過(guò)程對(duì)(加密的)數(shù)據(jù)幾乎是萬(wàn)無(wú)一失的,但是它沒(méi)有辦法驗(yàn)證發(fā)送方的身份(公鑰可以隨意分發(fā)),也難以確保信息的完整性,于是有了“數(shù)字簽名”。
數(shù)字簽名是為了證明信息是自己發(fā)的,一可防止別人冒用本人身份,二可防抵賴。比如在金融場(chǎng)景中,我們?cè)诰W(wǎng)銀轉(zhuǎn)賬,站在銀行的角度,為了防止賬號(hào)被盜刷,它必須有機(jī)制讓轉(zhuǎn)賬者不可抵賴。
數(shù)字簽名有兩部分:(1)證明這信息是你發(fā)的;(2)證明信息內(nèi)容是完整的,沒(méi)有替換、新增、缺失。
要做到第一點(diǎn),只需附上一段經(jīng)你的私鑰加密的信息(比如消息文摘),當(dāng)所有人用你的公鑰解密,這一段文摘與原文相符,即說(shuō)明消息確是你本人發(fā)送,因?yàn)槠渌瞬豢赡苣玫侥愕乃借€。
第二點(diǎn)則需要把原文做一次哈希,然后用你的私鑰加密這段哈希作為簽名,隨同密文一起發(fā)送。接收者使用你的公鑰解密簽名,與原文相符,就證明內(nèi)容是完整的。
但是這樣依然存在公鑰被替換的可能,所以又有了公鑰證書(shū)體制:數(shù)字證書(shū)。CA中心(Certificate Authority)用自己的私鑰,對(duì)信息發(fā)送者的公鑰和相關(guān)信息一起加密,生成"數(shù)字證書(shū)"(Digital Certificate)。
來(lái)一個(gè)簡(jiǎn)單的總結(jié):