谈谈数字签名
數(shù)字簽名是什么
相信大家不會(huì)陌生,日常我們和公司簽合同時(shí)會(huì)簽名,刷信用卡支付時(shí)會(huì)簽名;而數(shù)字簽名就是將日常中這種簽名功能在計(jì)算機(jī)中實(shí)現(xiàn)的一種技術(shù);數(shù)字簽名不僅能夠識(shí)別篡改和偽裝,還能防止否認(rèn)等特性,那么數(shù)字簽名是如何做到的呢?
##簽名生成與校驗(yàn)
生成簽名:一般是發(fā)送者對(duì)發(fā)送的消息進(jìn)行簽名,以表示我認(rèn)可該消息
驗(yàn)證簽名:接受者對(duì)發(fā)送者發(fā)送的簽名進(jìn)行驗(yàn)證,已確定該簽名是否是發(fā)送者簽署的,如果驗(yàn)簽失敗表示該簽名不是發(fā)送者的或者發(fā)送的消息被人篡改了
無論是生成簽名還是驗(yàn)證簽名都需要密鑰來完成;生成簽名需要簽名密鑰來,驗(yàn)證簽名動(dòng)作需要驗(yàn)簽密鑰來完成,簽名密鑰只有簽名者才能有,驗(yàn)證密鑰則是任何驗(yàn)證簽名的人都可以擁有;只有簽名密鑰才能生成簽名,只有驗(yàn)證密鑰才能驗(yàn)簽;
上面說的是不是有點(diǎn)和公鑰密鑰算法類似?對(duì),確實(shí)有很大關(guān)系,其實(shí)數(shù)字簽名是將公鑰密碼算法反過來使用,我們先來簡(jiǎn)要回顧下公鑰密碼算法
- 公鑰加密后的密文只能用與公鑰相匹配的私鑰進(jìn)行解密
- 公鑰顧名思義可以被公開
- 私鑰只能被需要解密方所擁有,只要私鑰不泄漏,竊取者即使攔截到密文和公鑰也無法破解到明文
- 公鑰密碼解決了對(duì)稱密碼密鑰配送的問題
##數(shù)字簽名
###對(duì)消息進(jìn)行簽名
假如lin向四縱發(fā)"死守塔山"這條命令,其流程如下:
其實(shí)在實(shí)際生活中,我們考慮到消息有時(shí)很大,通常不直接對(duì)消息原文進(jìn)行加簽,而是先對(duì)消息原文進(jìn)行單向序列化以生成一個(gè)消息摘要(可以理解為消息的指紋),我們對(duì)該消息摘要進(jìn)行加簽,這樣就大大提高加簽速度了,其他的和上面圖一樣,具體見下圖就不解釋了
###對(duì)消息摘要進(jìn)行加簽
##對(duì)簽名的一些疑問
問題1:簽名在計(jì)算機(jī)中只是一段字符串,那么簽名不就可以復(fù)制了?如果我把簽名放到別的消息中,是不是可以偽裝呢?
確實(shí)在計(jì)算機(jī)中簽名就是一段很短的字符串,可以復(fù)制,但是簽名本身代表的我認(rèn)可這條消息含義是無法改變的
如果把簽名放到別的消息中,接受方在驗(yàn)簽時(shí)會(huì)失敗
問題2 上述圖中消息在網(wǎng)絡(luò)傳輸時(shí)是明文傳輸?shù)?#xff0c;簽名不就不能保證數(shù)據(jù)的安全性?
簽名并不是為了保證數(shù)據(jù)安全性,它只是表示我對(duì)該消息認(rèn)可的憑證
問題3上述圖中公鑰是通過網(wǎng)絡(luò)傳輸?shù)?#xff0c;那么接收方不就有可能收到的公鑰其實(shí)不是發(fā)送方?
對(duì),在網(wǎng)絡(luò)過程中數(shù)據(jù)都有可能被中間人攔截,并篡改;如何保證公鑰的合法性就需要用到數(shù)字證書了
總結(jié)
- 上一篇: Android Lifecycle源码解
- 下一篇: PresentViewControlle