1. 程式人生 > >2016012010 趙瑞雪 散列函數的應用及其安全性

2016012010 趙瑞雪 散列函數的應用及其安全性

註意 計算 技術 簽名 ont 黑客 同時 發生器 文件中

作業題目:散列函數的應用及其安全性

內容要求:(1) 給出散列函數的具體應用

(2) 結合生日攻擊、以及2004、2005年王曉雲教授有關MD5安全性和2017年google公司SHA-1的安全性,說明散列函數的安全性以及目前安全散列函數的發展。問題2的回答可以參考下面給出的第一個鏈接

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

什麽是散列函數(Hash函數)?

Hash,一般翻譯做"散列",也有直接音譯為"哈希"的,就是把任意長度的輸入(又叫做預映射, pre-image),通過散列算法,變換成固定長度的輸出,該輸出就是散列值。這種轉換是一種壓縮映射,也就是,散列值的空間通常遠小於輸入的空間,不同的輸入可能會散列成相同的輸出,而不可能從散列值來唯一的確定輸入值。簡單的說就是一種將任意長度的消息壓縮到某一固定長度的消息摘要的函數

一、散列函數的具體應用

1.消息認證

(1)消息認證概念:消息認證是用來驗證消息完整性的一種機制和服務。消息認證確保收到的消息和發送時是一樣的,同時確保發送方聲稱的身份是真實有效的,當Hash函數用於提供消息認證功能時,被稱為消息摘要

(2)使用Hash函數的本質:發送者根據待發送的消息使用該函數計算一組Hash值,然後將Hash值和消息一起發送過去。接收者收到後對於消息執行同樣Hash計算,並將結果與收到的Hash值進行對比。如果不匹配,則接收者推斷出消息(或Hash值)遭到了篡改

(3)Hash碼能夠通過如下不同方法提供消息認證:

a.使用對稱密碼算法加密消息和Hash碼

b.使用對稱密碼算法只對Hash碼進行加密

c.不使用加密算法,僅使用Hash函數實現消息認證。(假設通信雙方共享私密值S)

d.通過將整個消息和Hash值加密,能夠在c的基礎上提供保密性

(4)一般情況,消息認證是通過MAC實現的。通信雙方基於共享的同一密鑰來認證彼此之間交互的信息時,就會使用MAC。MAC是Hash函數和加密函數操作的結合。並且提供了安全保護,用以抵抗不知道密鑰的攻擊者的攻擊

2.數字簽名

(1)數字簽名簡述:數字簽名的操作與MAC相似,在進行數字簽名過程中使用用戶的私鑰加密消息的Hash值,其他人任何知道該用戶公鑰的人都能夠通過數字簽名來驗證消息的完整性。數字簽名的應用比消息認證更為廣泛

(2)Hash碼用於提供數字簽名的方案:

a.使用發送方的私鑰,利用公鑰密碼算法僅對Hash碼進行加密

b.先用發送方私鑰對Hash碼加密,再用對稱密碼中的密鑰對消息和公鑰算法加密結果加密

3.其他應用

(1)產生單向口令文件。當用戶輸入口令時,操作系統將比對輸入口令的Hash值和存儲在口令文件中的Hash值

(2)入侵檢測和病毒檢測。將每個文件的Hash值H(F)存儲在安全系統中,隨後就能夠通過重新計算H(F)來判斷文件是否被修改過

(3)密碼學Hash函數能夠用於構建隨機函數PRF或用作偽隨機數發生器。基於Hash函數的PRF可用於對稱密碼中的密鑰產生

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

1.生日攻擊:

生日攻擊原理:

我們可以將它用在碰撞,得到不同Message有著相同tag。

假設:取樣次數為N,M:M1-Mn,取值在tag:1-B中,並且假設分布隨機均勻相互獨立。

取樣次數n與B的關系,n=1.2*B^0.5(這是生日悖論中最壞的情況。)

證明:M2不等於M1的概率為(B-1)/B,同理可得M3為(B-2)/B,M4為(B-3)/B...Mn為(B-n+1)/B。

因此,其中有碰撞的概率為:1-(1-1/B)(1-2/B).....(1-(k-1)/B)>= (1-e)^(-n^2/2B)

因為n=1.2*B^0.5,因此(1-e)^(-n^2/2B)=1-e^-0.72=0.53>50%

結論,因此使用生日攻擊,我們只需2^(n/2)次尋找,就有50%概率能找到相同tag的兩個不同Message

(1)通過“生日悖論”模型來分析散列碰撞的安全性。生日攻擊的基本原理為假定散列函數H有種可能輸出(即輸出為位),H作用於k個隨機輸入,則時至少有一個重復出現,發生碰撞現象。生日攻擊隱含著消息摘要的長度的一個下界。一個40比特長的消息摘要是很不安全的,因為僅僅用220(大約一百萬)次隨機Hash可至少以1/2的概率找到一個碰撞。為了抵抗生日攻擊,通常建議消息摘要的長度至少應取為128比特,此時生日攻擊需要約264次Hash。安全的Hash標準的輸出長度選為160比特是出於這種考慮

