長度擴展攻擊

長度擴展攻擊

密碼學和計算機安全中,長度擴展攻擊(Length extension attacks)是指針對某些允許包含額外信息的加密散列函式攻擊手段。

基本介紹

解釋,示例,實現,

解釋

密碼學和計算機安全中,長度擴展攻擊(Length extension attacks)是指針對某些允許包含額外信息的加密散列函式攻擊手段。
該攻擊適用於在訊息與密鑰的長度已知的情形下,所有採取了H(密鑰∥訊息) 此類構造的散列函式。MD5SHA-1等基於Merkle–Damgård構造的算法均對此類攻擊顯示出脆弱性。注意,由於密鑰散列訊息認證碼(HMAC)並未採取H(密鑰∥訊息)的構造方式,因此不會受到此類攻擊的影響(如HMAC-MD5、HMAC-SHA1)。SHA-3算法對此攻擊免疫。
對此類攻擊脆弱的散列函式的常規工作方式是:獲取輸入訊息,利用其轉換函式的內部狀態;當所有輸入均處理完畢後,由函式內部狀態生成用於輸出的散列摘要。因而存在著從散列摘要重新構建內部狀態、並進一步用於處理新數據(攻擊者偽造數據)的可能性。如是,攻擊者得以擴充訊息的長度,並為新的偽造訊息計算出合法的散列摘要。

示例

一個用於向指定地點的用戶遞送指定種類華夫餅(一種源於比利時的烤餅)的伺服器,可處理如下格式的請求:
原始數據: count=10&lat=37.351&user_id=1&long=-119.827&waffle=eggo原始簽名: 6d5f807e23db210bc254a28be2d6759a0f5f5d99
若且唯若該用戶給出的簽名對於其當前請求(向指定地點的用戶1遞送10個Eggo華夫餅)而言合法時,伺服器才會實際處理該業務。該簽名是一個訊息認證碼(MAC),由某個攻擊者不可知曉的密鑰簽發。(事實上,這個例子對於重放攻擊同樣脆弱,攻擊者亦可能通過二次傳送同樣的請求和簽名來實施攻擊。)
攻擊者可能篡改該請求,在上述例子中,假設某攻擊者把華夫餅的種類從“eggo”改為“liege”,這可以藉助於訊息格式本身的靈活性達到:對於請求字元串中重複的參數域,總是處理最後的參數。這樣的靈活性並不能算作是訊息格式本身的安全漏洞,因為訊息格式在設計之初並未以安全性為前提;安全性需要通過簽名算法的輔助來達到。
攻擊者希望篡改的新數據: count=10&lat=37.351&user_id=1&long=-119.827&waffle=eggo&waffle=liege
為了給此新信息加上合法的簽名,攻擊者通常需要知道用於簽名信息的密鑰,並由此密鑰生成一個新的MAC來作為新簽名。然而,藉助於長度擴展攻擊手段,攻擊者可以將散列(如上給出的簽名)傳遞給散列函式作為原始狀態,而從原請求處開始繼續處理,這只需知道原請求的長度即可;在該請求中,原密鑰的長度為14位元組,這可以通過試探不同長度的偽造請求、並檢查何種長度的請求被伺服器接受而得到。
傳遞給散列函式的信息通常是填充(Padding)後的,因為許多算法只接受長度為指定大小倍數的輸入。填充的內容是由採用的散列函式決定的。攻擊者在新信息中除了包含原信息和偽造信息之外,還應當包含必需的填充位。因而,攻擊者利用填充規則可以構造出如下信息:
新數據: count=10&lat=37.351&user_id=1&long=-119.827&waffle=eggo\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02&waffle=liege
該信息包含了散列函式中添加到原訊息的填充位(在此示例中,是一個0x80,隨後是若干0x00,最後是訊息長度)。攻擊者知道原訊息的散列密鑰/訊息對所對應的狀態直到最後一個“&”為止,均和新訊息是相同的;攻擊者此時亦知道其散列摘要,這意味著散列函式的內部狀態已經被完全偽造。此時,初始化一個散列算法就非常簡單了,給定剩餘的字元串作為輸入,即可生成一個用於簽名的新摘要,而根本無須知曉原密鑰。
新簽名: 0e41270260895979317fff3898ab85668953aaa2
通過連線新簽名和新數據成為一個新請求,伺服器將把該偽造的請求視作一個有效的請求,因為其簽名和在知道密碼情況下生成的簽名完全等效。
該攻擊主要用於偽造已簽名的訊息,但亦可能存在其他用途。

實現

目前實現該類型攻擊的工具並不多。一個藉助於OpenSSL實現了針對多種散列函式的攻擊的工具是 HASHPUMP。該工具支持針對MD5、SHA1、SHA256和SHA512的長度擴展攻擊。SHA224和SHA384受此攻擊的影響相對較小,由於這兩個函式的輸出分別是更長的散列函式(分別是256及512位)的前224位和前384位,因此其輸出並不包含散列內部狀態的全部長度,不能直接使用散列值進行長度擴展攻擊。然而,SHA224和SHA384畢竟輸出了更長散列的很大一部分,因此攻擊者仍然可以輕易地首先窮舉得到剩下的部分(缺失長度僅為32位和128位)後,再實施長度擴展攻擊。因此,不能依賴截取部分散列來實現訊息驗證碼

相關詞條

熱門詞條

聯絡我們