1. 程式人生 > >2016012039+張琪+散列函數的應用及其安全性

2016012039+張琪+散列函數的應用及其安全性

使用 產生 tro 體系 拓展 原來 ont 結果 right

一、給出散列函數的具體應用

散列函數的定義:
  Hash,一般翻譯做"散列",也有直接音譯為"哈希"的,就是把任意長度的輸入(又叫做預映射, pre-image),通過散列算法,變換成固定長度的輸出,該輸出就是散列值。這種轉換是一種壓縮映射,也就是,散列值的空間通常遠小於輸入的空間,不同的輸入可能會散列成相同的輸出,而不可能從散列值來唯一的確定輸入值。簡單的說就是一種將任意長度的消息壓縮到某一固定長度的消息摘要的函數。HASH函數,又稱雜湊函數,是在信息安全領域有廣泛和重要應用的密碼算法,它有一種類似於指紋的應用。在網絡安全協議中,雜湊函數用來處理電子簽名,將冗長的簽名文件壓縮為一段獨特的數字信息,像指紋鑒別身份一樣保證原來數字簽名文件的合法性和安全性。SHA-1和MD5都是目前最常用的雜湊函數。經過這些算法的處理,原始信息即使只更動一個字母,對應的壓縮信息也會變為截然不同的“指紋”,這就保證了經過處理信息的唯一性。為電子商務等提供了數字認證的可能性。

Hash算法在信息安全方面的應用主要體現在以下的3個方面:

  1)文件校驗
  我們比較熟悉的校驗算法有奇偶校驗和CRC校驗,這2種校驗並沒有抗數據篡改的能力,它們一定程度上能檢測並糾正數據傳輸中的信道誤碼,但卻不能防止對數據的惡意破壞。
  MD5 Hash算法的"數字指紋"特性,使它成為目前應用最廣泛的一種文件完整性校驗和(Checksum)算法,不少Unix系統有提供計算md5 checksum的命令。
  2)數字簽名
  Hash 算法也是現代密碼體系中的一個重要組成部分。由於非對稱算法的運算速度較慢,所以在數字簽名協議中,單向散列函數扮演了一個重要的角色。對 Hash 值,又稱"數字摘要"進行數字簽名,在統計上可以認為與對文件本身進行數字簽名是等效的。而且這樣的協議還有其他的優點。
  3)鑒權協議
  如下的鑒權協議又被稱作"挑戰--認證模式:在傳輸信道是可被偵聽,但不可被篡改的情況下,這是一種簡單而安全的方法。

二、結合生日攻擊、以及2004、2005年王曉雲教授有關MD5安全性和2017年google公司SHA-1的安全性,說明散列函數的安全性以及目前安全散列函數的發展。

生日攻擊:生日攻擊是利用概率論中的生日問題,找到沖突的Hash值,偽造報文,使身份驗證算法失效。

2004、2005年王曉雲教授有關MD5安全性:MD5就是這樣一個在國內外有著廣泛的應用的雜湊函數算法。然而,王小雲教授發現,可以很快的找到MD5的“碰撞”,就是兩個文件可以產生相同的“指紋”。這意味著,當你在網絡上使用電子簽名簽署一份合同後,還可能找到另外一份具有相同簽名但內容迥異的合同,這樣兩份合同的真偽性便無從辨別。王小雲教授的研究成果證實了利用MD5算法的碰撞可以嚴重威脅信息系統安全,這一發現使目前電子簽名的法律效力和技術體系受到挑戰。

2017年Google公司SHA-1的安全性:SHA-1,安全哈希算法1,一個非常流行的加密散列函數設計於1995年由美國國家安全局,正式死亡後,一組研究人員從谷歌和CWI研究所在阿姆斯特丹宣布今天提交了第一次成功的SHA-1碰撞攻擊 。谷歌與同一組研究人員接觸,與他們合作,今天發布了新的研究,詳細描述了成功的SHA1碰撞攻擊,他們稱之為SHAttered。

散列函數的安全性:

有兩種方法可以攻擊安全散列函數:密碼分析法和暴力攻擊法。散列函數抵抗暴力攻擊的強度完全依賴於算法生成的散列碼長度。Van Oorschot和Wiener曾經提出,花費1000萬美元涉及一個被專門用來搜索MD5算法碰撞的機器,則平均24天內就可以找到一個碰撞。2004年8月中國密碼學家王小雲教授等首次公布了提出一種尋找MD5碰撞的新方法。目前利用該方法用普通微機幾分鐘內即可找到MD5的碰撞。MD5已經唄徹底攻破。

安全散列函數的發展:因為所需的安全散列長度越來越長,因此我們可以使用有限定義域上的散列函數(俗稱壓縮函數)通過叠代方式拓展為具有無限定義域的散列函數。而最為代表性的就Merkle-Damgard結構。這個結構的好處是,如果壓縮函數是抗碰撞的,那經過此結構處理後的散列函數也是抗碰撞的。SM3,HMAC就是基於這種結構,因為Merkle-Damgard結構並不能抵抗擴展攻擊,因此HMAC引入了Key。

三、結合md5算法中的選擇前綴碰撞以及第二個鏈接中的helloworld.exe和goodbyworld.exe兩個可執行文件的md5消息摘要值和兩個文件的執行結果說明md5算法在驗證軟件完整性時可能出現的問題。

MD5算法具有以下特點:

1、壓縮性:任意長度的數據,算出的MD5值長度都是固定的。

2、容易計算:從原數據計算出MD5值很容易。

3、抗修改性:對原數據進行任何改動,哪怕只修改1個字節,所得到的MD5值都有很大區別。

4、強抗碰撞:已知原數據和其MD5值,想找到一個具有相同MD5值的數據(即偽造數據)是非常困難的。

MD5的作用是讓大容量信息在用數字簽名軟件簽署私人密鑰前被"壓縮"成一種保密的格式(就是把一個任意長度的字節串變換成一定長的十六進制數字串)。除了MD5以外,其中比較有名的還有sha-1、RIPEMD以及Haval等。

選擇前綴碰撞:任意選取一對消息前綴P和P‘,通過構造後綴S和S‘,使得消息M=P||S和M‘=P‘||S‘滿足MD5(M)=MD5(M‘) 。

在實際運用中則前綴碰撞會發生復雜度分布的失衡。

鏈接:鏈接所給的這兩個程序會在屏幕上打印出不同的字符,但是它們的 MD5 都是一樣的

可能出現的問題:

1.不同文件可能會擁有相同的MD5算法

2.MD5的安全性有所欠缺,可能會被惡意篡改,威脅到軟件的安全性

3.無法保證文件的來源可靠性。

2016012039+張琪+散列函數的應用及其安全性