1. 程式人生 > >散列函數的應用及其安全性 付淅 2016012063

散列函數的應用及其安全性 付淅 2016012063

等於 world 非對稱加密 碰撞 2017年 一點 公司 tls ood

題目內容要求:(1) 給出散列函數的具體應用。(2) 結合生日攻擊、以及2004、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/

一、散列函數的具體應用

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

對於HASH函數的使用,有很多誤區,在此特列舉其使用場景以及常見的使用誤區。但是不論如何,我們都該記得HASH函數的特點:固定長度的輸出,單向不可逆,碰撞約束。

正確的應用場景:
1,數據校驗
HASH函數有類似數據冗余校驗類似的功能,但是它比簡單的冗余校驗碰撞的概率要小得多,顧而在現在密碼學中總是用HASH來做關鍵數據的驗證。
2,單向性的運用
利用HASH函數的這個特點,我們能夠實現口令,密碼等安全數據的安全存儲。密碼等很多關鍵數據我們需要在數據庫中存儲,但是在實際運用的過程中,只是作比較操作,顧而我們可以比較HASH結果。這一點相信在銀行等系統中有所運用。
3,碰撞約束以及有限固定摘要長度
數字簽名正是運用了這些特點來提高效率的。我們知道非對稱加密算法速度較低,通過HASH處理我們可以使其僅僅作用於HASH摘要上,從而提高效率。
4,可以運用HASH到隨機數的生成和密碼,salt值等的衍生中
因為HASH算法能夠最大限度的保證其唯一性,故而可以運用到關鍵數據的衍生中(從一個隨機的種子數產生,並且不暴露種子本身秘密)。

二、散列函數的安全性以及目前安全散列函數的發展

單向散列函數或者安全散列函數之所以重要,不僅在於消息認證(消息摘要,數據指紋),還有數字簽名(加強版的消息認證)和驗證數據的完整性。常見的單向散列函數有MD5和SHA。散列函數的兩個特點:1.輸出固定長度的 2. 不可逆轉

生日攻擊:利用“兩個集合相交”問題的原理生成散列函數碰撞,達到目的的攻擊稱為生日攻擊,也稱為平方根攻擊。生日攻擊方法沒有利用Hash函數的結構和任何代數弱性質,它只依賴於消息摘要的長度,即Hash值的長度。

MD5:用於確保信息傳輸完整一致。是計算機廣泛使用的雜湊算法之一,主流編程語言普遍已有MD5實現。將數據(如漢字)運算為另一固定長度值,是雜湊算法的基礎原理,MD5的前身有MD2、MD3和MD4。

簡單散列函數

所有的散列函數都按照下面的基本操作,把輸入(消息、文件等)看成n比特塊的序列。對輸入用叠代方法處理一塊,生成n比特的散列函數。

一種最簡單散列函數的每一個數據塊都按照比特異或:

Ci = bi1⊕ bi2⊕ … ⊕ bim

