2017年05月28日

人を惑わせ始めた暗号方式 〜ヴィジュネル暗号で次のステージへ〜

応援クリックを1日1回宜しくお願いいたします。



本日の暗号は、とうとう単一換字式暗号の域を抜けて、多表式換字暗号に入ります。

その中でもヴィジュネル暗号に取り掛かります。
ヴィジュネル暗号 - Wikipedia


過去分はこちら。
↓↓↓
暗号: ラインセグメント日記

ヴィジュネル(Vigenere)というフランス人が考えたそうで、単一換字式暗号が頻度分析により破られそうな時代に必要性に応じて発見したそうです(ヤルネ)。


ヴィジュネル暗号の暗号化・復号化

ヴィジュネル暗号は、任意の長さのアルファベットの暗号鍵を使います。

暗号鍵と平文をそれぞれ0〜25の数字に変換して、平文の各文字をシフトしていきます。

シフトする数は、平文の$n$文字目に対して、暗号鍵の長さを$\ell$として、暗号鍵の$n\mod\ell$文字目の数字だけシフトします。

このシフトを記した$26\times26$の表をヴィジュネル表と呼ぶそうです。


例えば、暗号鍵を「abcde」、平文を「xyzabcde」とすると、暗号文は「xzbdfceg」となります。

平文の最初の5文字「xyzab」に対して「01234」文字ずつシフトして、平文の残りの3文字「cde」に対して「012」文字ずつシフトします。


復号化は、暗号化の手順において、シフトの向きを逆向きにすることで実現されます。

Wikiによると、暗号化と復号化を式で表すと、 \begin{eqnarray*} C_i&=&\left(P_i+K_i\right)\mod26\\ P_i&=&\left(C_i-K_i\right)\mod26\\ \end{eqnarray*} です。ここで、$P_i$は平文(Plaintext)、$C_i$は暗号文(Cipher text)、$K_i$は暗号鍵(Cipher Key)の$i$文字目です。


ヴィジュネル暗号の解読方法

ヴィジュネル暗号は単一換字式暗号でなく、単に頻度分析を行うだけでは解けません。

しかししかし、暗号鍵が一定であり、暗号鍵の長さも一定であるため、暗号化における周期性があります。

さらに、英語の文章には「the」や「to」などのように、よく現れる単語があります。

それらと暗号鍵の周期性が一致したタイミングで、暗号文にも全く同じ文字列が生じます。

そのような文字列を見つけることで、暗号鍵の長さの候補を見つけることが可能となります。

ここまでくると、後はその長さごとに暗号文を区切り、それらのグループ内では同じシフトの方法をとることで、通常の文章に成るようなシフトを見つけることが可能となります。

この方法をカシスキー・テストというそうです。

ただし、ヴィジュネル表を複雑化して、アルファベットの順序良いシフトで無くすことで解読が困難になるそうです。


また、よくある英単語が文頭にくるのではないか、などと推定しつつ、鍵を計算して全体を復号化して意味の通じる文章になれば解読完了とする鍵推理という方法もあるそうです。


上記の解読方法に対する対策として、暗号鍵の長さを平文と同じくらい長くすることが挙げられます。


ヴィジュネル暗号に対する所感

ヴィジュネル暗号は、暗号鍵の各文字によってシフトするという単なる変換のルールでなくしたという点でこれまでの単一換字式暗号とは全然異なる次元に突入した暗号です。

しかし、暗号鍵の何文字目で暗号化したかで区切れば、各文字ごとでは同じシフト数になってシーザー暗号と同一となります。

したがって、シーザー暗号がシフト数を変えて、繰り返し現れるような暗号方式であると言えます。



最後に、ヴィジュネル暗号のアプリケーションを作成しました。
↓↓↓
ヴィジュネル暗号で暗号化



posted by Line Segment at 18:00 | Comment(0) | TrackBack(0) | ホームページ | このブログの読者になる | 更新情報をチェックする