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