Vigenere

在 Vigenere 加密上測試 Kasiski 測試和 Vigenere 加密的相互符合指數?

  • October 2, 2016

我正在學習 Vigenere Ciphers 及其各種密碼分析攻擊。其中之一是 Kasiski 測試和相互巧合指數。所以,我想知道 Kasiski 測試和相互巧合索引能否破解 Vigenere 加密本身的 Vigenere 加密(密鑰可能不同或相同),即使用 Vigenere 密碼加密的明文和使用 Vigenere 密碼再次加密的輸出?使用這種方案會給攻擊者造成適當的混亂還是會成為一個漏洞?

Vigenere 算法假設 Alice 將向 Bob 發送消息 (M)。消息是用某種語言編寫的,長度為 ML(組成消息的符號具有已知的頻率,並且屬於具有給定大小 AL 的字母表 A)。為了加密一條消息,Alice 使用一個密鑰 (K),在 Vigenere 算法中,它是稱為 Worm 的符號序列,比消息最短(根據定義),Alice 和 Bob 都知道不需要交換的 K。通過將每個消息符號的值與相應的蠕蟲符號(蠕蟲可能是完全隨機的)模 AL 的值相加來應用加密。

例如:

M = "hello world today is fine"
ML = 25
K = "abc"
KL = 3

M as values :
68 65 6C 6C 6F 20 77 6F 72 6C 64 20 74 6F 64 61 79 20 69 73 20 66 69 6E 65 
K as values :
61 62 63 

如您所見,因為蠕蟲比消息短(根據定義),我們需要一次又一次地重複它以達到 ML

M as values :
68 65 6C 6C 6F 20 77 6F 72 6C 64 20 74 6F 64 61 79 20 69 73 20 66 69 6E 65 
K as values (repeated) :
61 62 63 61 62 63 61 62 63 61 62 63 61 62 63 61 62 63 61 62 63 61 62 63 61 

我們得到的確實是三個凱撒加密的序列(在一般情況下,凱撒加密的數量是 KL = Key Length):

這是第一個凱撒

M as values :
68 65 6C 6C 6F 20 77 6F 72 6C 64 20 74 6F 64 61 79 20 69 73 20 66 69 6E 65
|        |        |        |        |        |        |        |        | 
K as values (repeated) :
61 62 63 61 62 63 61 62 63 61 62 63 61 62 63 61 62 63 61 62 63 61 62 63 61 

Caesar SubMessage : 68 6C 77 6C 74 61 69 66 65
Caesar Key : 61

這是第二個凱撒

M as values :
68 65 6C 6C 6F 20 77 6F 72 6C 64 20 74 6F 64 61 79 20 69 73 20 66 69 6E 65
  |        |        |        |        |        |        |        |         
K as values (repeated) :
61 62 63 61 62 63 61 62 63 61 62 63 61 62 63 61 62 63 61 62 63 61 62 63 61 

Caesar SubMessage : 65 6F 6F 64 6F 79 73 69
Caesar Key : 62

這是第三個凱撒

M as values :
68 65 6C 6C 6F 20 77 6F 72 6C 64 20 74 6F 64 61 79 20 69 73 20 66 69 6E 65
     |        |        |        |        |        |        |        |         
K as values (repeated) :
61 62 63 61 62 63 61 62 63 61 62 63 61 62 63 61 62 63 61 62 63 61 62 63 61 

Caesar SubMessage : 6C 20 72 20 64 20 20 20 6E
Caesar Key : 63

如果我們在子消息上“定期拆分”主消息上的符號頻率保持不變,因此對凱撒的經典攻擊(基於頻率的攻擊)仍然適用於三個凱撒子消息。

正如您所想像的,如果您將 Vigenere 加密加倍,則攻擊的複雜性不會改變(例如:add K1 = “def”)。

M as values :
68 65 6C 6C 6F 20 77 6F 72 6C 64 20 74 6F 64 61 79 20 69 73 20 66 69 6E 65 
K as values :
61 62 63 

K1 as values :
64 65 66

這是因為 Vigenere encription 是由 Caesar encription 組成的,而 Caesar encription 是一個關聯操作,所以:

( 68 + 61 mod AL ) + 64 mod AL = ( 68 + ( 61 + 64 mod AL ) ) mod AL

所以雙重加密相當於在單一加密中更改密鑰,但密鑰性質(隨機或非隨機)並不能解決該算法的任何安全問題。

在上面的範例中(關於雙重加密),通過組合 K 和 K1 獲得的結果密鑰稱為 K2(我假設 AL = 256 並且 A 是 ASCII 表):

K2 = C5 C7 C9

所以雙重加密相當於一個單一的實例,如下所示

M as values :
68 65 6C 6C 6F 20 77 6F 72 6C 64 20 74 6F 64 61 79 20 69 73 20 66 69 6E 65 
K2 as values (repeated) :
C5 C7 C9 C5 C7 C9 C5 C7 C9 C5 C7 C9 C5 C7 C9 C5 C7 C9 C5 C7 C9 C5 C7 C9 C5 

這種態度當然並不比第一個更嚴格。

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