數字信封是公鑰密碼體制在實際中的一個應用,是用加密技術來保證只有規定的特定收信人才能閱讀通訊的內容。html
在數字信封中,信息發送方採用對稱密鑰來加密信息內容,而後將此對稱密鑰用接收方的公開密鑰來加密(這部分稱數字信封)以後,將它和加密後的信息一塊兒發送給接收方,接收方先用相應的私有密鑰打開數字信封,獲得對稱密鑰,而後使用對稱密鑰解開加密信息。這種技術的安全性至關高。數字信封主要包括數字信封打包和數字信封拆解,數字信封打包是使用對方的公鑰將加密密鑰進行加密的過程,只有對方的私鑰才能將加密後的數據(通訊密鑰)還原;數字信封拆解是使用私鑰將加密過的數據解密的過程。算法
對稱加密和非對稱加密各有千秋。對稱加密實現簡單,加解密速度快,非對稱加密算法牢固,容易實現數字簽名,可是加解密速度稍慢,因此通常狀況下,將對稱加密和非對稱加密結合起來應用,就能夠達到良好的加密效果。典型的應用之一就是電子信封。安全
一、咱們先引入幾個符號和一個概念函數
M 明文信息 C 密文信息 E 加密算法 D 解密算法 Ke 公鑰 Kd 私鑰加密
H 散列串 SIGN 簽名htm
而後再介紹一個叫作MD(message digest)消息摘要的東西blog
消息摘要就是經過單向散列函數(Hash函數)將信息運算爲一個固定長度的散列串,無論你的文件長度是多少,通過hash函數的運算生成的散列串的長度必定是固定的大小,好比著名的md5,生成的就是128位的串。圖片
消息摘要有什麼用呢,它能夠實現對文件的簽名,因爲不一樣的文件hash後獲得的散列串是不同的,因此能夠用來判斷文件是否被改動,好比病毒修改了某個文件,這個文件的大小雖然沒有變,可是hash函數計算出來的散列串確定是不同的。md5
二、對數據進行加密,而後發送get
第一步,先用設備生成一個對稱密鑰,而後將這個密鑰用B的公鑰Ke進行加密,生成密鑰包Ek。
第二步,對文件用hash函數計算出H=hash(M).而後再加上時間戳t,使用B的公鑰ke進行加密,生成簽名SIGN。這裏加上時間戳的目的是爲了防止重放攻擊,就是若是竊聽方對竊聽到的信息進行了重放,可是時間不對,咱們就能夠覺察到信息傳送是否出現了問題。
第三步、將數字簽名SIGN和文件用對稱密鑰進行加密,生成密文數據C。
最後,將第一步產生的密鑰包Ek和密文C發送給B。
三、解密的過程
第一步,B用本身的私鑰Kd解密收到的密鑰包Ek,獲得A使用的對稱加密密鑰。
第二步,用對稱密鑰對收到的密文C進行解密。
第三步,用hash函數計算文件的散列串,獲得H1。
第四步,用私鑰解密簽名SIGN,獲得H和時間戳。
最後,用H和H1對比,若是二者相等,則說明文件在傳遞的過程當中沒有被更改,若是時間戳標記的也正確的話,那麼這次信息安全傳遞完成。
5、實現不可抵賴的數字簽名
一、A用它本身的私鑰加密信息M獲得C1,而後用B的公鑰加密信息C2,發送給B。
二、B收到信息後,用它的私鑰解密,獲得C2這樣實現了第一個功能,就是確保信息只能被B正確解讀,由於別人沒有B的私鑰,因此只有B能解密該信息。
三、獲得C2後,再用A的公鑰解密,獲得明文信息M。這裏實現了數字簽名的第二個功能,由於只有使用A的公鑰才能解密這個信息(C1是使用A的私鑰加密 的),這樣就保證了A的不可抵賴,就是說,這個信息必定是A發出的。由於用A的公鑰對信息成功的進行了解密。
因此,使用非對稱算法,能夠成功的實現數字簽名。對成算法和非對稱算法結合起來應用,就能夠實現文件的安全傳遞。