一次字節 ECB 攻擊
這是我關於堆棧溢出/堆棧交換的第一篇文章,所以如果我問的問題不好或格式不好,請原諒。
我目前正在處理密碼挑戰,但我陷入了這個難題:https ://cryptopals.com/sets/2/challenges/12基本上你需要通過利用 AES-ECB 一次提取一個字節來找出一個秘密(您將獲得一個加密使用者文本 + 機密並使用 AES-ECB 加密的函式)。我理解為什麼這種攻擊有效,但我不明白的是我們如何能夠提取超過一個塊大小的秘密字節。因為假設塊大小 = 8。我們進行攻擊並發現了前 8 個字節的秘密,我們如何才能獲得所有其他字節的秘密,因為我們現在將輸入的字節數只是秘密的第一個塊大小的一部分會被發現。
你有和甲骨文的電話
$$ O(\texttt{your-string}) = (\operatorname{AES-128-ECB}(\texttt{your-string} || \texttt{unknown-string}) $$
既然您知道 AES 有 16 字節的分組密碼並且它使用 CBC,請請求;
$$ C = O(\texttt{AAAAAAAAAAAAAAAx}) $$來自甲骨文,在哪裡 $ \texttt{x} $ 是隨機密鑰的第一個字節。
現在要求預言這些加密$$ C = O(\texttt{AAAAAAAAAAAAAAA[a..zA..Z]}) $$看看哪個字元等於 $ \texttt{x} $ , 坐 $ 1 $
現在,一旦我們確定 $ \texttt{x} $ ,我們可以移動到下一個。來自 Oracle 的請求;
$$ C = O(\texttt{AAAAAAAAAAAAAAxy}) $$
現在要求預言這些加密$$ C = O(\texttt{AAAAAAAAAAAAAAx[a..zA..Z]}) $$並查看哪個字元等於第二個字節 $ \texttt{y} $ 的字元串,說 $ 2 $
使用這種方法,我們可以獲得 16 個字節的秘密。如果還有更多呢。要求
$$ C = O(\texttt{AAAAAAAAAAAAAAA1}) $$
然後請求這將提供下一個塊的加密作為輸入
$$ \texttt{234567890abcdef} $$, 你知道的 $ \texttt{234567890abcde} $ 但不是 $ \texttt{f} $ ,但是你得到了這個塊的加密。現在問神諭
$$ C = O(\texttt{234567890abcde[a..zA..Z]}) $$
確定第 17 個字節 $ \texttt{f} $ ,其餘類似。