換字式暗号

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動先: 案内検索

換字式暗号(かえじしきあんごう、Substitution cipher)、あるいは換字暗号(かえじあんごう)とは、平文を、1文字または数文字単位で別の文字や記号等に変換することで暗号文を作成する暗号である。 文字の変換ではなく並べ替えによって平文を読めない状態にする転置式暗号と共に、古典暗号の代表的な暗号の一つであり、16世紀頃には換字式・転置式という分類がなされている。

概要

最も古い暗号の一つであるシーザー暗号は、最も単純な換字式暗号の一つであり、文字から文字に1文字単位で変換する方式(単純換字暗号)である。シーザー暗号の変換ルールは「3文字シフト」であった。

しかし、9世紀頃にはこのような単純な暗号は、変換ルールが固定の1対1写像である限り、どのような変換であっても解読可能であることが知られていて、以来、暗号解読されないように、色々な改良が行われ、様々な換字式暗号が登場した。 20世紀になって開発された機械式暗号であるエニグマ暗号も換字式暗号の一種である。 さらに、現代のストリーム暗号も換字式暗号の一種であり、換字式暗号が改良され続けた結果、生まれたのがストリーム暗号であるとも言える。

ファイル:Dancing men.png
踊る人形; 一人が1文字を表し、旗は単語の区切りで、復号すると"AM HERE ABE SLANEY"となる

シーザー暗号は、1文字を別の1文字に変換する方式であるが、普通の文字に変換するのではなく単語数字記号図形等に変換する暗号もあり、有名なものから無名なものまで数多くある。

  • 単語 - コードブック、ニヒリストの暗号、
  • 数字 - ポリュビオスの換字表、字変四八、ルイ14世の大暗号、ナポレオンの小暗号、ビール暗号、
  • 記号 - 黄金虫(数字や記号の混合)、二銭銅貨(点字)、フーガの技法B-A-C-H(楽譜)、メアリーの暗号、ダビンチの鏡文字
  • 図形 - メッシュ暗号あるいはピッグ・ペン(四角と点の図形)、踊る人形(人形の図形)、山窩文字、

などがある。 図形に変換する暗号として、コナン・ドイル踊る人形(1903年)がよく知られているが、類似の換字表は1874年にも発表されている。 新聞のクイズ欄にて換字式の暗号文を掲載することもあった。 換字表には、モールス符号、アスキーコード、JISコードなどのように秘匿用途ではないものもあるが、戦時に表を取り替えて暗号として使用した例もあった。

換字式暗号は初期には紙と鉛筆だけで暗号文を作成していた。変換ルールが複雑な場合や効率よく変換を行う目的で、変換表や円盤などが使われることもあった。ヴィジュネル方陣やアルベルティの暗号円盤などが知られている。(...stub)

なお、"換字" はそのまま読むと"かんじ"となるが、"漢字"と同じ読みだと紛らわしい為、"かえじ"と読む慣わしがある。

分類

換字式暗号には、変換ルールの性質(1対1、1対多)や種類(単一固定、複数可変)、変換の単位(1文字か複数文字)などによって次ような分類がなされている。

具体的な暗号方式の一覧は、主な暗号の分類と一覧を参照。

(文字単位の変換)
  • 単表式換字 (monoalphabetic substitution cipher):変換ルールが1つに固定。単アルファベット換字ともいう。
    • 単純換字 (simple substitution cipher):1対1の単純写像で平文の1文字を対応する1文字に変換する。内部状態はなく、前後の文字には影響されない。単一換字ともいう。
    • 同音換字 (Homophonic substitution cipher):平文の1文字に対応する文字が複数個あり、その中から一つを選択して変換する。写像は1種類であるが1対多の写像である点が異なる。単純換字では平文の統計的性質がそのまま暗号文に残るが、同音換字では文字の出現頻度を操作できる。暗号文に同じ文字が1度しか出現しない場合には解読できなくなる。異綴換字、ホモフォニック換字ともいう。
  • 多表式換字 (polyalphabetic substitution cipher):1文字単位だが内部状態を保持し、変換ルールを切り替えながら変換を行う。多アルファベット換字ともいう。
    • 周期換字 (periodic substitution cipher):内部状態が周期的に変化して、変換ルールが周期的に切り替わる。周期が短いと解読されやすい。複数個の換字表を連動させて周期を長くしたのがロータマシンである。順変多表式換字ともいう。
    • 非周期換字
      • 連続鍵暗号/進行鍵暗号 (running key cipher):平文と同じ長さの鍵を用いて非周期的に変換ルールを変化させる方式。書籍の頁数行数を指定してそこから始まる文章を鍵としたりした。文章を鍵とした場合には、鍵にした文章の出現頻度の偏りが解読の手がかりとなることがある。使い捨ての乱数を鍵として用いると情報理論的に安全な暗号(ワンタイムパッドと呼ばれる)となる。鍵としてランダムな文字列や数列を使ったものは、乱字式、乱数式ともいう。
      • 自己鍵暗号/自動鍵暗号 (autokey cipher):平文や暗号文を内部状態に取り込み、次の状態を決める。暗号利用モードの一つ、サイファフィードバック (CFB) がこれにあたる。
(複数文字単位の変換)
  • 綴字換字/多重音字換字 (polygraphic substitution cipher):複数文字単位で変換する。変換ルールは1文字単位の方式と同様である。2文字単位のものをダイグラフィック換字暗号 (digraphic cipher) という。複数文字単位で変換を行うと組合せ数が増えるため、統計的な解析が難しくなる。現代のブロック暗号は64bitや128bit単位で変換を行う綴字換字暗号の子孫ともいえる。

