信息安全技術做業5

做業題目:散列函數的應用及其安全性。算法

內容要求:(1) 給出散列函數的具體應用。(2) 結合生日攻擊、以及200四、2005年王曉雲教授有關MD5安全性和2017年google公司SHA-1的安全性,說明散列函數的安全性以及目前安全散列函數的發展。問題2的回答能夠結合下面給出的第一個連接。(3)結合md5算法中的選擇前綴碰撞以及第二個連接中的helloworld.exe和goodbyworld.exe兩個可執行文件的md5消息摘要值和兩個文件的執行結果說明md5算法來驗證軟件完整性時可能出現的問題。數據庫

連接1:https://www.win.tue.nl/hashclash/安全

連接2:http://www.win.tue.nl/hashclash/SoftIntCodeSign/數據結構

(1)全部散列函數都有以下一個基本特性:若是兩個散列值是不相同的(根據同一函數),那麼這兩個散列值的原始輸入也是不相同的。這個特性是散列函數具備肯定性的結果。但另外一方面,散列函數的輸入和輸出不是一一對應的,若是兩個散列值相同,兩個輸入值極可能是相同的,但並不能絕對確定兩者必定相等。輸入一些數據計算出散列值,而後部分改變輸入值,一個具備強混淆特性的散列函數會產生一個徹底不一樣的散列值。典型的散列函數都有無限定義域,好比任意長度的字節字符串,和有限的值域,好比固定長度的比特串。在某些狀況下,散列函數能夠設計成具備相同大小的定義域和值域間的一一對應。一一對應的散列函數也稱爲排列。可逆性能夠經過使用一系列的對於輸入值的可逆"混合"運算而獲得。函數

因爲散列函數的應用的多樣性,它們常常是專爲某一應用而設計的。例如,加密散列函數假設存在一個要找到具備相同散列值的原始輸入的敵人。一個設計優秀的加密散列函數是一個"單向"操做:對於給定的散列值,沒有實用的方法能夠計算出一個原始輸入,也就是說很難僞造。爲加密散列爲目的設計的函數,如MD5,被普遍的用做檢驗散列函數。這樣軟件下載的時候,就會對照驗證代碼以後才下載正確的文件部分。此代碼有可能由於環境因素的變化,如機器配置或者IP地址的改變而有變更。以保證源文件的安全性。google

錯誤監測和修復函數主要用於辨別數據被隨機的過程所擾亂的事例。當散列函數被用於校驗和的時候,能夠用相對較短的散列值來驗證任意長度的數據是否被更改過。編碼

一、錯誤校訂:使用一個散列函數能夠很直觀的檢測出數據在傳輸時發生的錯誤。在數據的發送方,對將要發送的數據應用散列函數,並將計算的結果同原始數據一同發送。在數據的接收方,一樣的散列函數被再一次應用到接收到的數據上,若是兩次散列函數計算出來的結果不一致,那麼就說明數據在傳輸的過程當中某些地方有錯誤了。這就叫作冗餘檢驗。對於錯誤校訂,假設類似擾動的分佈接近最小。對於一個信息串的微擾能夠被分爲兩類,大的(不可能的)錯誤和小的(可能的)錯誤。咱們對於第二類錯誤從新定義以下,假如給定 H(x) 和 x+s,那麼只要s足夠小,咱們就能有效的計算出x。那樣的散列函數被稱做錯誤校訂編碼。這些錯誤校訂編碼有兩個重要的分類:循環冗餘校驗和裏德所羅門碼。加密

二、語音識別:對於像從一個已知列表中匹配一個MP3文件這樣的應用,一種可能的方案是使用傳統的散列函數--例如MD5,可是這種方案會對時間平移、CD讀取錯誤、不一樣的音頻壓縮算法或者音量調整的實現機制等狀況很是敏感。使用一些相似於MD5的方法有利於迅速找到那些嚴格相同(從音頻文件的二進制數據來看)的音頻文件,可是要找到所有相同(從音頻文件的內容來看)的音頻文件就須要使用其餘更高級的算法了。那些並不緊隨IT工業潮流的人每每能反其道而行之,對於那些微小差別足夠魯棒的散列函數確實存在。現存的絕大多數散列算法都是不夠魯棒的,可是有少數散列算法可以達到辨別從嘈雜房間裏的揚聲器裏播放出來的音樂的魯棒性。有一個實際的例子是Shazam[1]服務。用戶能夠用電話機撥打一個特定的號碼,並將電話機的話筒靠近用於播放音樂的揚聲器。該項服務會分析正在播放的音樂,並將它於儲存在數據庫中的已知的散列值進行比較。用戶就可以收到被識別的音樂的曲名(須要收取必定的費用)spa

三、信息安全:設計

①文件校驗:咱們比較熟悉的校驗算法有奇偶校驗和CRC校驗,這2種校驗並無抗數據篡改的能力,它們必定程度上能檢測並糾正數據傳輸中的信道誤碼,但卻不能防止對數據的惡意破壞。MD5 Hash算法的"數字指紋"特性,使它成爲目前應用最普遍的一種文件完整性校驗和算法,很多Unix系統有提供計算md5 checksum的命令。

