Hash

Whirlpool 可以利用 AES-NI 嗎?

  • January 11, 2021

Whirlpool 使用 AES / Rijndael 算法的修改版本。

Whirlpool 能否利用英特爾和英特爾兼容處理器上的 AES-NI 指令(或可能的其他專門結構)?

還是底層 AES 算法修改太多以使 AES-NI 與算法兼容?


作為一個附加(可選)問題:如果 Whirlpool不兼容,調整 Whirlpool 以使用 AES-NI 是否可行且安全?

這不可以。AES-NI 擴展添加了六個用於加速 AES 的新指令。Whirlpool 使用基於 Rijndael 的密碼作為其輪函式。從hash 上的一個頁面,密碼是這樣工作的:

Whirlpool 散列函式

WHIRLPOOL 使用Merkle-Damgård強化和Miyaguchi-Preneel散列方案以及專用的 512 位分組密碼,稱為 $ W $ . 這包括以下內容。要散列的位串用一個'1’位填充,然後用'0’位序列填充,最後用原始長度(以256位整數值的形式),這樣長度填充後是 512 位的倍數。生成的消息字元串被分成一系列 512 位塊 $ m_1 $ , $ m_2 $ , … $ m_t $ 然後用於生成一系列中間雜湊值 $ H_0 $ , $ H_1 $ , $ H_2 $ , … $ H_t $ . 根據定義, $ H_0 $ 是一個由 512 個 ‘0’ 位組成的字元串。計算 $ H_i $ , $ W $ 加密 $ m_i $ 使用 $ H_{i-1} $ 作為密鑰,並將生成的密文與兩者進行異或 $ H_{i-1} $ 和 $ m_i $ . 最後, WHIRLPOOL 消息摘要是 $ H_t $ .

這可以用數學方式表示 $ \mu $ 將輸入映射到矩陣 $ M_{8 \times 8}[\operatorname{GF}(2^8)] $ , $ W $ 是 10 輪 512 位 Whirlpool 分組密碼, $ IV $ 是一個 512 個 0 位的字元串, $ M $ 是長度為的完整消息 $ t $ 塊, $ m_i $ 是一個 512 位塊 $ M $ 在位置 $ i $ , 和 $ m_t $ 包含多達 512 位的 Merkle-Damgård 填充(1 位,盡可能多的 0 位將塊填充到 256 的奇數倍,以及總長度的 256 位右對齊二進製表示 $ M $ ).

$$ \begin{align} \eta_i &= \mu(m_i)\ H_0 &= \mu(IV)\ H_i &= W_{H_{i-1}}(\eta_i) \oplus H_{i-1} \oplus \eta_i\ \operatorname{Whirlpool}(M) &\equiv \mu^{−1}(H_t) \end{align} $$

這 $ W $ 密碼和 $ \mu $ 功能在Whirlpool 論文中有更詳細的描述。

AES-NI 擴展

看看AES-NI是否可以加速 $ W $ ,我們必須看看每條指令的目的。閱讀有關 AES-NI 的英特爾白皮書,說明執行以下操作:

  • **AESENC*使用提供的輪密鑰執行單輪加密。它對數據執行ShiftRowsSubBytesMixColumns步驟。該MixColumns步驟涉及使用 $ \operatorname{GF}(2^8) $ 多項式 $ x^8 + x^4 + x^3 + x + 1 $ ,而惠而浦使用 $ x^8 + x^4 + x^3 + x^2 + 1 $ . 此外,SubBytes使用惠而浦不使用的 AES S-box。 單獨的不同多項式使得該指令無法用於惠而浦。
  • **AESDEC**與上述相同,但使用相反的步驟(即步驟InvShiftRowsInvSubBytesInvMixColumns)。Whirlpool 分組密碼不涉及解密,因此該指令無用。
  • **AESENCLAST**與 相同AESENC,但用於最後一輪加密。主要區別在於它不執行該MixColumns步驟。不幸的是,它仍然SubBytes使用 AES S-box,而不是 Whirlpool S-box。
  • **AESDECLAST**與 相同AESENCLAST,但執行逆變換。
  • **AESIMC**通過InvMixColumns轉換傳遞輪密鑰以使其適合解密。這仍然涉及不兼容的多項式,因此即使 Whirlpool 可以從加速解密中受益,它也不起作用。
  • **AESKEYGENASSIST**實現 AES 密鑰調度。它獲取密碼密鑰並生成必要的輪密鑰。Whirlpool 不使用專用的密鑰計劃。每個輪函式充當密鑰調度,為下一輪創建輪密鑰。

現在,即使這些指令可以用於 Whirlpool 的分組密碼,它們也只能在 128 位塊上執行(儘管根據本文第 2.1 節顯然也可以處理 256 位塊)。Whirlpool 的分組密碼使用 512 位分組。這些說明不起作用。

綜上所述,加密和解密回合的說明與 Whirlpool 完全不兼容。唯一的其他指令執行惠而浦不使用的 AES 密鑰調度。您也許可以修改 Whirlpool 以使用未修改的 AES 子彈,但它不再是 Whirlpool。但是,如果您確實需要硬體加速的加密雜湊,則可以使用新的Intel SHA 擴展。這些用於加速 SHA-1 和 SHA-256。或者,您可以使用設計為由 AES-NI 加速的專用散列算法,如本文所示。

SubBytes*如果 S-box 足夠相似,僅僅因為密碼使用與 AES 不同的 S-box 並不會自動取消它被 AES-NI 的實現加速的資格。例如, Camellia就是這種情況。

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