見出し画像

暗号紹介:ADFGVX暗号(1) 暗号の仕組みと解読方法

表記について

プレーンテキスト(暗号化前のメッセージ)の文字は小文字で、暗号文の文字は大文字で表すことにする。

ADFGVX暗号とは

ADFGX暗号は、ドイツ陸軍大佐Flitz Nebelにより考案された。1918年3月から用いられ、数か月後にはその拡張版であるADFGVX暗号が用いられるようになった。名称の由来は暗号文にA, D, F, G, V, Xの6種類の文字を用いたことに由来し、その6文字が選ばれた理由はモールス符号において互いに区別しやすいからであるという。
フランス人のジョルジュ・パンヴァンにより解読された。その中の一つのメッセージからドイツ軍の襲撃地点を予測し、連合軍は守りを固めた。一週間後にドイツ軍の猛攻が始まったが、激戦の末ドイツ軍は撃退された。

以下の記事やサイトも参考のこと。

ウィキペディア「ADFGVX暗号」
基本的なことは大体書かれている。

暗号解析サイトdcode.fr内のADFGVX暗号化・復号ツール
アプリのダウンロード等不要で解析ツールを使える便利なWebページ。

暗号化方式

ADFGVX暗号は二段階からなる。はじめに、6×6マスの暗号表を用いて、元の文章の1文字を2文字の暗号文字に変換する。このままでは、やってることは単なる単一換字式暗号と変わらず、頻度分析により破られてしまう。そこで、さらに転置を施して、その2文字を別々の位置に引き裂いてしまう。したがって、このままでは頻度分析は使えない。このように、ADFGVX暗号は換字式暗号と転置暗号の組み合わせから成り立っている。

実際に例を用いて暗号化の方法を示す。まず、適当な英文を用意する。

example message

これを換字表を用いて一次暗号文に変換する。今回は図1に示すものを使う。すると、「AVGXAAFAFGDXAVFAAVGAGAAADAAV」という文章を得る。

図1. 元のメッセージから換字表を用いて一次暗号文を作成する
青は2文字からなる暗号文字のうちの始めの文字、オレンジは終わりの文字を示す

次に転置鍵、今回は「53124」を用いて一次暗号文に転置を施し、二次暗号文に変換する。まず、転置鍵の大きさは5であるから、一次暗号文を5列で横書きする。それぞれの列の上に鍵の5,3,1,2,4を書き入れる。そして、1の列から順番に縦に読み取る。これを図2に示す。結果、二次暗号文「GAAVAVXFVGAVFXAAAAGFADAADAGA」を得る。

図2. 一次暗号文から転置鍵を用いて二次暗号文を作成する

ちなみに、転置鍵の作り方として、何らかの単語を用いるという方法がある。例えばweasel(イタチ)を鍵文字として用いることを考える。重複するeを省きweaslとし、各文字をアルファベット順に1,2,…の数字に置き換えると52143となる。
また、図2の暗号格子を見ると右下にスペースがあるが、そこをXで埋める場合もある。

復号方法

ここでは、鍵である換字表(図1に示したもの)と、転置鍵「53124」を知っている正当な受信者が、暗号文「GAAVAVXFVGAVFXAAAAGFADAADAGA」を復号する場合を考える。
暗号化の時と逆の手順を行えばよい。しかし、1つの列に含まれる文字数が一定ではなく、そこで少々戸惑う。

まず、文字を書き込むスペースを用意する。暗号の文字数は28文字、鍵の大きさは5である。よって28÷5=5余り3なので、3つの列は6文字からなり、残る2つの列は5文字からなることが分かる(図3左)。
5つの列の上に鍵の5,3,1,2,4を書く。そして1の列から順番に暗号文を書き入れて(図3中)、スペースを埋めていく(図3右)。
全て埋め終わったら、1行目から順に横に読み取り、一次暗号文「AVGXAAFAFGDXAVFAAVGAGAAADAAV」を得る。これを換字表に従って変換すると「examplemessage」という文を得る。

図3.
左 文字を書き込むスペースを用意する
中 1の列に暗号文を書き入れたところ
右 暗号文をすべて書き入れたところ

特徴

・暗号文字のパターンがA, D, F, G, V, Xの6種類しかない場合、一見して明らかにADFGVX暗号である。そうでなくても暗号文字の種類が6種類しかない場合は、そのバリエーションであろうと考えられる。
・プレーンテキスト1文字を暗号文字2文字に変換するので、暗号文の文字数は基本的には偶数である。しかしやり方によっては余分なXを補うことがあり、その場合は文字数が奇数になることもある。

解読方法

まず暗号格子の列の数(すなわち転置鍵の大きさ)を推定し、元の配列に戻して一次暗号文を得て、それから頻度分析により換字表を推定して元のメッセージを得るのが基本である。

1、転置鍵の大きさを推定する

もし暗号文文字数の素因数分解から、幸運にも暗号格子のサイズが確信できる場合がある。例えば暗号文が703文字ならば703=19×37より転置鍵の大きさは19であるとみてよい(転置鍵の大きさが25を超えることはほぼないらしいので、37の場合はあまり考えなくてよいようだ)。
一般解読法においては複数の暗号文の持つ統計的情報から文字の出現パターン(どの文字が奇数番目・偶数番目に出やすいか)を見出し、そのパターンが逆転するところから一つの列に含まれる文字数を推測し、これにより転置鍵の大きさを推定する、ということを行っている。

2、配列を復元する

ここが一番難しいと思われる。同じ鍵で暗号化された複数の暗号文が得られた場合、一般解読法により解読することができる。これは暗号格子の形状、文字の頻度分析など、あらゆる情報から配列を復元することを行っている。これは第一次世界大戦後に開発された方法なので、コンピューターは不要(のはず)。次回の記事に示す通り、作業量はかなり多い上に内容もかなり難解である。
あるいは配列を総当たりで試すことも考えられる。こちらはコンピューターが必要。

3、換字表を推定する

ここまで来ればもう単一換字式暗号と変わらない。頻度分析を用いて換字表を推定し、解読すればよい。

まとめ

・ADFGVX暗号は換字式暗号と転置式暗号の組み合わせである。
・暗号文にはA,D,F,G,V,Xの6種類の文字が用いられる。
・解読は転置鍵の大きさの推定→配列の復元→頻度分析による解読が原則である。

参考文献

『暗号解読』 サイモン・シン著、青木薫訳
ウィキペディア「ADFGVX暗号」

次の記事


この記事が気に入ったらサポートをしてみませんか?