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