長度擴展攻擊帶有填充問題的SHA-1消息分割?
我正在閱讀這個例子,
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=liege
13 x 8= 104- 添加到現有消息長度(552)+ 104= 656
- 如果我添加缺失的填充,即 656 mod 512 =144 = 18 bytes
- 64 - 18= 46 x 8 = 368 位
- 104 + 368(消息長度和填充)
好的,讓我們一步一步來:
- 的消息大小
http://example.com/downloadfile=report.pdf
為 10 字節,因為根據文章僅對文件名 (report.pdf
) 進行了雜湊處理;- 密鑰大小通常是已知的,並且在文章中明確設置為 11 字節,而不是 15(順便說一下,11 字節對於密鑰大小來說有點短);
- 所以消息的長度是 10 + 11 = 21 個字節,或 168 位,而 A8 確實是 168;
- 填充 + 長度編碼需要 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。所以我不確定你是如何得到消息大小和密鑰大小的輸入值的,但它們還差得很遠。因此,無論您的公式是否正確,您最終都不會得到正確的值。