②數字簽名:Hash 算法也是現代密碼體系中的一個重要組成部分。因爲非對稱算法的運算速度較慢,因此在數字簽名協議中,單向散列函數扮演了一個重要的角色。對 Hash 值,又稱"數字摘要"進行數字簽名,在統計上能夠認爲與對文件自己進行數字簽名是等效的。並且這樣的協議還有其餘的優勢。

③ 鑑權協議:以下的鑑權協議又被稱做挑戰--認證模式:在傳輸信道是可被偵聽,但不可被篡改的狀況下,這是一種簡單而安全的方法。以上就是一些關於hash以及其相關的一些基本預備知識。

(2)散列函數的安全性:

因爲散列函數的應用的多樣性,它們常常是專爲某一應用而設計的。例如,加密散列函數假設存在一個要找到具備相同散列值的原始輸入的敵人。一個設計優秀的加密散列函數是一個"單向"操做:對於給定的散列值,沒有實用的方法能夠計算出一個原始輸入,也就是說很難僞造。爲加密散列爲目的設計的函數,如MD5,被普遍的用做檢驗散列函數。這樣軟件下載的時候,就會對照驗證代碼以後才下載正確的文件部分。此代碼有可能由於環境因素的變化,如機器配置或者IP地址的改變而有變更。以保證源文件的安全性。

哈希函數的安全性直接關係到數字簽名的安全性,若是哈希函數被攻破,數字簽名的有效性就會受到質疑。 目前,已經發明的Hash函數有多種,如Snefru、N-Hash、LOKI、AR、GOST、MD、SHA等。它們在數學上實現的方法各有不一樣,安全性也各有不一樣。目前比較經常使用的Hash函數是MD5和SHA-1。 MD5哈希函數以512位來處理輸入數據,每一分組又劃分爲16個32位的子分組。算法的輸出由4個32位分組組成,將它們級聯起來,造成一個128位的固定長度的哈希值,即輸入數據的摘要。SHA-1哈希函數在MD4的基礎上增長了數學運算的複雜程度,即SHA=MD4+擴輾轉換+附加輪+更好的雪崩效應(哈希值中,爲0的比特和爲1的比特,其總數應該大體相等;輸入數據中一個比特的變化,將致使哈希值中一半以上的比特變化,這就叫作雪崩效應)。SHA可以產生160位的哈希值。對SHA尚未已知的密碼攻擊,而且因爲它產生的哈希值位數長於MD5,因此它能更有效地抵抗窮舉攻擊(包括生日攻擊)。可是,任何一種算法都有其漏洞和侷限性。任何一個哈希函數都會存在碰撞——即在一些特定狀況下,兩個不一樣的文件或信息會指向同一個數字摘要。在通常狀況下,相似碰撞只能儘量地減小,而不能徹底避免。從理論上講,沒有攻不破的密碼。隨着密碼科學的發展,也許會找到攻破某一種密碼算法的途徑。

目前安全散列函數的發展:

安全散列算法(The Secure Hash Algorithm,SHA)由美國國家標準和技術協會(National Institute of Standards and technology,NIST)於1993年提出,並被定義爲安全散列標準(Secure Hash Standard,SHS)。SHA-1是1994年修訂的版本,糾正了SH一個未公佈的缺陷。這種算法接受的輸入文檔小於2的64次方 位,產生160位的報文摘要。該算法實際的目標使得找出一個可以匹配給定的散列值的文本是不可能的計算,也就是說,若是對文檔A已經計算出了散列值H(A),那麼很難找到一個文檔B,使其散列值H(B)=H(A),尤爲困難的是沒法找到知足上述條件的,並且有特定內容的文檔B。SHA算法的缺點是速度比MD5慢,可是SHA的報文摘要更長,更有利於對抗野蠻的攻擊。

 到2005年2月,據王小云教授的研究報告,他們已經研究出了搜索SHA-1碰撞的一系列新技術。他們的分析代表,SHA-1的碰撞能在小於2^69次Hash操做中找到。對完整的80輪SHA-1的攻擊,這是第一次在小於2^80次Hash操做這個理論界限的狀況下找到碰撞。根據他們的估計,對於縮減到70輪的SHA-1可以用如今的超級計算機找出「實碰撞」。他們的研究方法,能天然地運用到SHA-0和縮減輪數的SHA-1的破譯分析上。 2005年3月6日,Arjen Lenstra,王小云,Benne de Weger 宣佈,他們構造出一對基於MD5 Hash函數的X.509證書,產生了相同的簽名。他們提出了一種構造X.509證書的方法,在他們所構造出的證書對中,因爲使用了MD5算法,簽名部分產生了碰撞。所以,當證書發佈者使用MD5做爲Hash函數時,發佈者就會在證書中產生相同的簽名,致使PKI的基礎原理遭到可信性破壞。這意味着,從單獨某個證書沒法肯定是否存在另外一個不一樣證書有着相同的簽名。因爲第二個相同簽名證書存在的可能性,證書發佈機構沒法驗證私鑰的「擁有證實」,即沒法驗證證書中的簽名。所以,使用「基於MD5函數」公鑰證書的任何一方都沒法確保所謂的證書擁有者是否真實擁有相應的私鑰。他們也想構造一對基於SHA-1的X.509證書,產生相同的簽名。然而,他們還作不到這一點,由於產生SHA-1碰撞還須要至關長一段時間的研究。

