
基於對稱密碼體制實現的消息認證技術與HMAC,因要求收發雙方有共享密鑰,因此在應用上有以下局限性。
(1)消息的認證碼只可顺利获得自己與指定人檢驗,不能實現多人檢驗或公開驗證。
(2)消息認證碼的生成者與檢驗者得有相同的利益,不可以互相抵賴與偽造。
(3)第三方不能裁定生成者與驗證者的爭議。
用公鑰密碼體制進行消息的完整性認證為信息系統里最常用的方式之一,它一般顺利获得消息的產生者對消息的雜湊值進行數字簽名的方法實現。與基於對稱密碼體制實現的消息認證技術和HMAC比較有以下優勢。
(1)在保證消息產生者的公鑰真實性和有效性的前提下,可實現消息的公開驗證性。
(2)由於消息產生者私鑰的私有性,可有效地防止消息產生者的抵賴和任何他人的偽造。
(3)在消息的產生者和驗證者之間出現爭議時,可由第三方仲裁。
1.公鑰密碼體制實現的消息認證
設消息或數據為M,H為雜湊函數,H(M)是M的雜湊值。只要將H(M)“安全”地保存,就能實現消息M的完整性驗證。具體地,驗證者計算M的雜湊值H(M),之後和“安全”保存的H(M)比較,若二者相同,那麼驗證者相信消息M是完整的,就是說未被修改過。
注意,我們說道雜湊值H(M)要“安全”地保存,那麼依靠什麼手段來實現消息M的雜湊值的安全保存呢?通常的方法是使用公鑰數字簽名。具體來說,消息M的擁有者或產生者第一时间計算雜湊值H(M),之後用自己的私鑰對H(M)實施數字簽名,再把(M,Sig(H(M)))存儲或發送給收方。驗證者要想驗證消息M的完整性,產生計算M的雜湊值,得到H(M),記為h1。並且用消息M的擁有者或產生者的公鑰對Sig(H(M))加密,取得H(M),記成h2。然後看h1和h2是否相同,若相同,那麼驗證者知道消息M是完整的,也就是未被修改過。
由於使用只有消息M的擁有者或產生者才有的私鑰對H(M)進行簽名,因此其他任何人沒有辦法偽造消息M及其簽名。
注意,用公鑰密碼體制達到消息的完整性認證技術對與公開驗證有非常明顯的優勢,缺點是計算量大大高於對稱密碼體制。
2.數字信封
數字信封不但實現了消息的完整性,還實現了消息的機密性和真實性。
使用的算法是128bit密鑰的分組密碼算法。協議如下。
第一步,A產生一個128bit會話密鑰K計算E(M,Sig(H(M)))和PEB(K),並把{Ek(M,SigA(H(M))),PEB(K)}(一般叫做數字信封)傳給B。
第二步,B用自己的私鑰脫密PEB(K)產生到會話密鑰K,繼而再用K對E(M,SigA(H(M)))脫密得到M和SigA(H(M)),用A的公鑰加密SigA(H(M))產生H(M),記成h1,且計算M的雜湊值,記成h2,比較h1與h2是不是相等,若相等則接受M。
在該協議中,A、B雙方顺利获得會話密鑰K的機密性來保證消息M的機密性,而會話密鑰K的機密性是用戶A用B的公鑰加密保護的。用戶A用自己的私鑰對消息M的雜湊值實施簽名來保證消息的完整性,用戶B用A的公鑰來驗證A的簽名,以實現消息M的真實性認證。
