February 20, 2014

換字式暗号を頻度分析で解読するには(javascript, google visualization, substitution cipher decode)

換字式暗号は古典的な暗号であり、単一文字換字式暗号では、平文の1文字を別の1文字に変換し、暗号文を生成する。この暗号は、頻度分析によって容易に解読される。以下のツールで実際に解読してみて、色々なところで見かける「頻度分布により解読できる」ことを実感してみて欲しい。



平文から暗号文へ変換する

以下の左側のテキストエリアに、平文を半角アルファベット大文字のみで入力し、Encryptボタンを押すと、換字式暗号で処理された文章が右側に出力される。(半角アルファベット大文字以外は無視される。)
Original
Encrypted

頻度分析を行う

上記の平文および暗号文の頻度分析を行う。

頻度分析から換字表を推定する

頻度順に並んだ文字から換字表を推定する。頻度が同じものは、復号化の結果を見て並べ替えてトライアンドエラーを繰り返す。
暗号文
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
平文
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

暗号文を復号化する

作製した換字表を使って暗号文を復号化する。復号化結果が違っている場合は、換字表が間違っているので並べ替える。
Encrypted
Decrypted

その他メモ書き

  • グラフはgoogle visualizationの力を借りました。データを投げるだけでグラフが出来るので大変便利。
  • また、並べ替えができるようにするためにjquery uiのsortableを使用しています。
  • 数字だけのidが使えないとか知らなかった。
  • jqueryのセレクタについてつい"#"を付け忘れて引っかかる(getElementById)と混同している。)。