Blowfish演算法的操作是什麼?


Blowfish是一種對稱分組密碼演算法,它一次加密64位的資料塊。它遵循Feistel網路,其工作過程分為兩個部分。

  • 子金鑰生成 - 此過程將長度最長為448位的金鑰轉換為子金鑰,總共新增4168位。

  • 資料加密 - 在資料加密過程中,它將迭代16次網路。每一輪都包括金鑰相關的置換和金鑰和資料相關的替換。演算法中的運算是在32位字上進行的異或或加法運算。唯一的額外運算是在每一輪中進行四次索引陣列資訊查詢。

讓我們討論這兩個部分:

  • 子金鑰生成 - Blowfish密碼演算法使用大量的子金鑰。這些金鑰在任何資料加密或解密之前都會生成。

    P陣列包含18個32位子金鑰:

    P1,P2,………….,P18。

    有四個32位S盒,每個包含256個條目:

    S1,0, S1,1,………. S1,255

    S2,0, S2,1,……….. S2,255

    S3,0, S3,1,……….. S3,255

    S4,0, S4,1,………... S4,255

    生成子金鑰的步驟

    • 首先,按順序用一個固定字串初始化P陣列和四個S盒,該字串還包含π的十六進位制數字。

      P1=0x243f6a88, P2=0x85a308d3, P3=0x13198a2e, P4=0x3707344,等等。

    • 將P1與金鑰的前32位進行異或運算,將P2與金鑰的第二32位進行異或運算,依此類推,直到金鑰的所有位(最多可達P14)。重複此過程,直到整個P陣列都與金鑰位進行了異或運算。(對於每個短金鑰,都存在部分等效的長金鑰。例如,如果A是64位金鑰,則AA、AAA等都是相同的金鑰。)

    • 可以使用步驟1和步驟2中定義的子金鑰,使用Blowfish演算法加密全零字串。

    • 可以使用步驟(3)的64位輸出恢復P1和P2。

    • 可以使用修改後的子金鑰,使用該演算法加密步驟(3)的輸出。

    • 可以使用步驟(5)的輸出恢復P3和P4。

    • 可以使用此過程繼續,使用不斷變化的演算法的輸出恢復P陣列的所有條目,然後按順序恢復所有四個S盒。

    • 總共需要521次迭代才能生成所有所需的子金鑰。應用程式可以儲存子金鑰,而不是多次執行此推導過程。

  • 資料加密 - Blowfish是一個包含16輪的Feistel網路。

    輸入是64位資料元素x。

    將x分成兩個32位半部分:xL, xR

    然後,對於i = 1到16;

    xL = xL XOR Pi

    xR = F(xL) XOR xR

    交換xL和xR

    第16輪之後,再次交換xL和xR以撤消最後一次交換。

    然後,密文 = xL和xR的連線,xR = xR XOR P17 和 xL = xL XOR P18

    最後,重新組合xL和xR以獲得密文。解密與加密相同,只是P1、P2……P18按相反順序使用。

更新於:2022年3月15日

5K+瀏覽量

啟動您的職業生涯

完成課程獲得認證

開始
廣告
© . All rights reserved.