2016012026 管凌波 散列函数的应用及其安全性
2016012026 管凌波
散列函數的應用及其安全性
一、散列函數是什么。
散列函數即為Hash函數,就是把任意長度的輸入(預映射),通過散列算法,變換成固定長度的輸出,該輸出就是散列值。這種轉換是一種壓縮映射,也就是,散列值的空間通常遠小于輸入的空間,不同的輸入可能會散列成相同的輸出,而不可能從散列值來唯一的確定輸入值。簡單的說就是一種將任意長度的消息壓縮到某一固定長度的消息摘要的函數。
因此,一個“好”的Hash函數具有這樣的特點:對于大的輸入集合使用該函數,產生的輸出結果均勻分布且看起來隨機。Hash函數的首要目標是保證數據完整性。
在密碼學中,Hash函數主要用于校驗數據的完整性,即用來判斷數據是否被篡改過。密碼學Hash函數要求如下兩種情況在計算上不可行。(即沒有攻擊方法比窮舉攻擊更有效):(a)對預先指定的Hash值找到對應的數據塊(單向性);(b)找到兩個不同的數據塊對應相同的Hash值(抗碰撞性)。
二、散列函數的具體應用。
? 密碼學Hash函數應用廣泛,它或許是用途最多的密碼算法。各種不同的安全應用和網絡協議都有它活躍的身影。
(1)?????? 消息認證
消息認證是一種用來驗證消息完整性的一種機制或服務。消息認證確保受到的數據確實和發送時的一樣(即沒有修改、插入、刪除或重放)。此外,通常還要求消息認證機制確保發送方聲稱的身份是真實有效的。當Hash函數用于提供消息認證功能時,Hash函數值通常稱為消息摘要。
消息認證中使用Hash函數的本質如下:發送者根據待發送的消息使用該函數計算一組Hash值,然后將Hash值和消息一起發送過去。接收者收到后對于消息執行同樣的Hash計算,并將結果與收到的Hash值進行對比。如果不匹配,則接收者推斷出消息(當然也可能是Hash值)受到了篡改。
Hash碼可以通過多種不同方法提供消息認證:
a.? 使用對稱密碼算法加密消息和Hash碼。
b.? 使用對稱算法只對Hash碼進行加密。
c.? 不使用加密算法,僅使用Hash函數也能夠實現消息認證。
d.? 通過將整個消息和Hash值加密,能夠在c的基礎上提供保密性。
一般來說,消息認證是通過消息認證碼(MAC)實現的,即帶密鑰的Hash函數。MAC從總體來看是Hash函數與加密函數的集合,更加高效安全。
(2)數字簽名
Hash函數另一個重要應用為數字簽名。數字簽名與MAC相似,在進行數字簽名過程中使用用戶的私鑰加密消息的MAC值,其他任何知道該用戶公鑰的人都能夠通過數字簽名來驗證消息的完整性。在這種情況下,攻擊者要想篡改消息,則需要知道用戶的私鑰。數字簽名的應用比消息認證更加廣泛。
Hash碼提供數字簽名的方案:
使用發送方的密鑰 ,利用公鑰密碼算法僅對Hash碼進行加密。這種方法可提供認證;由于只有發送方可以產生加密后的Hash碼,所以這種方法也提供了數字簽名,這就是數字簽名本質所在。
若既希望保證保密性又希望有數字簽名,則先用發送方的私鑰對Hash碼加密,再用對稱密碼中的密鑰對消息和公鑰算法加密結果進行加密,這種技術比較常用。
(3)其他應用。
a ??基于其的單向性常被用于產生單向口令文件。操作系統存儲口令的Hash值而非其本身。這樣當黑客訪問口令文件時就不能獲得真正口令。當用戶輸入口令時,操作系統將對比輸入口令的Hash值和存儲在口令文件中的Hash值。在多數操作系統中都使用了這種口令機制。
b? ?Hash函數可用來入侵檢測和病毒檢測。將每個文件的Hash值H(F)存儲在安全系統中(如CD-R中),隨后就能夠通過重新計算H(F)來判斷文件是否被修改過。入侵者只能改變F,而不能改變H(F)。
c?? 密碼學Hash函數能夠用于構建隨機函數(PRF)?;贖ash函數的PRF可用于對稱密碼中的密鑰產生。
d?? 可用做偽隨機數發生器(PRNG)
三、結合生日攻擊、以及2004、2005年王曉云教授有關MD5安全性和2017年google公司SHA-1的安全性,說明散列函數的安全性以及目前安全散列函數的發展。
1.散列函數的安全性:
如上文所言,Hash函數的安全性體現在數據完整性上。
散列函數的目的是文件、消息或者其他數據塊產生“指紋”。為滿足在消息認證中的應用,散列函數H必須具有下列性質:
(1)H可適用于任意長度的數據塊。
(2)H能夠生成固定長度的輸出。
(3)對于任意給定的x,計算H(x)相對容易,并且可以用軟/硬件實現。
(4)對于任意給定的h,找到滿足H(x)=h的x在計算上不可行,滿足這一特性的散列函數稱之為:具備抗原像攻擊性。
(5)對于任意給定的數據塊x,找到滿足H(y)=H(x)的y ≠ x在計算上是不可行;滿足這一特性的散列函數稱之為:抗弱碰撞性。
(6)找到滿足H(x) = H(y)的任意一對(x,y)在計算上是不可行的。滿足這一特性的散列函數稱之為:抗碰撞性。
前三個性質是使用散列函數進行消息認證的實際可行要求。第四個屬性,抗原像攻擊,防止攻擊者能夠回復秘密值??谷跖鲎残员WC了對于給定的消息,不可能找到具有相同散列值的可替換消息。滿足上面前5個性質的散列函數稱之為弱散列函數。如果還滿足第6個性質則稱之為強散列函數。
Hash函數的安全性很大程度上取決于抗強碰撞的能力。
2.生日攻擊:
生日攻擊是利用概率論中的生日問題,找到沖突的Hash值,偽造報文,使身份驗證算法失效。假設人數為輸入值,一年的天數為哈希值的位數,當輸入值大于365時,必有重復的映射。由此可以看出,產生哈希沖突所需的輸入樣本數量,遠低于所有可能哈希值的全集數量。在生日攻擊中,即使輸入較少的輸入值,也有很大幾率獲得多個相同的輸出值,即發生哈希碰撞。避免哈希碰撞,需要將哈希位數設置成足夠多的位數。
3. 2004、2005年王曉云教授有關MD5安全性:
MD5是一個在國內外有著廣泛的應用的Hash函數算法,它曾一度被認為是非常安全的。王小云教授帶領她的小組在2004年發布了發現完整MD5算法的碰撞的報告。這是一種主動碰撞破解Hash函數的方式,說明MD5是可以通過主動方法破解的。這意味著,當你在網絡上使用電子簽名簽署一份合同后,還可能找到另外一份具有相同簽名但內容迥異的合同,這樣兩份合同的真偽性便無從辨別。王小云教授的研究成果證實了利用MD5算法的碰撞可以嚴重威脅信息系統安全,這一發現使目前電子簽名的法律效力和技術體系受到挑戰。
4.2017年google公司SHA-1的安全性:
Google發布了哈希函數SHA-1的 哈希碰撞實例。SHA-1是1995年國家標準技術局NIST于1995年標準化的哈希函數。與MD5相比,SHA-1的輸出長度更長,這也意味著出現哈希碰撞的概率更低SHA-1的安全性比MD5更好。SHA-1也廣泛用于數字簽名,與其他散列一樣,SHA-1還將任何輸入消息轉換為長字符串的數字和字母,用作該特定消息的加密指紋。當針對兩個不同的消息產生相同的散列值(指紋)時,出現沖突攻擊,然后可以利用它們來偽造數字簽名,從而允許攻擊者中斷使用SHA-1編碼的通信。說明這個比前輩更加安全的算法也不再那么安全了。
5. 目前安全散列函數的發展:
目前的安全散列函數MD5,SHA-1仍為被大量使用的算法。在SHA-1被Google宣布被破解后,隨著顯卡的不斷進步發展,SHA-1的破解也許也不需要太大難度。未來可能會產生更多復雜的散列函數。
?
四、結合md5算法中的選擇前綴碰撞以及第二個鏈接中的helloworld.exe和goodbyworld.exe兩個可執行文件的md5消息摘要值和兩個文件的執行結果說明md5算法在驗證軟件完整性時可能出現的問題。
MD5算法是一種摘要算法,它可以從多個字節組成的串中計算出由32個字節構成的“特征串”。對于超過32字節的串來說,MD5計算得出的值必然是其一個子集,所以必然存在兩個(或更多)不同的串能夠得出相同MD5值的情況。這種情況就叫做MD5碰撞。
構造前綴碰撞法可制作兩個內容不同但具有相同MD5驗證碼的文件。
MD5算法具有以下特點:
1、壓縮性:任意長度的數據,算出的MD5值長度都是固定的。
2、容易計算:從原數據計算出MD5值很容易。
3、抗修改性:對原數據進行任何改動,哪怕只修改1個字節,所得到的MD5值都有很大區別。
4、強抗碰撞:已知原數據和其MD5值,想找到一個具有相同MD5值的數據(即偽造數據)是非常困難的。
前綴碰撞,以同一個給定的前綴程序A為基礎,在尾部添加不同的附加數據,得到兩個具有相同MD5的樣本B和C。前綴構造法碰撞后的兩個樣本只有尾部少量字節不同,而程序代碼是相同的。通過判斷尾部數據的差異,兩個樣本可以執行不同的程序流程。這種碰撞手法是通過同一前綴程序碰撞生成兩個樣本。
但是,在使用MD5算法來驗證完整性時,由于MD5算法是公開的,所有人都可以獲得和使用MD5算法,那就意味著別人可以利用相同的算法針對你的加密值不斷地進行計算。如果不對MD5算法進行一些處理,那么當我們將自己的重要接口暴露在互聯網上的時候,比如登陸接口,攻擊者就可以同樣利用MD5加密算法對我們進行撞庫攻擊和關鍵信息比對。為了避免這個問題,我們可以給算法增加一個偏移量,比如在原始數據上拼接一段數據在進行加密;或者根據原始數據分布范圍進行轉換,用得到的新值進行MD5計算,這樣子被破解的風險就會大大降低。
?
轉載于:https://www.cnblogs.com/liuseshz/p/9033594.html
總結
以上是生活随笔為你收集整理的2016012026 管凌波 散列函数的应用及其安全性的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQLAlchemy
- 下一篇: 深度学习的常用框架