密碼學 - 轉置密碼



現在讓我們討論轉置密碼演算法。到目前為止我們使用的密碼都是替換密碼,其中明文中的字元被更改為其他字元、數字或符號。轉置密碼是一種附加型別的密碼。轉置密碼重新排列明文訊息中的字母,同時仍然使用它們。

轉置密碼應該很容易識別,因為字母頻率應該類似於英語,字母 a、e、i、n、o、r、s 和 t 的頻率很高。然而,轉置密碼可能難以進行密碼分析。關鍵詞策略是將密文字母重新排列成“有意義的”文字,即字母的重新排列模式包含了密碼的秘密。

例如,單詞 LAUGH 有五個不同的字母。五個不同的字母可以以 5! = 120 種方式排列,並且恰好有一種排列應該構成一個單詞。暴力攻擊將嘗試不同的字母組合,直到識別出該單詞;最多需要 120 次嘗試。利用語言模式來連線單詞片段並將其排列以構成單詞是一種更有效的策略。

在本章中,我們將看到不同型別的轉置密碼演算法、它們的工作原理以及它們以不同方式的實現。

轉置密碼是如何工作的?

正如我們上面所看到的,轉置密碼的工作原理是根據特定的模式或規則重新排列訊息中的字母。所以讓我們假設你有一條訊息“HELLO”,你想保密。我們不是更改字母本身,而是根據規則重新排列它們。

例如,讓我們假設規則是在具有特定列數的網格中寫入訊息。如果我們使用 2 列,“HELLO”將變成:

Columnar Transposition

現在,我們將以不同的順序讀取給定的列,例如從左到右,從上到下。因此,加密後的訊息將是“HLOEL”。

要解密它,我們只需要知道用於重新排列字母的規則。在本例中,我們知道它是一個 2 列的網格,因此我們將字母重新排列回“HELLO”。

這就是轉置密碼工作原理的主要概念。這就像以秘密的方式玩一個重新排列字母的遊戲。

轉置密碼演算法型別

  • 柵欄密碼 - 稱為“柵欄”密碼的轉置密碼的名稱來源於其編碼方式。柵欄密碼的明文向下寫在虛構柵欄的連續“欄”上,在底部向上移動。然後,讀出訊息的行。

  • 路線密碼 - 路線密碼在將明文寫入給定維度的網格後,按照金鑰中給出的模式讀取明文。與柵欄密碼相比,路線密碼的金鑰要多得多。實際上,即使使用目前的科技,對於合適長度的訊息,可能的金鑰數量也可能過大。但並非所有金鑰都是平等的。路線選擇不當會導致明文的大部分內容只是被反轉——這將為密碼分析員提供關於路線的線索。

  • 列置換密碼 - 當訊息逐列轉置時,它以特定長度的行寫出,然後再次讀取,並按不規則順序選擇列。在大多數情況下,關鍵字同時定義行寬和列排列。不規則列置換密碼中的任何空位置都保持未填充,而在標準列置換密碼中,空格用空值填充。最後,訊息按關鍵字指定的順序逐列讀出。

  • 雙重轉置 - 攻擊單一列置換的一種方法是估計可能的列長,將訊息寫入其列中,然後搜尋可能的字謎。因此,經常使用雙重轉置來增強其強度。這裡所做的只是兩次列置換。對於兩次轉置,可以使用一個金鑰或兩個單獨的金鑰。

  • 密斯基沃斯基轉置法 − Emile Victor Theodore Myszkowski 在 1902 年建立了一種變體的列式轉置法,但它需要一個包含重複字母的關鍵詞。通常情況下,當關鍵詞中的字母重複出現時,會被視為字母表中的下一個字母。

  • 擾亂轉置法 − 在擾亂轉置法中,某些網格點會被空出不用,在填充明文時跳過這些點。這會擾亂規則模式,增加密碼分析師的任務難度。

  • 格柵:格柵,或帶有切口的實際遮罩,是一種不同型別的轉置密碼,它不依賴於數學公式。通訊雙方必須保持物理金鑰的機密性,才能實現高度不規則的轉置,這種轉置的持續時間由格柵的大小決定。

  • 檢測和密碼分析 − 密碼分析師可以使用頻率計數來快速識別基本的轉置密碼,因為它不會影響單個符號的頻率。如果密文的頻率分佈與明文的頻率分佈匹配,則很可能是一種轉置密碼。一種常見的攻擊方法是字母改組,它涉及到移動密文的部分內容,尋找看起來像是英語單詞的字母組合,然後解決這些字母組合。一旦找到這樣的字母組合,就可以擴充套件它們,因為它們提供了關於轉置模式的資訊。

  • 組合 − 轉置法經常與其他方法結合使用。例如,可以透過將列式轉置與簡單的替換密碼結合起來來避免兩者的弱點。由於轉置的存在,當高頻密文字母被替換為高頻明文字母時,明文的部分內容仍然隱藏起來。這種替換使得無法對轉置進行字母改組翻譯。這種方法與分餾法結合使用時非常有效。

  • 分餾法 − 當使用分餾法時,轉置法可以很好地工作,分餾法是一個預先的步驟,它將每個明文字元分成多個密文字元。例如,可以將明文字母表在一個網格中打出來,然後用每個字母在訊息中的座標來替換它。另一種分餾訊息的方法是簡單地將訊息翻譯成摩爾斯電碼,摩爾斯電碼使用點、劃和空格符號。

