Mac

“長度擴展攻擊”維基百科頁面範例中的填充是否錯誤?

  • May 7, 2021

維基百科的長度擴展攻擊中

以下資訊總結了發布此問題時頁面上提供的相關資訊。

提供的參數是

  • 秘密長度:14
  • 消息:count=10&lat=37.351&user_id=1&long=-119.827&waffle=eggo
  • 原始簽名是 6d5f807e23db210bc254a28be2d6759a0f5f5d99
  • 該頁面沒有明確說明,但我們可以推斷範例中使用的雜湊算法是 SHA-1(使用 SHA-1 會產生範例中提供的新簽名,0e41270260895979317fff3898ab85668953aaa2)

擴展消息(在頁面上稱為“新數據”,此處重新格式化以刪除換行符和空格)列出為: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=領主

填充應該產生一個以比特為單位的消息長度(不包括擴展),它是 512 的倍數。

計算“新數據”中的位數(不包括副檔名):

  • 消息長度(位)= 55 * 8 = 440
  • 以比特為單位的秘密長度 = 14 * 8 = 112
  • 填充位:58 * 8 = 464
  • 總長度(不包括擴展)= 1016

根據上面的計算,有 8 位失去,所以“新數據”應該包括另一個 \x00。我的計算/推理/理解錯了嗎?

以 1 開頭的 50 字節填充,其餘為 0(每個 \ 是一個字節)

\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

編碼大小的填充的 8 字節大小部分(SHA-1 在使 8 字節的填充中具有 64 位長度編碼)

\x00\x00\x00\x00\x00\x00\x02\x28

0x228 = 552我們有 69 字節的消息大小。

那是對的。55 字節的消息和 14 字節的秘密組成一個 69 字節的消息。

以位為單位的消息構成 552 位,這些位超過一個具有 512 位塊大小的 SHA-1 塊。所以總的來說,我們需要 1024 位用於散列,兩個塊。為消息大小保留 64 位。這留下了 960 位。現在減去 552 位的消息大小,我們有 408 位。所以我們需要 51 個字節的填充,0x80但我們有 50 個,即 $ \color{red}{\text{1-byte is missing. Your calculations are correct}} $ .


我們本應該;

$$ \underbrace{secret}{14-byte}\mathbin|\underbrace{message}{55-byte}\mathbin|\underbrace{100\ldots00}{51-byte \text{ padding 10 part}}\mathbin|\underbrace{000\ldots 0228}{8-byte \text{ length part}} $$


SHA-1 填充規則

附加位 $ \texttt{1} $ 到消息中,例如通過添加字節 $ \texttt{0x80} $ 如果消息長度是 8 位的倍數,即面向字節。

附加 $ 0 \leq k < 512 $ 零位,使得生成的消息長度(以位為單位)與$$ −64 \equiv 448 \pmod{512} $$

附加原始消息長度,作為 64 位大端整數。因此,總長度是 512 位的倍數。


真正的擴展;

&waffle=liege維基百科在附加後不顯示所需的填充。這是 13 個字節的文本,消息的大小為 $ 1024+13*8= 1128 $ . 因此,我們將需要 3 個塊來進行總共 1536 位的擴展。這將是新的 64 位編碼,這將需要 344 位 $ 1000.000 $

$$ \underbrace{secret}{14-byte}\mathbin|\underbrace{message}{55-byte}\mathbin|\underbrace{100\ldots00}{51-byte \text{ padding 10 part}}\mathbin|\underbrace{000\ldots 0228}{8-byte \text{ length part}} \mathbin|\underbrace{\text{&waffle=liege}}{13-byte \text{ extended message}} \mathbin|\underbrace{100\ldots00}{43-byte \text{ padding 10 part}} \mathbin|\underbrace{000\ldots 0468}_{8-byte \text{ extended length part}} $$

另一種觀點;

$$ \text{SHA-1}(\text{secret_key}\mathbin|\text{message}\mathbin| \text{pad1}\mathbin| \text{appended_data} \mathbin| \text{pad2}) $$

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