散列函数和数字签名概念
一、散列函數
??也稱為哈希函數,消息摘要函數,單向函數或雜湊函數。
1. 作用:
??不是完成數據加密和解密的工作,而是用來驗證數據的完整性的技術。
?如下圖,通過對消息進行散列,然后把消息和散列值hashA一起發送出去,當接受者收到消息和散列值后,先對消息進行散列,如果散列值hashB和接收到的hashA相同,說明數據沒有被更改過,從而保證數據的完整性。
2.特性:
- 消息的長度不受限制
- 確定性:對于相同的輸入(根據同一函數),它必須始終生成相同的散列值,如果兩個散列值是不相同的,那么這兩個散列值的原始輸入也是不相同的, 但是對于不同的輸入可能會散列成相同的輸出(哈希碰撞),所以不可能從散列值來確定唯一的輸入值。
- 均勻性:良好的散列函數應該輸入盡可能均勻的映射到輸出范圍上。
- 單向性:在加密應用程序中,通常期望散列函數實際上是不可逆的。
3.散列函數常用算法有
MD-消息摘要算法 SHA-安全散列算法MAC-消息認證碼算法。不過現在MD已經被證實存在哈希碰撞(不同的數據存在相同的MD算法后相同),所以常用SHA算法。
二、加密體制
1.對稱加密
?? 加密和解密的密鑰一樣,比如用123加密就是用123解密,但是實際中密碼都是普通數據在互聯網傳輸的,這樣一點密碼被中間人截取并破解,加密直接被攻破
2.非對稱加密
?? 把密鑰分為公鑰和私鑰,公鑰是公開的所有人都可以認領,私鑰是保密的只有一個人知道。假設A要發送一封Email給B,他不想讓任何其他人在傳輸中看到Email的內容,做法就是使用B的公鑰對Email加密,只有B的私鑰能夠解密(B的私鑰唯一性保證信件不會泄露)
三、數字簽名
??前面已經介紹了通過散列函數可以確保數據內容的完整性,但這還遠遠不夠。此外,還需要確保數據來源的可認證性(身份識別)和數據發送行為的不可否認性(防止抵賴行為)。
數字簽名是散列函數和非對稱加密的結合。
1.特性
??即完整性、可認證性和不可否認性。這些正是數字簽名的主要特征。
2.過程
?問題:
??使用非對稱加密 對文件本身加密可能是個耗時過程,比如這封Email足夠大,那么私鑰加密整個文件以及拿到文件后的解密無疑是巨大的開銷。
?數字簽名可以解決這個問題:
1.A先對這封Email執行哈希運算得到hash值簡稱“摘要”,取名hashA
2.然后用自己私鑰對摘要加密,生成的東西叫“數字簽名”
3.把數字簽名加在Email正文后面,一起發送給B
(當然,為了防止郵件被竊聽你可以用繼續公鑰加密,這個不屬于數字簽名范疇)
4.B收到郵件后用A的公鑰對數字簽名解密,成功則代表Email確實來自A,失敗說明有人冒充
5.B對郵件正文執行哈希運算得到hash值,取名hashB
6.B 會對比第4步數字簽名的hash值hashA和自己運算得到的hashB,一致則說明郵件未被篡改。
注意點:只能把私鑰用來簽名,公鑰用來認證。 所以只能由擁有私鑰的人發送給公鑰的,反之不安全。也稱為單向認證。
如圖所示:
數字簽名滿足了以下的要求:
??完整性:當使用公鑰解密后的消息與消息原文相同,則說明消息是完整的,否則消息不完整
??不可否認性和可認證性:當消息原文和加密后的消息密文一起被 A 發送給 接收方B 后,接收方B 可以確信信息確實是發送方A 發送的,同時 發送方A 也不能否認發送過該信息,因為除了 A 本人之外,其他任何人都無法由消息原文產生正確的消息密文。
3.常用數字簽名算法
??RSA算法,DSA算法。
參考:
https://www.jianshu.com/p/4932cb1499bf
https://www.cnblogs.com/liyutian/p/9525173.html
《Java加密與解密的藝術》
總結
以上是生活随笔為你收集整理的散列函数和数字签名概念的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Chrome密码导入
- 下一篇: hihoCoder挑战赛16 王胖浩与三