Blowfish

用三個密鑰解密河豚密碼

  • June 22, 2016

免責聲明:我對密碼學很陌生,而且我沒有很強的數學背景。如果我錯過了明顯的事情,我會提前道歉。

我這個週末參加了一個安全 CTF,我無法解決其中一個問題。現在已經三天了,每當我有空閒時間時,我仍然會嘗試一下,這讓我發瘋。起初看起來很簡單。

標題是“triple Schneier, no Rivest”,它給出了一個明顯加密的文件和三個包含這些數據的二維碼:

# First QR
key=5EBE2294ECD0E0F08EAB7690D2A6EE69
iv=26AE5CC854E36B6B
# Second QR
key=3FDD884B0F6491110CE7A27CD9C670E2
iv=2384D24993B7A941
# Third QR
key=5A1F31323B5F3E79DF1A1A2ABC89B85F
iv=B9B9F5320FDD8706

這是用 base64 編碼的文件:

ewx68DgfNLMEabX/dl62gVO4zki0vaZHWv6E+WCK8i0BH/rsKtIIV0ZlB8Z+fCFWwPQ04ZAi5Np6
s9lG4KnxUyVSAW/E1ccQ9QcOVxTTwduGdZ5+/ypgRIDKbx9B3mE8cZu0KBQ5k+Y1TfhlqYLwzs9E
Xld9C3IMIrzBChFFoVmGEOZT/I/idBoE++ZDDlMGZMsZO37l2/Th/73y5qNn6Ezp1uuqAPoeZbAB
ZSOaGnkKYnMPcjqoJR47NP4L3j0Wt39nZtbvHjQfIAyefqliklsChbTEGeRavqJX8zOg1W5zi3Q/
qKWilBOT5eLhtH9WxOa7aY8gxjcPQWzzXhSUtlZeCXUt2DW+

它有 264 字節長,每個鍵中的 IV 長 8 字節,每個鍵長 16 字節。加上標題中提到的 Schneier,我認為我們有一個河豚密碼是一個非常安全的賭注。

我試過用第一個密鑰解密文件,然後用第二個,然後用第三個。我還嘗試了算法的不同庫/實現。

我什至編寫了一個 python 程序來嘗試這三個鍵的所有可能排列,但沒有一個給我一個明文。

我顯然錯過了一些大事。

這是我最後一次嘗試,我認為這濃縮了我嘗試過的大部分其他事情:

for kr in key_permutations:
   out_name = ''.join( [ str(k['id']) for k in kr ] )
   output = [ first_input ]
   for k in kr:
       cipher = blowfish.Cipher(k['key'])
       i = b''.join(output)
       sys.stdout.buffer.write(i)
       output = cipher.decrypt_cbc(i,k['iv'])

   open(out_name,'wb').write(b''.join(output))

key_permutations是一個 3-uples 列表,其中每個元素都是一個字典,其中包含一個鍵、對應的 iv 和一個任意 ID。我正在使用這個河豚庫

所以我想問題是三個:

  • 有沒有辦法確保這確實是河豚密碼?
  • 給定這 3 個密鑰,有哪些方法可以嘗試破解程式碼
  • Rivest 與 Blowfish 有什麼關係?

提前致謝!

加密是帶有 Blowfish CBC 的 EDE。要解碼密文 ct 反轉加密,即執行

CBC_Decrypt(key3, iv3, ct, t3)
CBC_Encrypt(key2, iv2, t3, t2)
CBC_Decrypt(key1, iv1, t2, pt)

在此之後,純文字 pt 將以:

訣竅是使用 3DES 方法解密,但使用不同的加密算法。雖然 DES 通常使用 3 次,但使用 3DES 方法可以使用 3 種不同的算法……

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