簽名 / 驗籤
解決了網路通訊中的完整性、身份認證與抗抵賴性的問題,不能解決保密性問題
- 簽名:
- 原文m 經Hash運算得到 數字摘要h ,然後再由私鑰進行加密,得到 密文s
- 密文s是客戶端生成的,客戶端會把s和m一起發給服務端
(由於發送了原文m,所以不能保證保密性)
(如果m是在SSL保密通道中傳輸,則可以解決保密性問題)
【需要注意的是,單純的簽名/驗籤是可以保密,因爲被簽名的是經過Hash運算後的原文,不是直接在原文上簽名,所以經過驗籤是得不到原文的,但是在實際應用時是需要的原文的,所以纔會把原文和簽名一起發過去】
- 驗籤:
服務端接到m和s後,取出m做Hash運算,得到h1,然後拿s用公鑰進行解密,得到h2,最後對比h1和h2
如果相等,說明m和s都沒有被篡改過,即解決了完整性問題
如果客戶端C是用C私鑰加密,服務端S用C公鑰解開了,那C端就不能否認這件事,即解決了身份驗證與抗抵賴問題
注意:
一個簽名/驗簽過程,簽名方需要維護自己的私鑰,驗籤方需要維護對方的公鑰
而且因爲驗籤方是服務方,所以使用的私鑰/公鑰是由驗籤方提供的或是按驗籤方的要求去申請的(服務端發放數字證書)
加密 / 解密:解決了保密性問題(公鑰加密)
- 客戶端的明文m,通過公鑰進行加密運算,得到密文c,把密文c傳遞給服務端
- 服務端接收到密文c,通過對應的私鑰進行解密運算,得到原文m
如登錄網站的安全插件:實際上插件裏面有服務端的公鑰,用來加密輸入的密碼
總結:
- 簽名 / 驗籤場景:私鑰簽名,公鑰驗籤(誰都可以驗籤,不保密)
- 加密 / 解密場景:公鑰加密,私鑰解密(信息保密)
公鑰(.cer文件,base64加密的)與私鑰(.pfx文件)一一對應的,稱爲非對稱密鑰。
公鑰用來加密信息,只有對應的私鑰可以解密;
私鑰用來做簽名,只有對應的公鑰才能驗籤。
公鑰:是公開的,誰都可以拿到,用來加密(2048比特,256字節),公鑰由對方維護
私鑰:私人的,其他人拿不到,類似身份證、ID,用來做解密,誰的私鑰誰維護