Encryption

減少長河豚鑰匙的大小

  • June 5, 2018

我正在對使用河豚進行加密的軟體進行逆向工程。目標使用了一種允許任意正密鑰長度且密鑰大小大於 56 字節的河豚實現。

我正在尋找一種將密鑰大小減少到 56 字節的方法,以便我可以使用標準庫來處理加密,而不是像目標那樣使用自定義實現。

我首先將密鑰大小減少到 72 個字節,因為我在這裡讀到超過 72 個的密鑰字節無效。這個 72 字節用作原始較長密鑰的替代品。

有沒有辦法將密鑰進一步減少到 56 個字節?

沒有通用的方法來使用實現 Blowfish 並強制其最大 56 字節密鑰大小的函式來模擬實現不強制該限制的 Blowfish 變體的函式(這實際上意味著它最多使用 72 字節的密鑰) . 對於大多數超過 56 字節的密鑰,明文/密文映射會有所不同;合併多個電話將無濟於事。

唯一的例外是在截斷為 72 字節後恰好是周期性的,週期最多為 56 字節。在這種情況下,可以找到句點,將鍵截斷為句點,並將截斷的鍵傳遞給強制執行最大 56 字節密鑰大小的函式。如果該函式支持截斷的密鑰大小,則此方法有效,因為 Blowfish 指定該密鑰是循環使用的。

範例:密鑰ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP(64 字節)可以截斷為ABCDEFGHIJKLMNOP(16 字節)。

注意:如果不支持截斷為 72 字節的實際密鑰的最小周期(例如,因為可用的 Blowfish 函式強制密鑰長度為 4 字節的倍數),但支持小於 56 的某些倍數,則它是可以使用那個倍數。密鑰ABCDEFGHIJKABCDEFGHIJKABCDEFGHIJKABCDEFGHIJKABCDEFGHIJKABCDEFGHIJKABCDEFxxxx(76 字節,週期 11 的前 72 個)可以截斷為ABCDEFGHIJKABCDEFGHIJKABCDEFGHIJKABCDEFGHIJK(44 字節)。

但是在逆向工程或密碼分析等任何事情中,我無法理解為什麼需要*“使用標準庫來處理加密而不是使用自定義實現”*。應該可以自由使用 C/C++ 或 Go 之類的編譯語言,然後 Blowfish 以原始碼形式提供,程式碼很少,改變其 56 字節限制是微不足道的,而這種自定義實現可以通過切割提供最佳速度在界面下。

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