Aes

分割遮罩對策如何在 AES 上起作用?

  • April 27, 2016

我試圖了解拆分遮罩對策,這是一種避免側通道攻擊的****遮罩方法。我們先描述一下原理,然後嘗試將其應用到AES中。

我發現這篇論文分析了這種方法。首先,我將引用第二部分中給出的拆分遮罩對策的介紹:

讓 $ S $ 是一個有輸入的 S-box $ x $ 並輸出 $ S(x) $ 實現為查找表。拆分遮罩實現 $ S $ 由一個蒙面表組成 $ S′ $ 和一張面具表 $ M $ . 這些表定義如下:

$$ \begin{equation} S’(x \oplus n) = S(x) \oplus r_x, \hspace{1cm}\ M(x \oplus n) = r_x \oplus m \hspace{1cm}(1)\ \end{equation} $$ 這意味著 S-box 的輸入被 $ n $ ,並且每個輸出值都被一個單獨的隨機值屏蔽 $ r_x $ . 這給出了遮罩表 $ S’ $ . 輸出遮罩集 $ r_x $ 也儲存在遮罩表中 $ M $ 以便

$$ \begin{equation} S’(x \oplus n) \oplus M(x \oplus n) = S(x) \oplus m \hspace{1cm}(2) \end{equation} $$ 對每個輸入都成立 $ x $ . 換句話說, $ m $ 可以看作是的輸出遮罩 $ S $ 分成兩股 $ r_x $ 和 $ M(x \oplus n) $ ,拆分對於每個表條目都是單獨的。 據稱,使用單個遮罩表的拆分遮罩對策可以阻止一階 DPA 攻擊。為此,原始描述要求 $ (2) $ 絕不應在算法執行期間直接計算(顯示為中間值)。

除了這句話,我的描述似乎很清楚:

為此,原始描述要求 $ (2) $ 絕不應在算法執行期間直接計算(顯示為中間值)。

那麼應該如何計算呢?

因此,讓我們考慮一下我們要使用AES拆分遮罩對策來加密塊數據。我們首先生成 $ n $ , $ m $ 和 256 字節 $ r_x $ 計算 $ S’ $ 和 $ M $ .

但是,當我們必須應用 $ \texttt{SubBytes} $ 算法執行過程中,如何進行?

在上面提到的同一篇論文中說:

具體實現的其他細節可以在

$$ 10, 11, 12, 13 $$. 在這些論文中,針對優化的 AES 實現提出了對策 $ 8 \times 32 $ 位查找表,用於同時計算 S-box 和擴散。

但它涉及優化 $ 32 $ -bit 實現,我想簡單地為傳統的實現它 $ 8 $ -bit 版本,所以它對我沒有多大幫助……

看論文的時候注意力不夠集中。圖 2 說明了操作:

在此處輸入圖像描述

所以計算後 $ S’ $ 和 $ M $ ,在第一輪, $ \texttt{AddRoundKey} $ 步驟保持不變,但此外,圓形鍵與 $ n $ . 所以如果塊數據是 $ x $ , 在第一個之後 $ \texttt{AddRoundKey} $ 我們得到 $ x \oplus k \oplus N $ (在哪裡 $ N = n \space || \space n \space|| \space n \space ||\space … \space||\space n $ 得到一個 $ 128 $ 位塊)。然後我們照常執行算法的其餘部分:

  • 這 $ \texttt{SubBytes} $ 使用 $ S’ $ 返回 $ S(x) \oplus r_x $
  • 然後 $ \texttt{ShiftRows} $ 執行操作,因為它是一個 線性操作,我們得到 $ \texttt{SR}(S(x)) \oplus \texttt{SR}(r_x) $
  • 同樣的評論適用於 $ \texttt{MixColumns} $ 操作,我們終於得到 $ \tilde{S} = \texttt{MC(SR}(S(x))) \oplus \tilde{r_x} $ 在哪裡 $ \tilde{r_x} = \texttt{MC(SR}(r_x)) $ .

並行地,我們必須對遮罩執行相同的操作 $ M $ 我們得到: $ \tilde{M} = \tilde{m} \oplus \tilde{r_x} $ 在哪裡 $ \tilde{m} = \texttt{MC(SR}(m)) $ .

那麼,接下來 $ \texttt{AddRoundKey} $ 還與 $ \tilde{m} \oplus \tilde{M} \oplus N $ 為下一輪“重新平衡”它: $ \tilde{S} \oplus \tilde{m} \oplus \tilde{M} \oplus k \oplus N = \texttt{MC(SR}(S(x))) \oplus k \oplus N $

ETC…

最後,最後 $ \texttt{AddRoundKey} $ (所以在最後一輪),不是通過與 $ n $ 但仍然伴隨著經歷的轉變 $ M $ 和 $ r_x $ (注意不是 $ \tilde{r_x} $ 和 $ \tilde{M} $ 如上所述,因為操作 $ \texttt{MixColumns} $ 最後一輪省略)。

正如他在回答中指出的那樣:

  • 無需計算 $ (2) $ , 這只是一個警告作為預防措施
  • 上述論文揭示了使用相同的 $ n $ 許多輸入引入了一個弱點。

給定一些中間數據 $ x $ 作為兩股 $ x=x_1\oplus x_2 $ 隨機取一些新鮮的 $ r $ 計算新股 $ x_1’ = ((x_1\oplus r)\oplus x_2)\oplus(n\oplus r) $

$$ parenthesis indicating the order of evaluation $$和 $ x_2’ = n $ . 現在你可以使用 $ x_1’ $ ( $ =x\oplus n $ ) 作為兩個表的輸入。 “那麼應該如何計算?”的答案 根本不是。它不是必需的。我認為這只是一個警告,將 (2) 作為中間值將是一個問題,因為 $ m $ 對於許多明文保持不變。奇怪的是,分離掩模對策的發明者並沒有意識到保持 $ n $ 對於許多明文來說,常數會帶來相同的風險。對您連結到的論文進行了簡短的瀏覽,給我的印像是它將在後面的章節中暴露出這個弱點。

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