国产精品香蕉在线观看网,亚洲欧美精品综合在线观看,亚洲不卡av一区二区无码不卡,亚洲日本精品国产第一区二区

移動安全 安全管理 應用案例 網絡威脅 系統(tǒng)安全應用安全 數據安全 云安全
當前位置: 主頁 > 信息安全 > 應用安全 >

科普:哈希長度擴大報復打擊淺析

時間:2014-04-18 14:49來源:TuZhiJiaMi企業(yè)信息安全專家 點擊:
貌似大年夜大都滲入師都很少測試暗碼學方面的縫隙。我一向都對暗碼學很有歡愉愛好,因而決定研究web利用開辟者誤用加密算法的環(huán)境,和若何操縱這些縫隙。 一月份的時辰,我研究了下對
Tags應用安全(1006)攻擊方式(4)哈希值(1)  

  貌似大年夜大都滲入師都很少測試暗碼學方面的縫隙。我一向都對暗碼學很有歡愉愛好,因而決定研究web利用開辟者誤用加密算法的環(huán)境,和若何操縱這些縫隙。

科普:哈希長度擴大報復打擊

  一月份的時辰,我研究了下對一些比較弱的Message Authentication codes(MACs)[譯者注:關于MAC與hash的辨別拜見此鏈接],若何進行哈希長度擴大(hash length extension)報復打擊。我發(fā)現一些很不錯的論文和博文,談到了這類報復打擊編制。但是,針對哈希長度擴大報復打擊的具體細節(jié),卻鮮有資料。在這篇文章中,我將會對此進行具體詮釋。

  Message Authentication Codes 101

  Message authentication codes (MACs)是用于驗證信息真實性的。最簡單的MAC算法是如許的:辦事器把key和message連接到一路,然后用摘要算法如MD5或SHA1取摘要。例如,假定有一個網站,在用戶下載文件之前需驗證下載權限。這個網站會用以下的算法產生一個關于文件名的MAC:

  def create_mac(key, fileName)

  return Digest::SHA1.hexdigest(key + fileName)

  End

  最終產生的URL會是如許:

  http://example.com/download?file=report.pdf&mac=563162c9c71a17367d44c165b84b85ab59d036f9

  當用戶倡議要求要下載一個文件時,將會履行下面這個函數:

  def verify_mac(key, fileName, userMac)

  validMac = create_mac(key, filename)

  if (validMac == userMac) do

  initiateDownload()

  else

  displayError()

  end

  End

  如許,只有當用戶沒有私行更改文件名時辦事器才會履行initiateDownload()開端下載。實際上,這類生成MAC的編制,給報復打擊者在文件名后添加自定義字串留下可乘之機。

  Length Extension Attacks, The Simple

  Explanation

  哈希摘要算法,如MD5,SHA1, SHA2等,都是基于Merkle–Damgrd布局。這類算法有一個很成心思的標題問題:假定你知道m(xù)essage和MAC,只需再知道key的長度,雖然不知道key的值,也能在message后面添加信息并計較出響應MAC。

  Example: message + padding +extension

  繼續(xù)用上面的例子,對文件下載的功能進行長度擴大報復打擊:

  http://example.com/download?file=

  report.pdf%80%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%

  00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%A8/../

  ../../../../../../etc/passwd&mac=ee40aa8ec0cfafb7e2ec4de20943b673968857a5

  Length Extensions In Depth

  為了理解這類報復打擊編制,你必需先體味hash函數的內部道理。

  How Hash Algorithms Work

  哈希函數以區(qū)塊為單位把持數據。好比說,MD5, SHA1, SHA256的區(qū)塊長度是512 bits 。大年夜大都message的長度不會剛好可以被哈希函數的區(qū)塊長度整除。如許一來,message就必需被填充(padding)至區(qū)塊長度的整數倍。用前面文件下載的MAC的例子來講,填充后的message是如許的(‘x'暗示key):

  *********xxreport.pdf\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00

  \x00\x00\x00\x00\x00\x00

  \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00

  \x00\x00\x00\x00\x00\xA8

  在本例所用的SHA1算法中,哈希值由五組整數構成。一般我們看到的情勢是把這五個整數轉換為16進制然后連接到一路。運行算法時,初始值(又叫registers)被設置為這組數:67452301, EFCDAB89,

  98BADCFE, 10325476, C3D2E1F0. 緊接著,填充message,再將其豆割為512bits的區(qū)塊。算***流把持每個區(qū)塊,進行一系列的計較并更新registers的值。一旦完成了這些運算,registers里的值就是最終的哈希值。

  Calculating An Extension

  計較擴大值得第一步是成立一個新的MAC。我們起首對待擴大的值:上例中的‘/../../../../../../../etc/passwd’進行哈希摘要。可是,在進行摘要之前,我們要把registers里的初始值設置為原始message的MAC。你可以將其想象為讓SHA1函數從辦事器上的函數運行結束的處所繼續(xù)進行。

  報復打擊者的 MAC = SHA1(extension + padding) <- 籠蓋registers初始值

  這個報復打擊有個前提,在傳進辦事器的哈希函數時,擴大值必需存在于伶仃的區(qū)塊中。所以我們的第二步,就是計較出一個填充值使得 key + message + padding == 512 bits 的整數倍。在此例中,key是11個字符的長度。是以填充以后的message是如許的:

  report.pdf\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00

  \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00

  \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xA8

  傳送到辦事器的填充及擴大以后的message和新的MAC:

  http://example.com/download?file=report.pdf%80%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%

  00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%

  00%00%A8/../../../../../../../etc/

  passwd&mac=ee40aa8ec0cfafb7e2ec4de20943b673968857a5

  辦事器要進行摘要運算的被報復打擊者竄悔改的message以下:

  secret + message + padding to the next block +

  extension + padding to the end of that block.

  辦事器算出的哈希值將是ee40aa8ec0cfafb7e2ec4de20943b673968857a5,正好與我們添加擴大字串并籠蓋registers初始值所計較出來的一樣。這是因為報復打擊者的哈希計較過程,相當于從辦事器計較過程的一半緊接著進行下往。

  How To Run The Attack

  為了簡單,在這個例子中我流露了密鑰長度是11位。在實際報復打擊環(huán)境中,報復打擊者沒法獲知密鑰長度,需要對其長度進行猜想。

  繼續(xù)之前的例子,假定當MAC驗證掉敗時,這個存在縫隙的網站會返回一個弊端信息(HTTP response code 或response body中的弊端動靜之類)。當驗證成功,可是文件不存在時,也會返回一個弊端信息。假定這兩個弊端信息是不一樣的,報復打擊者便可以計較不合的擴大值,每個對應著不合的密鑰長度,然后別離發(fā)送給辦事器。當辦事器返回表白文件不存在的弊端信息時,即申明存在長度擴大報復打擊,報復打擊者可以隨便計較新的擴大值以下載辦事器上未經許可的敏感文件。

  How To Defend Against This Attack

  解決這個縫隙的編制是利用HMAC算法。該算法大年夜概來講是如許 :MAC =

  hash(key + hash(key + message)),而不是簡單的對密鑰連接message以后的值進行哈希摘要。

  具體HMAC的工作道理有些復雜,但你可以有個大年夜概的體味。重點是,因為這類算法進行了兩重摘要,密鑰不再受本文中的長度擴大報復打擊影響。HMAC最早是在1996年被頒發(fā),以后幾近被添加到每種編程說話的尺度函數庫中。

  Summary

  雖然仍有一些瘋狂的人類在寫本身的加密算法,盡大年夜大都人已垂垂發(fā)現本身寫加密算法不是甚么好主張。但是,不純真的套用公開的加密算法也是有其意義的,前提是你可以或許準確的利用這些加密算法。除非你完全吃透你利用的加密算法的道理,并知道若何準確利用,不然仍是直接用那些顛末端專業(yè)級審查的高級算法庫要安然些。

------分隔線----------------------------

推薦內容