專家指出:A.Lenstra和王小云等人聲稱已經成功地構造了兩張符合X.509證書數據結構,擁有一樣簽名而內容卻不一樣的證書,但該構造方法對證書的部分域要有特殊安排,簽名算法RSA的密鑰也是按照特殊規律生成的,要用來攻擊某個實際應用的電子簽名系統仍需時日。而對於SHA-1算法,說其從理論上被破解都還爲時過早,只能說其破解工做取得了重大突破,破解所須要運算次數已從原來設計時估算的2^80次下降爲2^69次,這比窮舉法快了2048倍,但2^69次運算須要6000年左右的時間,在實際計算上仍然是不可行的。 除了運算方面的瓶頸外,哈希函數的不可逆性決定了攻擊者沒法輕易得手,沒有人能夠保證經過這個發現的每一個碰撞都是「可用」的碰撞。在漫長的運算後,你獲得的也許包含一些有價值的信息,也許就是理論上存在的單純碰撞,運算瓶頸和信息匱乏都會使黑客們的種種努力成爲徒勞……據業內人士估計,在當前的技術條件下,2^50或2^ 60次運算量的範圍內的攻擊方法纔會爲咱們帶來麻煩,即引起實際意義上的攻擊行爲。在新研究成果發佈前的一段時間內,SHA-1 算法只能被稱做不完美,但仍是安全的。基於PKI技術進行電子簽名的最終用戶,目前還不用擔憂本身的簽名被僞造或遭遇簽名人抵賴。

另外,安全專家強調:一種算法被破譯,和整個企業的安全系統被攻破,是兩個不一樣的概念。由於隨着攻擊技術和能力的提升,算法也會「水漲船高」,向前發展進步。王教授所取得的成就提醒密碼學家研究新的算法,提醒有關標準化機構要提早修改算法標準,也提醒有關CA和電子簽名產品開發商支持新的算法。固然,有些徹底基於摘要算法的密押系統和電子貨幣系統,還須要儘早考慮替換方案。美國國家技術與標準局(NIST)曾經發表以下評論:「研究結果說明SHA-1的安全性暫時沒有問題,但隨着技術的發展,技術與標準局計劃在2010年以前逐步淘汰SHA-1,換用其餘更長更安全的算法(如:SHA-224, SHA-256, SHA-384和SHA-512)來代替。」

(3)散列表的查找過程基本上和造表過程相同。一些關鍵碼可經過散列函數轉換的地址直接找到,另外一些關鍵碼在散列函數獲得的地址上產生了衝突,須要按處理衝突的方法進行查找。在介紹的三種處理衝突的方法中,產生衝突後的查找仍然是給定值與關鍵碼進行比較的過程。因此,對散列表查找效率的量度,依然用平均查找長度來衡量。查找過程當中,關鍵碼的比較次數,取決於產生衝突的多少,產生的衝突少,查找效率就高,產生的衝突多,查找效率就低。所以,影響產生衝突多少的因素,也就是影響查找效率的因素。

影響產生衝突多少有如下三個因素:1.散列函數是否均勻;2. 處理衝突的方法;3.散列表的裝填因子。散列表的裝填因子定義爲:α= 填入表中的元素個數/散列表的長度。α是散列表裝滿程度的標誌因子。因爲表長是定值,α與"填入表中的元素個數"成正比,因此,α越大,填入表中的元素較多,產生衝突的可能性就越大;α越小,填入表中的元素較少,產生衝突的可能性就越小。

實際上,散列表的平均查找長度是裝填因子α的函數,只是不一樣處理衝突的方法有不一樣的函數。瞭解了hash基本定義,就不能不提到一些著名的hash算法,MD5和SHA-1能夠說是目前應用最普遍的Hash算法,而它們都是以MD4爲基礎設計的。其中,MD5(RFC 1321)是 Rivest 於1991年對MD4的改進版本。它對輸入仍以512位分組,其輸出是4個32位字的級聯,與 MD4 相同。MD5比MD4來得複雜,而且速度較之要慢一點,但更安全,在抗分析和抗差分方面表現更好。MD5算法具備如下特色:一、壓縮性:任意長度的數據,算出的MD5值長度都是固定的;二、容易計算:從原數據計算出MD5值很容易;三、抗修改性:對原數據進行任何改動,哪怕只修改1個字節,所獲得的MD5值都有很大區別;四、強抗碰撞:已知原數據和其MD5值,想找到一個具備相同MD5值的數據(即僞造數據)是很是困難的。

相關文章
相關標籤/搜索