Aes

是否可以在給定密鑰的一部分、密文、初始化向量和加密模式的情況下找到 AES 密鑰?

  • February 25, 2022

給出了以下詳細資訊:

  • 部分密鑰:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX11000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011
  • 初始化向量:E898EF8E91F8C9B201E6E29DF87EE152
  • 密文塊 1:14B8D1412766A8520BACE4598F8AFAEE
  • 密文塊 2:7E687A49015FA6F1B914635325A6361B
  • 密文塊 3:8AD191394EF79CEC4B5A256313632CD4
  • 密文塊 4:8BB4D49F3FA7A917CDF02ECCAA8C4765
  • CBC模式無填充
  • 字元集:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890⌴‛~@#$%^&*(){}[]+=-_<>,.?/!:\;’|"
  • 字元集資訊:範圍 [32,127),ASCII 編碼,每個字元為 8 位

我的想法是,您需要以某種方式使用已知的 32 位密鑰中的每一個來解密每個密文塊並進行處理。問題是第一個密文塊有一個不匹配的密鑰(XXX …)

因此,您將獲得除前 32 位之外的所有已知字元的純文字。

可以實現搜尋 32 位鍵空間嗎?

帶有 AES-NI 的 OpenSSL 可以在我的機器上每 3 秒在 CBC 模式下對 64 字節塊 AES-128 執行 61510120 次迭代。

執行openssl speed -evp AES128以查看您的機器。

這使得 $ 2^{26} $ 鍵空間三秒鐘。一需要 $ 2^{6} =64*3 $ 幾秒鐘就可以找到具有良好編碼的關鍵候選者。


為您的事業創建 3 個功能;

  • $ P = \operatorname{AES-Dec-CBC}(k, IV, C) $ 在哪裡 $ C $ 是密文塊和 $ P $ 是目前密鑰下的解密明文 $ k $ 的 $ C $ .
  • $ k =\operatorname{GetNextCandidateKey(current)} $ 這個簡單的增加電流並創建一個鍵 $ k = current\mathbin|1100\cdots011 $ 以二進制形式。您需要將其轉換為二進制以適應標準加密庫
  • $ b = \operatorname{CheckTheMessage}(P) $ . 此函式獲取明文並檢查字節是否在範圍內。如果不返回0,否則返回1

現在有了這三個功能;


current = -1

while current < 2^32 do:
   k = GetNextCandidateKey(current)
   P = AES-Dec-CBC(k, IV, C)
   b = CheckTheMessage(P)

   if b == 1
       print(current)
   current++

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