Blowfish演算法中子金鑰是如何生成的?


Blowfish是一種對稱分組密碼演算法,由布魯斯·施奈爾於1993年12月發明。Blowfish是DES或IDEA的替代方案。Blowfish是最流行的Feistel網路密碼之一。Blowfish演算法具有64位塊大小和可變金鑰長度(從42位到448位)。該演算法包括金鑰擴充套件部分和資料加密部分。

Blowfish將最多448位的金鑰建立為多個子金鑰陣列,總共1042個32位值或4168位元組。它是一個16輪Feistel系統,支援非常高的金鑰相關S盒並啟用16次迭代。

每一輪都使用金鑰和資料相關的替換以及金鑰相關的置換進行調整。32位字和XOR運算透過加法實現。有一個P陣列和四個32位的S盒。

P陣列包含18個32位的子金鑰,而每個S盒包含256個條目。輸入是一個64位資料元素。子金鑰生成的流程如下:

  • Blowfish使用了大量的子金鑰。這些金鑰必須在加密和解密出現之前準備好。金鑰大小欄位從32位到448位。換句話說,金鑰大小範圍從1到14個字,每個字包含一個32位的字。這些金鑰按如下方式儲存在陣列中:

    K1、K2、…、Kn,其中1 ≤ n ≤ 14

  • 包含18個32位子金鑰的P陣列的概念:

    P1、P2、……、P18。

    P陣列的建立將在後面描述。

  • 有四個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陣列的建立將在後面定義。

  • 可以先初始化P陣列,然後初始化四個S盒,使用一個固定的字串。

  • P陣列和四個S盒表示為Pi的十六進位制數字。

  • 可以實現P陣列和K陣列的按位XOR運算,重複使用金鑰位所需的K陣列中的字(即,P1 XOR(金鑰的32位),P2 XOR(金鑰的32位)。

  • 可以加密64位塊,並使用以下加密過程來使用通用的P和S陣列加密全零資料。

  • 可以使用加密的輸出替換p1和p2,新的輸出稱為p1和p2。

  • 可以使用當前的P盒和S盒加密步驟3的輸出,並使用加密後的文字替換p3和p4,新的輸出稱為p3和p4。

  • 可以重複以下步驟,直到獲取P陣列的所有元素,即P1、P2。

更新於:2022年3月15日

1K+ 瀏覽量

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告