(2) 防範方法:

  • 使用安全的Hash算法:安全的Hash算法生成的Hash值有足夠多的位數。這樣,攻擊者在尋找兩個具有相同Hash值的文件時就會非常困難

  • 加鹽:在為文件簽名之前,先向文件添加一個隨機值,然後計算Hash值,再將文件、簽名和隨機值一起發送給接收者。這樣,攻擊者必須找出具有特定Hash值的偽造文件,這非常困難

  • 改動文件:在為文件簽名之前,對消息或文件做少許改動。這樣,攻擊者必須找出具有特定Hash值的偽造文件,這非常困

2.MD5安全性和SHA-1的安全性:

2004年8月中國密碼學家王小雲教授等首次公布了提出一種尋找MD5碰撞的新方法。目前利用該方法用普通微機幾分鐘內即可找到MD5的碰撞。MD5已經被徹底攻破。在2017年,Google公司宣布實現了對SHA-1算法的攻擊。SHA-1算法宣告攻破。不過需要註意的是,這次SHA-1算法破解的計算量相當於單個CPU計算6500年和單個GPU計算110年,因此就目前的PC硬件來看,依靠一臺電腦完成破解是不現實的。然而密碼學家認為,如果利用雲計算技術來破解的話,這件事情將簡單很多,可能只需要17萬美元的預算即可完成,因此盡快改用安全性更高的SHA-2或SHA-3算法才是正確的做法

3.散列函數的安全性

(1)通過對於生日攻擊的了解,散列函數的安全性是有待提高的。生日攻擊並沒有利用任何HASH函數的性質,是對任何HASH都適用的普適的攻擊方法,應對方法也很簡單,增加HASH的長度,但是很難完成。

(2)有兩種方法可以攻擊安全散列函數:密碼分析法和暴力攻擊法。散列函數抵抗暴力攻擊的強度完全依賴於算法生成的散列碼長度。

(3)安全散列函數結構

因為所需的安全散列長度越來越長,因此我們可以使用有限定義域上的散列函數(俗稱壓縮函數)通過叠代方式拓展為具有無限定義域的散列函數。而最為代表性的就Merkle-Damgard結構

4.散列函數的發展

(1)MD2 Rivest在1989年開發出MD2算法。在這個算法中,首先對信息進行數據補位,使信息的字節長度是16的倍數。然後,以一個16位的檢驗和追加到信息末尾。並且根據這個新產生的信息計算出散列值。

(2)MD4 MD4是麻省理工學院教授Ronald Rivest於1990年設計的一種信息摘要算法。它是一種用來測試信息完整性的密碼散列函數的實行。通過三圈的操作將任意長度的消息變換成128位的哈希值。

(3)MD5 Rivest於1991年對MD4的改進版本。運用了四輪變換,並且每輪加上前一輪的結果。

(4)HAVAL 為MD5的改進版本。輪數可以為3、4或5,輸出長度分別為128、160、192或224位。

(5)SHA系列 SHA (Secure Hash Algorithm,譯作安全散列算法) 是美國國家安全局 (NSA) 設計,美國國家標準與技術研究院 (NIST) 發布的一系列密碼散列函數,經歷了SHA-0,SHA-1,SHA-2,SHA-3系列發展。2002年,NIST分別發布了SHA-256、SHA-384、SHA-512,這些算法統稱SHA-2。2008年又新增了SHA-224。NSA於2007年正式宣布在全球範圍內征集新新一代(SHA-3)算法設計,2012年公布評選結果, Keccak算法最終獲勝成為唯一官方標準SHA-3算法,但還有四種算法同時進入了第三輪評選,分別是:BLAKE, Gr?STL, JH和SKEIN,這些算法其實也非常安全,而且經受審查,被各種競爭幣頻繁使用

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

1.MD5算法:

MD5算法:它的全稱是message-digest algorithm 5(信息-摘要算法),經MD2、MD3和MD4發展而來。它的作用是讓大容量信息在用數字簽名軟件簽署私人密匙前被"壓縮"成一種保密的格式(就是把一個任意長度的字節串變換成一定長的大整數)

2.選擇前綴碰撞法:

幾位密碼學家使用 “構造前綴碰撞法”(chosen-prefix collisions)來進行攻擊(是王小雲所使用的攻擊方法的改進版本),他們所使用的計算機是一臺Sony PS3,且僅用了不到兩天。如果僅僅是想要生成MD5 相同而內容不同的文件的話,在任何主流配置的電腦上用幾秒鐘就可以完成。他們的結論:MD5 算法不應再被用於任何軟件完整性檢查或代碼簽名的用途

3.MD5驗證軟件完整性時可能出現的問題

(1)兩個不同的程序,MD5可能是相同的

(2)不能通過校驗MD5知道網站是否被黑客入侵篡改,是否曾被惡意植入病毒或木馬

(3)當軟件過大時,在驗證過程中所需的時間也會大大增加,對於第三方而言,攻擊的成功概率也會增加

(4)如果有第三方在驗證軟件完整性時截取軟件代碼,使用快速MD5碰撞生成器,在短時間內偽造一份相同的MD5,並惡意篡改軟件,那麽安全性將會大大下降

參考資料:

https://blog.csdn.net/jerry81333/article/details/52763070

http://m.cnitpm.com/pm1/38640.html

https://www.zhihu.com/question/54307104

2016012010 趙瑞雪 散列函數的應用及其安全性