このシリーズの記事で、文字を別の文字に置き換える「換字式暗号(シーザー暗号など)」について紹介しました。しかし、これらの暗号には致命的な弱点がありました。
それは、「頻度分析(Frequency Analysis)」です。
6 記事
ANGOUのすゝめ 一 ─暗号の始まりと転置─
暗号の分類と転置暗号を理解する
英語なら「E」が約12%、「A」が約8%……といった言語特有の「文字の出現頻度」は、単純に文字を置き換えただけでは隠せません。暗号文の中で一番多く出てくる文字を「E」だと仮定すれば、簡単に解読できてしまうのです。この手法は、シャーロック・ホームズの『踊る人形』やポーの『黄金虫』でもおなじみですね。
では、頻度分析で解けない換字式暗号は作れないのでしょうか?
「Eがたくさん出てくるのがバレるなら、Eを書き換える文字をたくさん用意すればいいじゃない」
そんな発想で生まれたのが、今回紹介する「同音異義暗号(ホモフォニック暗号)」です。
1. 同音異義暗号(度数秘匿型暗号)とは?
同音異義暗号(Homophonic Substitution Cipher)、またの名を度数秘匿型暗号とは、その名の通り「文字の出現度数(頻度)を隠す」ための暗号です。
1対1から、1対多へ
通常の換字式暗号(単一換字)は、「A」は「X」に、「B」は「Y」に……というように、平文と暗号文が1対1で対応していました。これだと、平文で「A」が多いなら、暗号文でも「X」が多くなり、グラフの形が同じになってしまいます。

(長田順行『暗号パズル』実日新書,ニューヨークタイムズ10万字統計結果)
そこで同音異義暗号では、1対多(One-to-Many)の対応関係を作ります。
- 出現頻度の高い文字(EやAなど)には、多くの暗号文字(数字など)を割り当てる。
- 出現頻度の低い文字(ZやQなど)には、少ない暗号文字を割り当てる。
このように割り当て、暗号化する際に「E」に対応する複数の数字からランダムに選んで変換します。
するとどうなるでしょうか? 暗号文全体での各数字の出現回数が均等(フラット)になり、頻度分析の手がかりとなる「グラフの山」が消滅してしまうのです。

ヒストグラム ランダムにコードを割り当て度数秘匿後、実際に文章を割り当ててみた結果のコード出現頻度のグラフ。
コードネームを複数持つ
クラスの人気者「E君」はよく名前を呼ばれます。そのまま呼ぶと目立つので、「1番」「2番」「3番」……と複数のあだ名をつけ、毎回違うあだ名で呼びます。一方、あまり呼ばれない「Z君」は「99番」というあだ名1つだけにします。
傍受している人から見ると、どの番号もまんべんなく呼ばれているように見え、誰が人気者(E君)なのか分からなくなるわけです。
2. 仕組みとアルゴリズム:00~99を使った例
ここでは具体的に、英語のアルファベット26文字を、「00」から「99」までの2桁の数字に変換する例を見てみましょう。
英語の統計的な出現確率に比例して、100個の数字を各アルファベットに分配します。よく使われる文字ほど、割り当てられる数字の個数(持ち駒)が多くなります。
割り当て表(変換テーブル)の例
以下は、ある規則に基づいて割り当てられた対応表の一部です。
(※参考文献の例に基づき、一部の文字のみ抜粋しています)
| 原字 (平文) | 割り当て数 | 暗字の同音異義語 (割り当てられた数字) |
| A | 8個 | 02, 22, 30, 46, 55, 69, 72, 79 |
| E | 12個 | 05, 33, 35, 42, 61, 68, 70, 80, 83, 88, 92, 97 |
| G | 2個 | 03, 91 |
| I | 7個 | 08, 19, 24, 43, 53, 62, 89 |
| M | 3個 | 17, 44, 77 |
| N | 7個 | 01, 10, 54, 57, 65, 66, 71 |
| … | … | (他の文字にも同様に割り当て) |
- 「E」は英語で最も使われる文字なので、12個もの数字が割り当てられています。
- 「G」や「M」は使用頻度が低いため、2~3個しか割り当てられていません。
暗号化する時は、このリストの中から好きな数字をランダムに(あるいは順繰りに)選んで使います。
3. 実際に変換してみよう
それでは、このテーブルを使って実際に暗号化を行ってみましょう。
暗号化する言葉は、有名なドイツの暗号機と同じ名前「ENIGMA」とします。
暗号化の手順
- 平文を一文字ずつ見ます。
- 対応する「暗字リスト」を見ます。
- リストの中から一つを選んで書き出します。
平文:E N I G M A
- E → リスト(05, 33, … 97)の中から 70 を選択
- N → リスト(01, 10, … 71)の中から 01 を選択
- I → リスト(08, 19, … 89)の中から 62 を選択
- G → リスト(03, 91)の中から 91 を選択
- M → リスト(17, 44, 77)の中から 17 を選択
- A → リスト(02, 22, … 79)の中から 72 を選択
暗号文:70 01 62 91 17 72
(結合して 700162911772)
重要なポイント:毎回結果が変わる
ここが同音異義暗号の面白いところです。もし、もう一度同じ「ENIGMA」を暗号化したとしても、違う数字を選べば結果は変わります。
- 1回目:
700162911772 - 2回目:
335419034402(例)
どちらも復号すれば「ENIGMA」に戻りますが、見た目は全く異なります。これにより、パターンを見つけ出すのを極端に難しくしているのです。
4. まとめ:強さと弱点
今回のまとめです。
- 同音異義暗号とは:頻度の高い文字に多数の暗号文字を割り当てることで、文字の出現確率を均等(フラット)にする暗号方式。
- メリット:単一換字暗号の天敵である「頻度分析」が無効化される。どの数字もだいたい同じ確率(今回の例なら1/100)で出現するため、統計的な特徴が掴みにくい。
- デメリット:
- 暗号文が長くなる: アルファベット26文字に対して数字00~99を使うため、文字数が単純計算で2倍になります。
- 完全に安全ではない: 単文字の頻度は隠せますが、「2文字の組み合わせ(バイグラム)」などの高度な統計分析を行えば解読は可能です。
今回紹介した同音異議暗号(度数秘匿型暗号)では、文字の出現頻度に合わせて複数のコードを割り当てることで、頻度分析を克服しました。
逆の発想「異音同義暗号」
実は、これとは逆に「複数の文字を1つの記号に割り当てる(多対1)」という異音同義暗号(Polyphonic Substitution)というものも存在します。
暗号文が短くなるメリットはありますが、復号したときに「これはAなのか?それともBなのか?」と文脈判断が必要になるため、正確さが求められる現代のデジタル暗号ではほとんど使われません。
これとは別のアプローチで、出現頻度が均等になるようにするものとして、「多表式」の暗号というのも存在したりします。
指定された記事(ID: 3244)は現在公開されていません。
換字式暗号シリーズ
6 記事
ANGOUのすゝめ 一 ─暗号の始まりと転置─
暗号の分類と転置暗号を理解する
ここまで読んでいただきありがとうございます。
では、次の記事で。 lumenHero