使用 Python 實現

此實現向您展示瞭如何使用 Python 中給定的金鑰對訊息進行加密和解密。這是這種密碼學的非常基本的實現。程式碼中使用的金鑰顯示了加密和解密網格的行數。

示例

以下是使用 Python 的轉置密碼的基本實現。請檢查下面的程式碼 −

def transposition_encrypt(message, key):
   # Create an empty grid 
   grid = [''] * key

   # Fill the grid with the message 
   for i, char in enumerate(message):
      row = i % key
      grid[row] += char

   # Join the rows together 
   encrypted_msg = ''.join(grid)
   return encrypted_msg

def transposition_decrypt(encrypted_msg, key):
   # Calculate the number of columns
   cols = len(encrypted_msg) // key

   # Create an empty grid 
   grid = [''] * key

   # Fill the grid
   for i in range(cols):
      for j in range(key):
         grid[j] += encrypted_msg[i * key + j]

   # Join the columns 
   decrypted_msg = ''.join(grid)
   return decrypted_msg

# function execution
message = "HI THIS IS RIYA"
key = 2
encrypted_msg = transposition_encrypt(message, key)
print("The Encrypted message:", encrypted_msg)

decrypted_msg = transposition_decrypt(encrypted_msg, key)
print("The Decrypted message:", decrypted_msg)

以下是上述示例的輸出 −

輸入/輸出

Encrypted message: H HSI IAITI SRY
Decrypted message: HHIIIIS S AT R

轉置密碼的特性

以下是轉置密碼的一些特定特性 −

  • 轉置密碼很容易被破解,因為它只重新排列字母,而不是改變它們。

  • 還有其他重新排列字母的方法,例如將它們寫在網格中或將它們移到特定距離。

  • 要解碼訊息,我們必須理解應用於字母重新排列的演算法或模式。

缺點

正如我們所看到的,與其他一些加密方法相比,轉置密碼並不十分安全。原因如下 −

  • 此技術只改變字母的順序,這意味著駭客很容易找出模式並解密訊息。

  • 由於我們不改變字母,因此可以找出字母的頻率並猜測用於重新排列它們的模式。

  • 轉置密碼的安全性主要依賴於保持重新排列字母的方法的秘密。如果模式或規則已知,則可以輕鬆解密訊息。

  • 它不適用於大型訊息,因為重新排列過程可能非常耗時。

總而言之,轉置密碼簡單易用,但其簡單性使其在保護敏感資料方面安全性較低。

總結

在本章中,我們學習了轉置密碼,其工作機制、特性、缺點以及在 Python 中的基本實現。在接下來的章節中,我們將學習轉置密碼的加密和解密演算法。

廣告
© . All rights reserved.