構造

換字式暗号は、

  • CI  : 平文の文字の集合
  • CO  : 暗号文の文字の集合
  • ci  : CIの1文字(or数文字)を表す数値
  • co  : COの1文字(or数文字)を表す数値
  • reg : 内部状態を保持するレジスタ
  • KEY : 鍵の数値の集合
  • key : 鍵となる秘密の数列
  • ENC : 暗号化関数
  • DEC : 復号関数

として、

{co,reg} <= ENC(ci,key,reg)
{ci,reg} <= DEC(co,key,reg)

として表現できる。#CI,#COを集合のサイズ、#keyを鍵の長さ、key[i]を鍵のi+1番目とする。

シフト暗号は、CO=CI, KEY=[0..(#CI-1)], ci∈CI, co∈CO, key∈KEY, #key=1として、

ENC_s := {mod(ci+key[0],#CI),0}
DEC_s := {mod(co-key[0],#CI),0}

となる。シーザー暗号はシフト暗号の鍵が3の場合なので、

ENC_c := {mod(ci+3,#CI),0}
DEC_c := {mod(co-3,#CI),0}

である。アフィン暗号は、key={a,b}, aは#CIと互いに素な整数, bは任意の整数として、

ENC_a := {mod(ci*key[0]+key[1],#CI),0}
DEC_a := {mod((co-key[1])/key[0],#CI),0}

ヴィジュネル暗号は、key∈KEY^i, #key=i, reg=0 として、

ENC_v0 := {mod(ci+key[reg],#CI),mod(reg+1,#key)}

となる。ヴィジュネル暗号で#key=1の場合は、シフト暗号と同じになる。 ボーフォート暗号 (Beaufort cipher) は、アルファベットを逆順に並べてからシフトする暗号で、

ENC_b := {mod(key[reg]-ci,#CI),mod(reg+1,#key)}
DEC_b := {mod(key[reg]-co,#CI),mod(reg+1,#key)}

となり、ENC_bとDEC_bは同じ手順で行えるという特徴がある。 アフィン暗号をベースとした多表式暗号は、key={a,b}^i として、

ENC_b := {mod(ci*key[0,reg]+key[1,reg],#CI),mod(reg+1,#key)}

となり、シーザー暗号からボーフォート暗号までを含む暗号となる。 ヴィジネルが考案した自己鍵暗号は2種あり、key∈KEY,#key=1,reg=keyとして、

ENC_v1 := {mod(ci+reg,#CI),ci} --- ciを次の鍵とする
ENC_v2 := {mod(ci+reg,#CI),mod(ci+reg,#CI)} --- coを次の鍵とする

となる暗号である。ENC_v2は暗号文から鍵が直接判明するので暗号としては全く安全ではないが、鍵の生成方法としては過去のciの全てを次の鍵に影響させるという点で新しいアイデアであった。

(stub)

歴史

歴史については暗号史も参照。

換字式暗号は、暗号文平文に戻すには変換を逆に行えばよいため、変換ルールが特定されると暗号文も解読されてしまう。 文字のシフトのような単純な変換ルールでは、ルール自体が容易に推測されてしまうため、より複雑なルールが作られた。数文字おきに文字を対応させた上でシフトしたり(アフィン変換)、鍵語を使った変換(鍵の重複文字を除いて並べ、他の文字をその後に並べる)などが考案された。 しかし、固定の変換ルールでは平文の統計的性質が暗号文に残ってしまうため、頻度分析に対する安全性という点では無力であった。 そこで、変換ルール自体を切り替えて使用することが考案された。それがヴィジュネル暗号などの多表式と呼ばれる方式である。その他、1文字単位ではなく、複数文字単位で変換したり、平文や暗号文自体を変換ルールにフィードバックすることも考案された。

換字式暗号は、個々のアルゴリズムは大部分が解読されて使用されなくなったが、現代でもその子孫が姿を変えて生き残っている。

多表式周期換字暗号がストリーム暗号とつながり、ワンタイムパッドとして連続鍵暗号が使用されている。 また、綴字換字と転置式を組み合わせた方式は、換字-転字暗号 (Substition-Permutation cipher) と呼ばれ、IBMのホルスト・ファイステルが開発したLuciferに採用され、後にブロック暗号と呼ばれる暗号になった。

単純換字もROT13など、容易に解読されても構わない用途では使用されている。

安全性

一般的にアルゴリズムが公開された古典暗号は、安全ではないと考えるべきである。

単純換字は、頻度分析によって解読可能である。同音換字は、文字単位の出現頻度を平均化できるため、単一文字での頻度分析は難しくなるが、2重音字 (digram) や3重音字 (trigram) での頻度分析で解読できる可能性がある。

多表式であっても周期換字で、周期が短い場合には、一致反復率やカシスキー・テスト(頻度分析 (暗号))などにより周期を特定した上で、頻度分析を行うと解読できる場合がある。

連続鍵暗号で、乱数を鍵として、鍵の再使用をしないならば完全暗号となる。

擬似乱数を使用したストリーム暗号では、頻度分析線形攻撃差分攻撃に打ち勝つことができる様アルゴリズムを複合したエニグマ複合暗号機)もある。

参考文献

  • Horst Feistel, "Cryptographic Coding for Data-Bank Privacy", IBM Research Report RC-2827, T.J.Watson Research Center, Yorkton Heights, N.Y., March 1970.
  • 加藤正隆、「乱数と暗号」、数理科学、1977年4月号、1977.

関連項目

テンプレート:Cryptography navboxテンプレート:Link GA