公鑰密碼和數(shù)字簽名
在目前網(wǎng)絡(luò)通信的過(guò)程中,有兩種加密方法被廣泛使用:公鑰加密 和 數(shù)字簽名;本文將對(duì)這兩種方法進(jìn)行分析和對(duì)比;
定義
公鑰密碼:也就是和我們常說(shuō)的非對(duì)稱(chēng)加密,分為加密和解密,消息發(fā)送者使用公鑰加密,消息傳輸過(guò)程中以密文傳輸,接受者收到消息之后,用私鑰進(jìn)行解密,就可以拿到消息內(nèi)容;
數(shù)字簽名:分為簽名和驗(yàn)簽;消息發(fā)送者使用私鑰進(jìn)行簽名,消息傳輸過(guò)程中同樣以密文傳輸,但是出來(lái)密文之外,還會(huì)發(fā)送一份消息的明文給接收方,以便接收方進(jìn)行驗(yàn)簽,接收方收到明文和密文之后,會(huì)用公鑰進(jìn)行解密,得到明文,然后對(duì)比解密后的結(jié)果和接收到的明文,一致則驗(yàn)簽成功,不一致則證明消息被中途篡改過(guò);
在公鑰加密和數(shù)字簽名過(guò)程中,都涉及到一個(gè)共同的東西---秘鑰對(duì)(公鑰和私鑰);但是在使用過(guò)程中卻又有一些區(qū)別:具體如下:
| 公鑰密碼 | 數(shù)字簽名 | |
|---|---|---|
| 公鑰 | 發(fā)送者加密使用 | 接受者驗(yàn)簽使用 |
| 私鑰 | 接受者解密使用 | 發(fā)送者簽名使用 |
| 公鑰持有者 | 加密個(gè)人持有 | 需要驗(yàn)證簽名的任何人都可以持有 |
| 私鑰持有者 | 解密個(gè)人持有 | 簽名人持有 |
| 傳送內(nèi)容 | 密文 | 密文 + 明文 |
過(guò)程和特點(diǎn)
過(guò)程
公鑰密碼使用過(guò)程如下:

數(shù)字簽名使用過(guò)程如下:

特點(diǎn)
公鑰密碼:公鑰發(fā)送消息的人持有,私鑰接收消息的人持有,均為私人持有;只要保證秘鑰安全,就可以保證通信安全;
數(shù)字簽名:公鑰接受消息的人持有,所有人均可持有,私鑰發(fā)送消息的人持有,私人持有;保證私鑰安全就可保證簽名的準(zhǔn)確性;
應(yīng)用場(chǎng)景
公鑰密碼
適用于:消息需要秘密傳輸;
案例:SSL層中,對(duì)稱(chēng)秘鑰的傳輸就是應(yīng)用了非對(duì)稱(chēng)加密進(jìn)行傳輸;
數(shù)字簽名
適用于:消息本身可以對(duì)外公開(kāi),但是需要驗(yàn)證發(fā)送方身份的消息;
案例:蘋(píng)果手機(jī)驗(yàn)證APP是否為指定開(kāi)發(fā)者開(kāi)發(fā);
一些問(wèn)題:
1.公鑰密碼和數(shù)字簽名看似是相反的流程,可不可以公私秘鑰互換,在公鑰密碼過(guò)程中用私鑰加密、公鑰解密;在數(shù)字簽名過(guò)程中用公鑰簽名、私鑰驗(yàn)簽;
答案是不一定的,應(yīng)為在日常過(guò)程中,大多采用的非對(duì)稱(chēng)加密算法為RSA,而在RSA算法中,兩個(gè)過(guò)程是可逆的,但是并不是所有非對(duì)稱(chēng)加密算法都是可逆的。所以,嚴(yán)格來(lái)說(shuō),這個(gè)過(guò)程是不可以的;
2.在公鑰密碼和數(shù)字簽名的過(guò)程中,都會(huì)有一步發(fā)送秘鑰的過(guò)程,那么在這一步有中間人將秘鑰替換也是存在風(fēng)險(xiǎn)的;
這個(gè)是肯定的,對(duì)于這種中間人攻擊,就不在數(shù)字簽名和公鑰密碼的解決范圍之內(nèi)了,這個(gè)請(qǐng)參照數(shù)字證書(shū)及證書(shū)鏈的驗(yàn)證
3.公鑰密碼比較好理解,但是為什么私鑰加密就可以作為簽名?
在數(shù)字簽名特點(diǎn)中,有一個(gè)是私鑰只有發(fā)送者持有,正是因?yàn)檫@一特點(diǎn),再加上公私秘鑰的一個(gè)特點(diǎn):“沒(méi)有該私鑰的人是不能生成對(duì)應(yīng)公鑰可以解開(kāi)的密文的”,就有一個(gè)結(jié)論:持有公鑰的人能解開(kāi)的密文,就是該可信機(jī)構(gòu)或人發(fā)出的消息;而私鑰和私鑰加密的信息就相當(dāng)于該機(jī)構(gòu)或人的簽名;
4.數(shù)字簽名中,單項(xiàng)散列的作用?
消息體有可能為比較大的數(shù)據(jù),而非對(duì)稱(chēng)加密的過(guò)程又是比較消耗性能,故在為防止對(duì)數(shù)據(jù)比較大的消息簽名是消耗時(shí)間相對(duì)比較長(zhǎng),對(duì)消息進(jìn)行了單向散列的操作,散列過(guò)后為固定長(zhǎng)度字符串,簽名速度相對(duì)來(lái)說(shuō)要快很多;