平文が英語のような自然言語であることを知っていれば、 Vigenere cipher で暗号化された暗号文を解読するのは簡単です。平文の暗号化に使用される鍵を発見するための 2つの方法 があります。特定の文字が他の文字よりも頻繁に出現する頻度(e
は英語)、またはプレーンテキストで出現する単語(the
、a
、英語など)。
平文が実際にCSR(暗号で保護されたランダム)データであり、CSR鍵を使用してVigenere暗号を使用して暗号化した場合はどうなりますか。
キーを4回再利用するとします(ランダムがCSRでない場合の欠陥を説明するためですか?)。また、キーは十分に大きいため、ブルートフォースによる強制はオプションではありません(たとえば、キーは1KBである可能性があるため、暗号とプレーンテキストは4KBです)。
同じキー(キーもCSRです)を再利用しているが、プレーンテキストデータほど大きくない場合でも、それを解読することはできますか?
または:これは、暗号化/復号化の他の方法と比べてどの程度安全ですか?
あなたがあなた自身に尋ねる場合: 'なぜランダムなデータを暗号化したいのですか?':
まあ、答えがノーで、それでそれを解読することが不可能であるなら。つまり、2人の間で共有秘密が確立されると、情報理論的に安全な接続を確立できます。共有秘密鍵 'A'が1KBになると、次に、新しくランダムに生成されたデータに対して「A」を2回使用して、2KBの共有秘密鍵「B」を作成できます。次に、1KBの「B」を ワンタイムパッド として、英語の実際の平文通信で使用できます。そして、次の2KBサイズの鍵などを安全に通信するために、残りの1KBの「B」を使用できます。
私は決して使用されておらず、単にランダムであるランダムなデータのVigenere暗号を解読することは困難(おそらく不可能)であることに同意します。
ただし、ランダムデータをワンタイムパッドとして使用するスキームでは、ワンタイムパッドのような情報理論的に完全なセキュリティはありません。
チェーンの中で最も弱いリンクであるVigenere暗号のセキュリティが確保されます。ランダムデータのVigenere暗号を直接攻撃することは簡単にはできませんが、組み合わせを簡単に攻撃することはできます。
Vigenere暗号を誤って覚えていましたが、その主な演算はXORであり、加算モジュロ文字スペースではありません。私の間違いは、XORの特性により、スキームへの攻撃を簡単にします。私は間違ったスキームをVigenereXORと呼びます。
VigenereXORを使用した古い例:
import scipy
Rand_bytes=[scipy.random.random_integers(256) for i in range(512)] # 512 random bytes
vig_key = "MYSECRET"*64
vig_key_bytes = [ord(c) for c in vig_key]
encrypted_random = [(r ^ vk) for r,vk in Zip(Rand_bytes, vig_key_bytes)]
message = "But your scheme where you use that random data as a one-time-pad would not have informational theoretic perfect security like a one-time-pad."
message_bytes = [ord(c) for c in message]
encrypted_message = [(r ^ m) for r,m in Zip(Rand_bytes, message_bytes)]
これで、攻撃者がencrypted_random
とencrypted_message
の両方を観察した場合、それらを一緒にXORすることができます。この時点で、元のメッセージはVigenere暗号で(A XOR B)XOR(B XOR C)= A XOR C;したがって、メッセージVigenereに対するすべての頻度攻撃は直接適用される可能性があります。
実際のVigenere暗号について:
encrypted_random = [(r + vk) % 256 for r,vk in Zip(Rand_bytes, vig_key_bytes)]
高度な攻撃が行われる可能性があります。少なくとも、スキームからの完全なセキュリティは明らかにありません。スキームが完全なセキュリティを備えていれば、Vigenereキーの長さは無関係であり、明らかに、1文字のキーを使用することはできません。 (A + B mod 256)XOR(B XOR C)=((A + B mod 256)XOR B )XOR C.(A + B mod 256)XOR Bはランダムに分散されません(たとえば、A = 8の場合、(A + B mod 256) XOR B
の可能性は8のみです。 B)の256の値をすべて試した後の24,56,120,248。この種の前進は、おそらくこの攻撃を総当たりよりもはるかに優れたものにするために作ることができます。
キースペース(暗号化の前に交換されたもの)が少なくともメッセージスペースと同じ大きさでない場合、情報理論による完全なセキュリティが得られないというのは、一般的な教科書での結果です(簡単な証明が必要です)。 Shannon's classic 1949 paper を参照してください。