暗号紹介:プレイフェア暗号(1) 暗号の仕組みと解読方法
表記について
プレーンテキスト(暗号化前のメッセージ)の文字は小文字で、暗号文の文字は大文字で表すことにする。
プレイフェア暗号とは
1854年、イギリスの物理学者チャールズ・ホイートストンによって考案された暗号。友人のライアン・プレイフェアがその普及に努めたため、その名を冠して呼ばれる。
第2次ボーア戦争や第一次世界大戦においてイギリス軍がこの暗号を使用。第二次世界大戦においてもオーストラリア軍が使用した。
現代においては、コンピューターを用いてマイクロ秒程度で解読できるため、もはや安全ではない暗号と見なされている。
以下の記事やサイトも参考のこと。
ウィキペディア(英語版)「Playfair cipher」
基本的なことは大体書かれている。
暗号解析サイトdcode.fr内のプレイフェア暗号化・復号ツール
アプリのダウンロード等不要で解析ツールを使える便利なWebページ。
暗号化方式
暗号化方式は、プレーンテキスト1文字ごとにではなく、2文字組ごとに行う点に特徴がある。複数文字ごとに暗号化を施す試みをした暗号は、プレイフェア暗号が史上初である。
実際に例を用いて暗号化の方法を示す。まず、適当な英文を用意する。
これを、2文字ごとに区切る(スペース、カンマなどは無視)。ここで注意するべきことは、プレイフェア暗号において同じ2文字からなる組は禁じられていることである。もしこのような組が出来そうになったら、意味のない文字として、x(あるいはq)を挿入して分割する。また、最後に1つだけ文字が残った場合もx(あるいはq)を補う。こうしてできた文章を次に示す。
暗号化するにあたり、暗号表を作る必要がある。この暗号表は5×5の25マスからなり、そこにアルファベットを1文字ずつ書き入れていくのだが、アルファベットは26文字あり、1文字多い。そこで一般的にはIとJが交換可能であるとし、Jを省く(他の文字を省く流儀もある)。
キーワードを決めて暗号表を作成する。ここではキーワードを「HANCOCK」(アメリカ独立宣言に最初に署名した人物ジョン・ハンコックに因む)とする。重複を省いてキーワードをマスに書き込む。すると図1のようになる。
残りのマスに、残ったアルファベットを順に書き入れていく。ただし上述したようにJは省く。すると図2のようになる。
この暗号表を用いて、暗号化を行う。まず、whを暗号化する。WとHは表の同じ行にも列にもない。この場合、2つの文字を角に持つ長方形を作り、それぞれの文字を、同じ行の別の角にある文字に置き換える。図3のようにWとHと角に持つ長方形を作る。Wは同じ行にある別の角のVに、Hは同じ行にある別の角のAに変換される。したがってwhを暗号化するとVAになる。同様にenを暗号化するとDCに、inを変換するとLAに、……となる。
次にecを暗号化する。EとCは同じ列に存在する。この場合、それぞれの文字をすぐ下にあるマスの文字に置き換える。図4のようにEはMに、CはEに変換される。したがってecを暗号化するとMEになる。同様にouを暗号化するとFZになる。
次にrsを暗号化する。RとSは同じ行に存在する。この場合、それぞれの文字をすぐ右にあるマスの文字に置き換える。図5のようにRはSに、SはTに変換される。したがってrsを暗号化するとSTになる。
以下、同様にして暗号化を施すと次の暗号文を得る。
ここでは可読性のために2文字ずつスペースで区切っているが、問題によってはスペース区切りがない場合もある。
復号方法
復号とは、鍵を知っている正当な受信者が、暗号文から元のメッセージを得る作業のことをいう。その方法は、暗号化とは逆の操作をすればよい。
それぞれの2文字組に対して、
1、暗号表において2文字が同じ行にも列にもない場合、2つの文字を角に持つ長方形を作り、それぞれの文字を、同じ行の別の角にある文字に置き換える。これは暗号化の時と変わらない。
2、2文字が同じ列にある場合、2つの文字をそれぞれすぐ上にあるマスの文字に置き換える。これは暗号化の時と逆である。
3、2文字が同じ行にある場合、2つの文字をそれぞれすぐ左にあるマスの文字に置き換える。これも暗号化の時と逆である。
得られたプレーンテキストに対し、スペースやカンマ、ピリオドの挿入や、余分なxの削除などをして整形すると、元のメッセージが得られる。
プレイフェア暗号の特徴
・暗号文の文字数は偶数である。
・用いられる文字のパターンは高々25個。特にJの文字を含まない暗号文の場合、プレイフェア暗号を疑ってもよいかもしれない。
・2文字ずつ区切った時、「AA」のような同じ文字からなる2文字組を含まない(… AB BC …というように、別々の2文字組に含まれる同じ2文字が偶然隣接する場合はあり得る)。
・頻度分析を行うと、元の文章の特徴をやや残しつつも、分布の裾野は通常の英文よりもやや厚い(図6)。
・index of coincidence(IC)は通常の英文よりもやや低い。例に挙げた暗号文の場合、IC=0.05808...である。
・プレーンテキストの文字は、自分自身に暗号化されることはない。(プレーンテキストのaは、必ずA以外の文字に変換される)
・ある2文字組、例えばabがCDに変換されるとき、それを反転させた2文字組baはDCに変換される。
解読方法
1、キーワードを推測し、暗号表を作成する
暗号文に意味ありげな単語が付随している場合、これがキーワードかもしれない。あるいは、もし今取り組んでいる謎解きが何らかの世界観に基づいている場合、その世界観において重要な単語がキーワードかもしれない。それを思いつく限り、片っ端から試す方法である。
弱点として、暗号表がキーワードから生成されたのではなく、ランダムに文字を書き入れて作られていた場合、この方法は役に立たない。
2、暗号の一部を推測し、暗号表を構成する
暗号が何らかの定型に沿っている場合、「暗号文のこの部分はこういうフレーズではないか」といった推測が可能である。
また、暗号文中、例えばAB -- ABのように同じ2文字組が出現したり、AB -- -- BAに反転関係にある2文字組が出現したりする場合がある。このようなパターン含む英単語やフレーズは数多い。AB -- ABは例えばwh er ev erの一部を表しているのではないか、あるいはAB -- -- BAはre ce iv erを表しているかもしれない、という推測が可能である。あらかじめこのような単語・フレーズをリストアップしておくことで、解読の補助となる。
このような手がかりから暗号表を組み立てていく解読法がある。
3、力業で解く
まずランダムなプレイフェア暗号表を作り、それを使って暗号を解読する。得られた解読文を適切な方法で評価する。次に、暗号表に行または列の入れ替え、反転、ランダムな2文字の入れ替えなど、些細な変化を施し、それを使ってまた解読する。得られた解読文を評価し、改善が見られたらこれを採用する。そしてまた些細な変化を施し、解読文を評価し、……これを意味のあるプレーンテキスト、もしくはそれに近いものが得られるまで繰り返す。人力では不可能である。
適切に評価するには、自然言語のどの特徴に注目し、それをどう評価し、評価関数を組み立てるかが重要である。筆者にはできなかった。
まとめ
・プレイフェア暗号は2文字ごとに暗号化を行う換字式暗号である。
・プレイフェア暗号には文字数が偶数になる、含まれるアルファベットは高々25種類、同じ文字からなる2文字組が存在しないなどの特徴がある。
・解読方法には、キーワードを推測する方法、定型文や暗号文の持つ特徴的パターンからプレーンテキストの一部を推測する方法、コンピューター任せで多数の可能性を試す方法がある。
次の記事では解読の実例を示す。
参考文献
ウィキペディア(英語版)「Playfair cipher」