哈工大計(jì)算機(jī)網(wǎng)絡(luò)課程網(wǎng)絡(luò)安全基本原理詳解之:消息完整性與數(shù)字簽名
這一小節(jié),我們繼續(xù)介紹網(wǎng)絡(luò)完全中的另一個(gè)重要內(nèi)容,就是消息完整性,也為后面的數(shù)字簽名打下基礎(chǔ)。
報(bào)文完整性
首先來看一下什么是報(bào)文完整性。
報(bào)文完整性,也稱為消息完整性(message integrity),有時(shí)也稱為報(bào)文/消息認(rèn)證(或報(bào)文鑒別),目標(biāo):
-
證明報(bào)文確實(shí)來自聲稱的發(fā)送方
比如接收端在收到報(bào)文時(shí)能夠確認(rèn),報(bào)文是由指定發(fā)送方發(fā)送的。這一過程也是與我們上一節(jié)中介紹的身份認(rèn)證相關(guān)的。
-
驗(yàn)證報(bào)文在傳輸過程中沒有被篡改。
-
預(yù)防報(bào)文的時(shí)間、順序被篡改。
-
預(yù)防報(bào)文持有期被修改。
比如Bob給Alice發(fā)報(bào)文,還應(yīng)該預(yù)防Alice在持有報(bào)文時(shí),有意或無意修改報(bào)文。
-
預(yù)防報(bào)文在發(fā)送/接收時(shí)對(duì)報(bào)文本身的抵賴
- 發(fā)送方否認(rèn)。比如發(fā)送方否認(rèn)發(fā)送過這個(gè)報(bào)文,或否認(rèn)發(fā)送報(bào)文的內(nèi)容。
- 接收方否認(rèn)。比如接收方否認(rèn)收到過這個(gè)報(bào)文,或否認(rèn)接收?qǐng)?bào)文的內(nèi)容。
密碼散列函數(shù)
在解決報(bào)文完整性的問題中,需要使用到一個(gè)非常重要的概念,就是密碼散列函數(shù)。
密碼散列函數(shù)(Cryptographic Hash Function):H(m)。
用H(m)來表示利用密碼散列函數(shù)對(duì)報(bào)文m進(jìn)行的散列運(yùn)算。
作為密碼散列函數(shù),與我們一般性的散列函數(shù),具有以下一些特征:
-
散列算法公開
-
H(m)能夠快速計(jì)算
-
對(duì)任意長度報(bào)文進(jìn)行多對(duì)一映射,均產(chǎn)生定長輸出
-
對(duì)于任意報(bào)文無法預(yù)知其散列值
-
不同報(bào)文不能產(chǎn)生相同的散列值
-
單向性:無法根據(jù)散列值倒推出報(bào)文
- 即對(duì)于給定散列值h,無法計(jì)算找到滿足h=H(m)的報(bào)文m
-
抗弱碰撞性(Weak Collision Resistence-WCR)
- 對(duì)于給定報(bào)文x,計(jì)算上不可能找到y(tǒng)且y不等于x,使用H(x) = H(y)
-
抗強(qiáng)碰撞性(Strong Collision Resistence-SCR)
- 在計(jì)算中,不可能找到任意兩個(gè)不同報(bào)文x和y(x≠y),使得H(x) = H(y)。
密碼散列函數(shù)對(duì)報(bào)文完整性的校驗(yàn)是至關(guān)重要的。
作為與一般性的散列函數(shù)的對(duì)比,我們來看一個(gè)例子。
在之前講解IP協(xié)議中,會(huì)有一個(gè)16比特的checksum校驗(yàn)和來在接收端判斷數(shù)據(jù)報(bào)是否有修改。在這種校驗(yàn)和的計(jì)算中,其實(shí)也具備散列函數(shù)的某些屬性:
- 多對(duì)一映射
- 對(duì)于任意報(bào)文,產(chǎn)生固定長度的散列值(16-bit校驗(yàn)和)
但是它并不能作為密碼散列函數(shù),因?yàn)閷?duì)于給定的報(bào)文及其散列值,很容易找到另一個(gè)具有相同散列值的不同報(bào)文。比如下面這個(gè)例子:
散列函數(shù)算法
通過上面的介紹可以看出,密碼散列函數(shù)的要求是比較嚴(yán)格的,需要經(jīng)過精心設(shè)計(jì)。目前,在網(wǎng)絡(luò)安全領(lǐng)域,使用的比較常見的有以下兩個(gè)函數(shù):
- MD5:被廣泛應(yīng)用的散列函數(shù)(RFC 1321)
- 通過4個(gè)步驟,對(duì)任意長度的報(bào)文輸入,計(jì)算輸出128位的散列值。
- MD5不是足夠安全。在1996年,Dobbertin找到了兩個(gè)不同的512-bit塊,在MD5計(jì)算下產(chǎn)生了相同的散列值。
- SHA-1(Secure Hash Algorithm)
- 另一個(gè)相對(duì)更安全的散列函數(shù)
- US標(biāo)準(zhǔn)
- SHA-1要求輸入消息長度<264
- SHA-1的散列值為160位
- 速度慢于MD5,安全性優(yōu)于MD5
報(bào)文摘要
報(bào)文摘要實(shí)際上是利用上面的密碼散列函數(shù),作用于某一任意長度的報(bào)文m,得到一個(gè)固定長度的散列值,通常把這個(gè)散列值稱為報(bào)文摘要(message digest),記為H(m)。
這個(gè)報(bào)文摘要對(duì)原報(bào)文來說,是具有非常重要的意義的。重要的意義在于,報(bào)文摘要可以作為報(bào)文m的數(shù)字指紋(fingerprint)。
報(bào)文認(rèn)證
有了上面的基礎(chǔ)概念后,接下來我們就著重討論下如何實(shí)現(xiàn)報(bào)文完整性的認(rèn)證。
簡單方案
簡單方案:報(bào)文+報(bào)文摘要—>擴(kuò)展報(bào)文(m, H(M))
上述簡單方案利用了密碼散列函數(shù)和報(bào)文摘要來實(shí)現(xiàn)。實(shí)際上,就是在給對(duì)方發(fā)送報(bào)文時(shí),利用密碼散列函數(shù)根據(jù)該報(bào)文內(nèi)容,計(jì)算出一個(gè)報(bào)文摘要。此時(shí),發(fā)送的報(bào)文內(nèi)容除了其本身原有內(nèi)容外,還包含一個(gè)報(bào)文摘要。兩者構(gòu)造出一個(gè)擴(kuò)展報(bào)文,發(fā)送給對(duì)方。
接收方在收到該擴(kuò)展報(bào)文后,根據(jù)同樣的密碼散列函數(shù),根據(jù)報(bào)文內(nèi)容計(jì)算得到一個(gè)散列值,然后跟報(bào)文摘要進(jìn)行比對(duì)。如果一致,說明報(bào)文在傳輸過程中沒有被修改,如果不一致,則說明已經(jīng)被修改。
整體的大致過程如下所示:
為了在報(bào)文認(rèn)證中,除了確保報(bào)文在傳輸過程中沒有發(fā)生過改變外,還要認(rèn)證報(bào)文的發(fā)送方確實(shí)是指定的真實(shí)發(fā)送方,而不是第三方入侵者或偽造的(身份認(rèn)證),還需要對(duì)上述方案進(jìn)行改進(jìn)。
報(bào)文認(rèn)證碼MAC
報(bào)文認(rèn)證碼MAC:(Message Authentication Code)
實(shí)現(xiàn)原理:
- 引入了一個(gè)報(bào)文認(rèn)證密碼的概念
- 此時(shí),一個(gè)擴(kuò)展報(bào)文(m, H(m+s))包括了:原始報(bào)文m + 認(rèn)證密鑰s + 密碼散列函數(shù)H
在使用這種方案下,報(bào)文認(rèn)證過程大致如下所示:
- 發(fā)送端在發(fā)送報(bào)文中,利用密碼散列函數(shù)H,對(duì)原始報(bào)文內(nèi)容m和認(rèn)證密碼s(一般就是一個(gè)字符串或比特串)一起共同生成一個(gè)報(bào)文摘要H(m+s)。
- 該報(bào)文摘要與原始報(bào)文一起構(gòu)成一個(gè)擴(kuò)展報(bào)文(m ,H(m,s))
- 接收端收到該報(bào)文后,分離出原始報(bào)文和報(bào)文摘要兩部分。
- 對(duì)于原始報(bào)文,利用相同的密碼散列函數(shù)和認(rèn)證密鑰s,得到一個(gè)散列值H(m,s)
- 同樣的,將該散列值與報(bào)文摘要的值比對(duì),如果匹配,則報(bào)文完整性成功認(rèn)證。否則,認(rèn)證失敗。
這里為什么就能夠確認(rèn)報(bào)文是來自指定的真實(shí)發(fā)送方,而不是偽造或第三方入侵者呢?因?yàn)?,這里引入了密鑰的概念,而這對(duì)密鑰只有發(fā)送方和接收方所持有。由于密碼散列函數(shù)的特殊性,只有該密鑰才能生成相應(yīng)的報(bào)文摘要,從而保證了報(bào)文認(rèn)證的可靠性。
報(bào)文驗(yàn)證碼MAC在一定程度上解決了報(bào)文完整性校驗(yàn)和身份認(rèn)證問題,但是報(bào)文完整性里涉及的其他問題,還很難解決。比如,接收端在持有報(bào)文時(shí),由于它有密碼s,因此,它可以任意構(gòu)造一個(gè)報(bào)文內(nèi)容m’,并利用該密鑰s生成相應(yīng)的報(bào)文摘要,然后偽造說這是發(fā)送方發(fā)送的報(bào)文。這里的問題,就涉及到我們開篇報(bào)文完整性要求中說的,預(yù)防報(bào)文持有期被修改和預(yù)防抵賴。
為了解決這些問題,就需要引入我們接下來介紹的數(shù)字簽名概念。
數(shù)字簽名
上面我們最后說到,作為報(bào)文驗(yàn)證碼MAC實(shí)際上有一些其他的報(bào)文完整性問題還未解決。比如,涉及到下面這些問題。
Q:如何解決下列與報(bào)文完整性相關(guān)的問題?
- 否認(rèn):發(fā)送方不承認(rèn)自己發(fā)送過某一報(bào)文。
- 偽造:接收方自己偽造一份報(bào)文,并聲稱來自發(fā)送方
- 冒充:某個(gè)用戶冒充另一個(gè)用戶接收后發(fā)送報(bào)文
- 篡改:接收方對(duì)收到的信息進(jìn)行篡改。
這些問題,簡單依賴單一的報(bào)文認(rèn)證碼是很難解決的。目前比較有效的,也是在網(wǎng)絡(luò)安全中使用比較廣泛的解決方案,就是數(shù)字簽名(Digital signatures)。
- 數(shù)字簽名技術(shù)是實(shí)現(xiàn)安全電子交易的核心技術(shù)之一。
- 可驗(yàn)證性(verifiable),驗(yàn)證報(bào)文是否被修改過。
- 不可偽造性(unforgeable)
- 不可抵賴性(non-repudiation)
數(shù)字簽名的簡單實(shí)現(xiàn)原理
顯然我們很容易想到,**簽名的主要目的是為了預(yù)防修改,即簽名本身是不能被修改的,被簽名的內(nèi)容是不能被修改的。**就跟我們?nèi)粘I钪?,?duì)一個(gè)文件的簽名,往往就是簽上自己的姓名,甚至手印,而且要保存原件,就是為了簽名后,簽名和文件內(nèi)容都是不能被修改的。
因此,與日常生活中的簽名行為聯(lián)系起來的話,網(wǎng)絡(luò)安全中的數(shù)字簽名技術(shù),實(shí)際上就是在發(fā)送的報(bào)文(相當(dāng)于文件),簽上一個(gè)數(shù)字名稱,這個(gè)名稱保證了報(bào)文的完整性,同時(shí)也標(biāo)識(shí)著身份認(rèn)證。同時(shí),這個(gè)簽名一定是唯一特殊,不可被修改的,從而保證不可偽造和不可抵賴性。
因此,為了實(shí)現(xiàn)數(shù)字簽名,就需要借助于上面介紹的加密技術(shù)。報(bào)文加密技術(shù)是數(shù)字簽名的基礎(chǔ)。
同時(shí),對(duì)于加密技術(shù),首先不能選取對(duì)稱加密算法,因?yàn)閷?duì)稱加密算法接收和發(fā)送雙方使用的是同一個(gè)密鑰,也就是說接收方是可以利用這個(gè)密碼對(duì)接收?qǐng)?bào)文進(jìn)行修改的,也就是我們上面說的報(bào)文驗(yàn)證碼的問題。
因此,對(duì)于加密算法的算法一定需要選擇非對(duì)稱加密算法(公鑰技術(shù))。此時(shí),假設(shè)Bob要想Alice發(fā)送帶有數(shù)字簽名的信息,就可以利用其私鑰對(duì)報(bào)文m進(jìn)行加密,創(chuàng)建簽名報(bào)文,KB-(m)。
整體流程如下所示:
作為Alice,實(shí)際上接收了兩份報(bào)文:一份是明文原始報(bào)文m,另一份是Bob用私鑰加密的簽名報(bào)文。之后,Alice的響應(yīng)幀流程大致如下所示:
-
Alice利用Bob的公鑰KB+解密KB-(m),并檢驗(yàn)KB+(KB-(m))= m來證實(shí)報(bào)文m確實(shí)是由Bob簽名的。
-
如果KB+(KB-(m))= m成立,則簽名m的一定是Bob的私鑰
-
于是:
Alice可以證實(shí):
- Bob簽名了m
- 沒有其他人簽名m的可能
- Bob簽名的是報(bào)文m而不是其他報(bào)文m‘
不可抵賴:
- Alice可以持有報(bào)文m和簽名KB-(m),必要是可以提交給法院證明是Bob簽名的報(bào)文m。
實(shí)際上,通過上面的介紹我們細(xì)想就能發(fā)現(xiàn),實(shí)際上報(bào)文驗(yàn)證碼MAC和數(shù)字簽名技術(shù)的實(shí)現(xiàn)區(qū)分,實(shí)際上也就是對(duì)稱加密算法和非對(duì)稱加密算法實(shí)現(xiàn)原理的區(qū)別。因?yàn)橛辛朔菍?duì)稱加密算法,使得每個(gè)用戶都可以保留自己的私鑰,同時(shí)公開一個(gè)公鑰來進(jìn)行解密。而這個(gè)私鑰就成了身份認(rèn)證的唯一標(biāo)識(shí),比如身份證ID,或指紋。從而保證了報(bào)文傳輸過程中的消息完整性和身份認(rèn)證。
簽名報(bào)文摘要
上述簡單數(shù)字簽名的方案有一個(gè)較大的缺點(diǎn),就是在利用私鑰對(duì)報(bào)文加密后(簽名后),該簽名要跟著報(bào)文一起發(fā)送給接收端。一來,傳輸?shù)膱?bào)文量相當(dāng)于是兩倍的報(bào)文,造成信道資源消耗。二來,接收方在對(duì)簽名解密時(shí),原始報(bào)文往往比較大,解密速度也會(huì)比較慢。因此,可以設(shè)計(jì)一些方案來改進(jìn)這個(gè)簽名過程。
怎么做呢?可以聯(lián)想到上面提到過的報(bào)文摘要,對(duì)于報(bào)文摘要來說,它可以作為報(bào)文的數(shù)字指紋這樣一個(gè)特征,也就是可以唯一標(biāo)識(shí)一個(gè)報(bào)文。換句話說,報(bào)文摘要其實(shí)就與原始報(bào)文一一對(duì)應(yīng)。
因此,顯而易見,我們?cè)诤灻臅r(shí)候可以不對(duì)整個(gè)原始報(bào)文進(jìn)行簽名,而改為對(duì)這個(gè)報(bào)文摘要進(jìn)行簽名,也可以實(shí)現(xiàn)同樣的效果。
因此,目前大部分的數(shù)字簽名,使用的都是報(bào)文摘要簽名的方法。
接下來我們來看一下,利用報(bào)文摘要數(shù)字簽名的實(shí)現(xiàn)流程:
Bob發(fā)送數(shù)字簽名的報(bào)文:
- Bob在發(fā)送報(bào)文時(shí),利用密碼散列函數(shù),對(duì)報(bào)文生成報(bào)文摘要H(m)
- Bob利用自己的私鑰,對(duì)報(bào)文摘要進(jìn)行簽名,得到簽名后的報(bào)文摘要:KB-(H(m))
- 把該簽名后的報(bào)文摘要和報(bào)文一起,組成擴(kuò)展報(bào)文(m, KB-(H(m)))發(fā)送給接收端。
Alice核實(shí)簽名以及數(shù)字簽名報(bào)文的完整性:文章來源:http://www.zghlxwxcb.cn/news/detail-618850.html
- Alice分離出原始報(bào)文本身,和簽名報(bào)文摘要
- Alice利用相同的密碼散列函數(shù),根據(jù)原始報(bào)文,生成報(bào)文摘要
- 再利用Bob的公鑰對(duì)簽名報(bào)文摘要進(jìn)行解密
- 將解密后的報(bào)文摘要與剛剛生成的報(bào)文摘要進(jìn)行比對(duì),判斷兩者是否相同。
文章來源地址http://www.zghlxwxcb.cn/news/detail-618850.html
到了這里,關(guān)于哈工大計(jì)算機(jī)網(wǎng)絡(luò)課程網(wǎng)絡(luò)安全基本原理詳解之:消息完整性與數(shù)字簽名的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!