Mac

長度擴展攻擊帶有填充問題的SHA-1消息分割?

  • November 14, 2019

我正在閱讀這個例子,length extension attack因為這裡給出了 連結

計算時,擴展塊長度如何被 512 整除(SHA 塊大小)。

我假設以下: -

  • 在 SHA 中,塊的大小為 512 位。
  • 最後一個塊必須包含:消息中的其餘數據(mod 512)。
  • 一些填充物(填充)
  • 最後 64 位作為長度

在上面共享的連結中給出的範例中,這extended msg看起來像

http://example.com/downloadfile=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

範例 1 計算

A more precise of asking is that,
message =10 bytes = 80 bits
secret key = 11 bytes= 88 bits
168 mod 512= 160 bits= 21 bytes
64 - 21= 43 
padding +message length= 464+552 =1016 bits
adding /../../../../../../../etc/passwd 32 x 8= 256 bits
Adding it to A8/=  424

How I make sense If I add the missing padding which is 256 mod 512 =256=32 bytes 

64-32  = 32 x8= 256 bits

範例 2

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\x02\x28&waffle=列日

按邏輯進行

  • 消息 = 55 字節 = 440 位
  • 密鑰 = 14 字節 = 112 位
  • 長度編碼 = 552
  • 552 mod 512= 40 位= 5 字節
  • 64 - 5= 59 字節 If you check the padding its 58 bytes not 59 . Can you tell why?
  • 填充+消息長度= 472+552 =1024位
  • 添加額外的&waffle=liege13 x 8= 104
  • 添加到現有消息長度(552)+ 104= 656
  • 如果我添加缺失的填充,即 656 mod 512 =144 = 18 bytes
  • 64 - 18= 46 x 8 = 368 位
  • 104 + 368(消息長度和填充)

好的,讓我們一步一步來:

  1. 的消息大小http://example.com/downloadfile=report.pdf為 10 字節,因為根據文章僅對文件名 ( report.pdf) 進行了雜湊處理;
  2. 密鑰大小通常是已知的,並且在文章中明確設置為 11 字節,而不是 15(順便說一下,11 字節對於密鑰大小來說有點短);
  3. 所以消息的長度是 10 + 11 = 21 個字節,或 168 位,而 A8 確實是 168;
  4. 填充 + 長度編碼需要 64 - 21 = 43 字節,讓我們檢查一下:

%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

是的,這似乎是正確的。

請注意,對於塊大小而言,64 字節是 512 位,例如,它是對值為 80h 的單個字節%80的編碼,因此您需要對字元進行計數,然後除以 3。

所以我不確定你是如何得到消息大小和密鑰大小的輸入值的,但它們還差得很遠。因此,無論您的公式是否正確,您最終都不會得到正確的值。

引用自:https://crypto.stackexchange.com/questions/47778