昔のかんたんな暗号を試してみるkunai_S.N.
暗号について
暗号と聞くと色々なことを思い浮かべることができる。例えば、現代社会のコンピュータを使った通信には暗号技術が使われている。これを破ることができれば、自分の銀行口座の預金額を5000兆円に書き換えることもできるかもしれない。また歴史関係で言えば、ドイツ国防軍が使用していたエニグマ暗号機は有名だ。しかし、例によってこのエニグマは連合国側によって解読されてしまっている。
暗号は送信者と受信者以外の第三者に情報が渡らないようにするための工夫である。しかし、暗号は常に解読される定めにある。どんなに巧妙な工夫を凝らして暗号化しても、解読者はあらゆる工夫を凝らして解読を試み、歴史上のあらゆる暗号は解読されてきた。現代でよく利用されている、非常に強固なRSA暗号ですら解読可能である。(具体的には、鍵長1024bitであれば現代の技術と莫大なリソースを割けばおそらく解読できるだろう、というもの)
ここでは歴史上で昔から使われてきた暗号を実際に使ってみて、昔の人の気分を少しだけ感じてみようというものである。今回は分かりやすいように、アルファベット大文字を暗号文、アルファベット小文字を平文としている。また、ピリオドやコロン、空白文字などは無いものとして考える。
(暗号と復号の例文は十分注意を払って作成しているが、間違えているかもしれないのでご注意ください)
シーザー暗号
シーザー暗号は、おそらく世界で一番有名で簡単な暗号である。暗号化の手順は、平文の文字を任意の数ずらすだけだ。復号化するときは、任意の数を鍵として暗号とは逆方向にずらせば良い。アルファベットを使用するとして任意の数を「3」とすれば、「a」という文字は「D」となり、「i」という文字は「L」となる。そして、「z」という文字は一周回って「C」になる。
例えば、鍵を「3」として「sekaishibeta」を暗号化すると、「VHNDLVKLEHWD」となる。パッとこの文字列を見せられると、意味のない文字列としか思えないが、「暗号化の手順」と「鍵」がわかっているのであれば復号できる。つまり、「シーザー暗号」という手順と「3」という鍵が渡されると、それぞれのアルファベットの3つ前を書き出せばいいことがわかる。最初の文字「V」は「s」と復号でき、「H」は「e」に対応する。
この暗号の問題点は第三者が暗号化手順を知っていた場合、すぐに解読されてしまうところにある。
ここに「TDWJRQJQNWCJR」という暗号文があったとする。もしあなたが「これはどうやらシーザー暗号で暗号化されている」と知っていた場合、どのくらいの時間で解読できるだろうか?
アルファベットであれば文字の種類は26であるため、0文字ずらしたものから25文字ずらしたもの全てを書き出して意味を持ちそうな文章を見つけてしまえばいいのだ。つまり、総当たりで人間が解読できる程度には短い時間で可能である。この問題点を解決するために工夫したものが、次の暗号化の手順である。
(ちなみに、上記に書いた暗号文は重要機密であるため、ここで複合した文章は示さない。間違っても復号することのないように!)
ちなみに、暗号化の手順が知られてしまうがゆえに脆弱なのであるから、その手順を秘密にしてしまえばいいのではないかと思った人もいると思う。しかし暗号界隈では、この手順を秘密にすることは機密性に全く関与しないことが指摘されている。その理由は、その手順が本当に安全であるかどうか検証ができないことにある。わざわざ自作するくらいなら、世界中の研究者が解読を試みて検証され続けてきた暗号化手順を使用した方がよっぽど安全である。
単一換字式暗号
単一換字式暗号は平文の文字と暗号文の文字が一対一に対応する暗号である。平文「a」が「C」であるなら、暗号文「C」は必ず「a」になる。つまり、シーザー暗号も単一換字式暗号の一種であるが、ここではシーザー暗号を少し改良したものをつかう。
シーザー暗号は暗号化のパターンが単純で、26種類しかなかったのが問題であった。そのため、第三者の解読者が総当たりを試みる場合、その試行回数をべらぼうに増やすことを考える。
今回は、アルファベットそれぞれに対応する文字をランダムに決めた表を作成し、その表に従って暗号化と復号化を行うこととした。この場合、「a」に対応する文字を「D」と決めても、必ず「b」は「E」になるわけではなく、D以外の文字のどれかということになる(「a」に対応する文字が「D」であることがわかってるため)。もちろん、たまたま「b」が「E」に対応することもあるだろう。
これも実際に試してみよう。「sekaishibeta」を下記の表を鍵として暗号化すると「PQMFUPIUNQGF」となる。当然復号した文は、この表を見ながら文章を作っていけば良い。
さて、前提として第三者は暗号化手順はわかっているが鍵である対応表は持っていない。手順だけ分かっている解読者が、この暗号を解読するために総当たりで検証すると一体どれほどの時間がかかるか?
シーザー暗号はずらすことしかしていないため26パターンであった。しかし、今回の方法は全部で26の階乗パターン存在する。つまり、最大「26 x 25 x 24 x … x 2 x 1 回」試すことになる。計算すると、約403杼2914垓6112京6605兆パターンらしい(多分)。
こんな膨大なパターンを人間が力技で解き切ることはまず不可能と言える。おそらくコンピュータを使っても、全探索は難しい。しかし、この暗号には解読するための、よく知られた方法がある。文字の出現頻度を数え上げる方法だ。
例えば、下記のような英語の文章を暗号化した文があったとする。
「BIEOBIUXXPUOJUCPGWCXQWCFODPRQCBQOROUZQZUCUPGQOJFPNWO CFGNXQCIQUZRFXFBQWVYWODPIUOQGIQYFZUXTIWZQWYGIQDEMQPWYZF OXNWOWEAIWCGIUOGTCWKQZNQOWCQGIWEPFCDQUAIGIECDOQDPQKQCG TYWEOIUPYFGIQOXWODOFCDWXRIIQCOTPRQCBQOBIEOBIUXXJFPGIQGIUOD PWCWYGIQPQKQCGIDEMQFCDFDQPBQCDFCGWYLWICBIEOBIUXXYUOPGDE MQWYZFOXNWOWEAISEQQCFCCQPBWZZFCDQOUCBIUQYDEOUCAGIQJFOW YGIQPRFCUPIPEBBQPPUWCIUPZWGIQOLQFCQGGQBIEOBIUXXJFPGIQDFEAIG QOWYXQWCFODLQOWZQFCQJTWOMYUCFCBUQOJIWPQFCBQPGWOPIFDYW EAIGFAFUCPGGIQNOUGUPIUCGIQFZQOUBFCJFOWYUCDQRQCDQCBQ」
この文章中に出現する文字をそれぞれ並べ数え上げると、「Q」が60回、「I」と「C」が42回であることがわかる。一般的に英語の文章では、「e」が最もよく登場することが知られている。そこで「Q」もしくは「I」か「C」が、「e」と対応しているのではないかと推測できる。ここでは、「Q」が「e」だと仮定しよう。
次に、「Q」の前に別の2文字が並んでいるパターンを数えてみる。すると、「GIQ」という文字列が何回も繰り返し使われていることがわかる。これは英語でよく使われる単語「the」が「GIQ」に対応しているのだろうと考えられる。すると、「G」は「t」であり、「I」は「h」だろう。
次は「t」「h」「e」が含まれる英単語である「three」を探すことにしたが、この並びに該当するものはなかった。そこで、2文字並びや3文字並びの出現頻度を確認してみることにした。英語でよく使われる「and」を探そうと考えたわけである。
・文字の出現頻度(多い順)
1文字:Q=60, C=42, I=42, O=40, W=36, F=32, U=31, G=30
2文字:GI=16, IQ=13, FC=12, IU=11, QO=11, QC=10, BI=9, CD=8, UC=8, WY=8
3文字:GIQ=11, OBI=5, BIU=5, CDQ=4, UXX=4, IUX=4, IEO=4, QFC=4, EOB=4, BIE=4, FCD=4, EAI=4, CBQ=4
「GIQ」のそれぞれの文字が使われておらず、出現頻度が多いものをピックアップすると、それぞれ4回の「EOB 」「FCD 」であった。ここで、一般的に「a」の出現頻度は高いことを考えると、今回、「E」と「F」の出現頻度は、それぞれ17回と32回であるから、「FCD 」が「and」であると推測できる。
ここで、一旦決まった文字を置き換えて眺めてみよう。
「BhEOBhUXXPUOJUnPtWnXeWnaOdPRenBeOROUZeZUnUPteOJaPNWO natNXenheUZRaXaBeWVYWOdPhUOetheYaZUXThWZeWYthedEMePWYZa OXNWOWEAhWnthUOtTnWKeZNeOWnethWEPandeUAhthEndOedPeKent TYWEOhUPYatheOXWOdOandWXRhhenOTPRenBeOBhEOBhUXXJaPtheth UOdPWnWYthePeKenthdEMeandadePBendantWYLWhnBhEOBhUXXYUOP tdEMeWYZaOXNWOWEAhSEeenannePBWZZandeOUnBhUeYdEOUnAtheJa OWYthePRanUPhPEBBePPUWnhUPZWtheOLeanetteBhEOBhUXXJaPtheda EAhteOWYXeWnaOdLeOWZeaneJTWOMYUnanBUeOJhWPeanBePtWOPha dYWEAhtaAaUnPttheNOUtUPhUntheaZeOUBanJaOWYUndeRendenBe」
・文字の出現頻度(多い順)
1文字:e=60, n=42, h=42, O=40, W=36, a=32, U=31, t=30, P=29
2文字:th=16, he=13, an=12, hU=11, eO=11, en=10, Bh=9, nd=8, Un=8, WY=8
3文字:the=11, OBh=5, BhU=5, nde=4, UXX=4, hUX=4, hEO=4, ean=4, EOB=4, BhE=4, and=4, EAh=4, nBe=4
ここから先も英単語の出現頻度を確認しながら同様の作業を続けていくことになる。(2文字の並びで8回の「Un」が「in」であるとし、「WY」も多いのでこれは「of」ではないか、「eO」は11回も出現しているので、一般的に2文字並びで登場しやすい「er」だろうか、「P」の出現回数は29回だが次点で出現する「D」は21回と離れており高い出現頻度であるはずの「s」が決まっていないので「P」を「s」としたりと………………………………)
ある程度読み進められたが詰まってしまった場合、出現頻度の多いものではなく、逆に出現頻度が低い文字に注目してみるのも良い。一般的に「j」「q」「x」「z」といった文字は出現しにくい。
・文字の出現頻度(少ない順)
1文字:H=0, S=1 V=1, K=3, L=3, M=4, T=5, N=6
「V」に注目して周辺の抜き取ってみると、「RaXaBeo”V”fordshire」であり、「x」をはめると「oxfordshire」という文字列が見える。また、「L」が登場する「hisZother”L”eanetteBhErBhiXX」を抜き出してみた。ここで「BhErBhiXX」という並びが文中に4回登場している事がわかる。ここを一つの単語だとすると、「his Zother ”L”eanette (さっきの単語)」となりそうで、グーグル先生に聞くと、おそらく「L」は「j」であり、「Z」は「m」だろう事がわかる(jeanetteという人の名前があるそう)。
ここまでで推測した文をみるとこうなる。(私の独断と偏見で適当にアンダースコアを入れた。主にofとtheのあたりに)
・推測した文字
G=t, I=h, Q=e, F=a, C=n, D=d, U=i, W=o, Y=f, O=r, P=s, V=x, L=j, Z=m
・文字の出現頻度(多い順)
1文字:e=60, n=42, h=42, r=40, o=36, a=32, i=31, t=30, s=29
2文字:th=16, he=13, an=12, hi=11, er=11, en=10, Bh=9, nd=8, in=8, of=8
3文字:the=11, rBh=5, Bhi=5, nde=4, iXX=4, hiX=4, hEr=4, ean=4, ErB=4, BhE=4, and=4, EAh=4, nBe=4
「BhErBhiXX_sirJinstonXeonardsRenBerRrimeministerJasNor natNXenheimRaXaBe_oxfordshire_the_famiXThome_of_the _dEMes_of_marXNoroEAhonthirtTnoKemNeronethoEsandeiAh thEndredseKentTfoEr_his_father_XordrandoXRhhenrTsRenBer_ BhErBhiXX_Jasthethirdson_of_theseKenthdEMeandadesBendant_ of_john_BhErBhiXX_firstdEMe_of_marXNoroEAhSEeenannes BommanderinBhiefdErinAtheJar_of_the_sRanishsEBBession_ his_mother_jeanette_BhErBhiXX_JasthedaEAhter_of_Xeonard jeromeaneJTorMfinanBierJhoseanBestorshadfoEAhtaA ainsttheNritishintheameriBanJar_of_indeRendenBe」
「oxfordshire_the_famiXThome_of_the_dEMes」という文字列の真ん中の「the_famiXThome」は、「X」を「l」「T」を「y」とすると「the_family_home」となりそうとわかる。
そして、上記のまだ解読していない文字で多く登場する文字は「B」と「E」である。加えて、まだ使われておらず出現頻度の高い文字に「c」と「u」がある。そこで、先ほど出た「BhErBhill」という謎の単語に注目すると、この二つの文字を解読すれば意味を持ちそうだとわかるので、2パターン用意する(「BhErBhill」は「BhErBhiXX」のこと)。すると、「churchill」「uhcruhill」の2種類の単語が出来上がるが、意味を持ちそうなものは前者の方で、イギリス首相チャーチルである事がわかる。よって、「B」は「c」に、「E」は「u」に対応する。
・推測した文字
G=t, I=h, Q=e, F=a, C=n, D=d, U=i, W=o, Y=f, O=r, P=s, V=x, L=j, Z=m, X=l, T=y, B=c, E=u
「churchill_sirJinstonleonardsRencerRrimeminister JasNornatNlenheimRalace_oxfordshire_the_family_home_ of_the_duMes_of_marlNorouAhonthirtynoKemNeronethousand eiAhthundredseKentyfour_his_father_lordrandolRhhenrysRencer _churchill_Jasthethirdson_of_theseKenthduMeandadescendant _of_john_churchill_firstduMe_of_marlNorouAhSueenannescommander inchiefdurinAtheJar_of_the_sRanishsuccession_his_mother_ jeanette_churchill_JasthedauAhter_of_leonardjeromeane JyorMfinancierJhoseancestorshadfouAhtaAainsttheNritishinthe americanJar_of_indeRendence」
ここまで来れば、おそらくこの文書はチャーチルの話をしている事がわかるので、残った文字をしらみつぶしに調べて聞けばすぐに元の文章を解読する事ができるだろう。
・元の平文(今回は下記の文章から空白文字、ピリオド、ハイフンなどを削除して全て小文字として暗号化した)
「Churchill, Sir Winston Leonard Spencer, prime minister, was born at Blenheim Palace, Oxfordshire, the family home of the dukes of Marlborough, on thirty November one thousand eight hundred seventy four. His father, Lord Randolph Henry Spencer Churchill, was the third son of the seventh duke and a descendant of John Churchill, first duke of Marlborough, Queen Anne’s commander-in-chief during the War of the Spanish Succession. His mother, Jeanette Churchill, was the daughter of Leonard Jerome, a New York financier whose ancestors had fought against the British in the American War of Independence. 」
と、単一換字式暗号は簡単に解読ができてしまう暗号なのである(めっちゃ時間かかりましたが???)。ここからの改良は、例えば「e」に対応する文字を複数用意したり、複雑な表を使ったり、といった方法がある。
まとめ
書き初めは軽くさらっと説明しようと思っていたが、思ったより長ったらしくなってしまった。ここ最近、暗号の本を読んだので、復習も兼ねて簡単な暗号を説明してみた。
土日の暇な時間に暇つぶしに使うのもよし、友人に送りつけて変人ムーブをするのも良しだ。
この記事をシェアする
コメント
あれ、「クナイハヘンタイ」???
見間違えかな…..