其中: Ci為散列碼的第i比特,1<= i <=n; m為輸入中n比特數據塊的數目; bij為第j塊的第i比特; ⊕為異或操作 下圖說明了這個操作: 技術分享圖片 因為沒一列都有相同的可能性。所以這個函數的有效性差。 SHA安全散列函數 SHA-1:該算法的原始規範於1993年作為美國政府標準機構NIST(國家標準與技術研究院)的安全散列標準FIPS PUB 180發布。現在這個版本通常被稱為SHA-0。它在出版後不久被國家安全局撤回,並被1995年發布的FIPS PUB 180-1修訂版所取代,通常稱為SHA-1。SHA-1與SHA-0的不同之處僅在於其壓縮功能的消息調度中的單個按位旋轉; 根據美國國家安全局的說法,這項工作已經完成,以糾正原有算法中的一個缺陷,從而降低了其密碼安全性。然而,國家安全局並沒有提供任何進一步的解釋或確定哪些缺陷被糾正。隨後在SHA-0和SHA-1中報告了弱點。SHA-1在許多安全協議中廣為使用,包括TLS和SSL、PGP、SSH、S/MIME和IPsec,曾被視為是MD5(更早之前被廣為使用的散列函數)的後繼者。 近些年,應用最廣泛的散列函數是SHA。由於其他每一種被廣泛應用的散列函數都已經被證實存在這密碼分析學中的缺陷,接著到2005年,SHA或許僅存的安全散列算法。SHA由美國國家標準與技術研究院(NIST)開發。 ● 1995年公布SHA-1
● 2002年,公布了SHA-2(SHA-256、SHA-384、SHA-512)
● 2008年,增加了SHA-224 更詳細的如下圖所示: 技術分享圖片 安全散列函數的發展 有兩種方法可以攻擊安全散列函數:密碼分析法和暴力攻擊法。散列函數抵抗暴力攻擊的強度完全依賴於算法生成的散列碼長度。Van Oorschot和Wiener曾經提出,花費1000萬美元涉及一個被專門用來搜索MD5算法碰撞的機器,則平均24天內就可以找到一個碰撞。2004年8月中國密碼學家王小雲教授等首次公布了提出一種尋找MD5碰撞的新方法,目前利用該方法用普通微機幾分鐘內即可找到MD5的碰撞,MD5已經被徹底攻破。 三、MD5算法在驗證軟件完整性時可能出現的問題 MD5算法具有以下特點:   (1)壓縮性:任意長度的數據,算出的MD5值長度都是固定的。   (2)容易計算:從原數據計算出MD5值很容易。   (3)抗修改性:對原數據進行任何改動,哪怕只修改1個字節,所得到的MD5值都有很大區別。   (4)強抗碰撞:已知原數據和其MD5值,想找到一個具有相同MD5值的數據(即偽造數據)是非常困難的。 MD5的作用是讓大容量信息在用數字簽名軟件簽署私人密鑰前被"壓縮"成一種保密的格式(就是把一個任意長度的字節串變換成一定長的十六進制數字串)。除了MD5以外,其中比較有名的還有sha-1、RIPEMD以及Haval等。 MD5的用處主要有一下幾個場景:   (1)數據完整性校驗:檢查數據有沒有被篡改過,這裏取個例子。當用Android手機進行OTA升級的時候,下載完升級包(不管是全升包還是增量包),緊接著就是用該升級包的標準MD5進行驗證,如果校驗的結果等於標準的MD5值,那麽就證明這個升級包沒有被篡改過。   (2)不可逆的加密: 像Unix系統中,用戶用用戶名和密碼登陸系統,由於系統中存放的是用戶名和密碼組合MD5校驗值,所以登陸框將會把用戶名和密碼進行MD5算法從而生成用戶名和密碼組合的MD5校驗值,系統由此可以知道能不能登陸成功。 選擇前綴碰撞:將碰撞合並到一對文件中時,除了構成碰撞的相對較小的隨機查找字節塊之外,構造碰撞的原始方法要求文件完全相等。前綴沖突只有在碰撞文件應該完全相等的要求。之前發現碰撞的兩個文件的碰撞可以是任何事情:我們的選擇前綴碰撞查找方法總是會產生一個碰撞,該碰撞可以合並到兩個文件中,而不管在碰撞之前存在什麽數據。 可能出現的問題:如果有第三方在驗證軟件完整性時截取軟件代碼,使用快速MD5碰撞生成器,在短時間內偽造一份相同的MD5,並惡意篡改軟件,那麽安全性將會大大下降。當軟件過大時,在驗證過程中所需的時間也會大大增加,對於第三方而言,攻擊的成功概率也會增加。無法定位給定的散列值,並生成一個(有意義的)輸入位串哈希到給定的值。在加密術語中:我們的攻擊是對抗碰撞的攻擊,而不是對原像或第二原像的抵抗。這意味著,攻擊者必須專門準備兩個相互沖突的文件,然後才能在下載網站上發布或通過代碼簽名方案進行簽名。已知散列的現有文件尚未用這種方法準備好,這些文件不容易受到攻擊。 然而,我們可以很容易地做的是在幾個額外的字節上進行強力搜索,例如讓散列值的前三個和最後三個字節與給定目標匹配。這已經可能引入額外的漏洞,因為很多人(包括我們中的至少兩個人)通常在檢查散列值時僅查看第一個和最後三個字節。 為了濫用軟件完整性保護或代碼簽名方案中的選擇前綴沖突,攻擊者應能夠在文件被散列和/或簽名之前對其進行操作。這可能意味著攻擊者需要內部人員訪問運行可信軟件完整性保護或代碼簽名過程的一方。具有此類訪問權限的攻擊者無論如何都可能會造成更多傷害,而無需選擇前綴沖突,從而獲得惡意軟件上的“官方”數字簽名。

散列函數的應用及其安全性 付淅 2016012063