SIGMA-SE Tech Blog

SIGMA-SE Tech Blog


当サイトは、過去に運営していた別ドメイン(unisia-se.com)から sigma-se.com へ移行した技術ブログです。
旧サイトの記事をもとに、内容の精査・加筆・最新化を行い再構成しています。
正確で実用的な情報提供を目的としています。

情報セキュリティ - 暗号技術:古典暗号の仕組みと代表例

概要

暗号技術の原点となる古典暗号について、古代に使われた代表的な暗号や秘匿記録を例に、種類と仕組みを説明する。

古典暗号は、現代の暗号方式のようにコンピュータで巨大な数を計算するものではなく、文字の並べ替えや置き換えによって内容を読みにくくする方式を指す。
そのため、仕組み自体は単純だが、暗号化復号という暗号技術の基本的な考え方を理解する入口として非常に分かりやすい。

古典暗号とは

  • 古典暗号の概要
    古典暗号とは、主に手作業で扱える暗号方式の総称であり、文字を別の文字に置き換えたり、文字の順番を入れ替えたりして、第三者に内容を読まれにくくする技術を指す。

  • 暗号の基本要素
    暗号の基本は、次の \(3\) つで考えると分かりやすい。

    • 平文
      暗号化する前の、普通に読める文章。
    • 暗号文
      暗号化した後の、そのままでは読みにくい文章。

    • 暗号化や復号のルールを決める情報。
  • 暗号化と復号の表現
    暗号化と復号は、次のように「何を入力して、何を出力するか」で考えると分かりやすい。

    ここでは、平文を \(P\)、鍵を \(K\)、暗号文を \(C\) とする。
    また、\(E\) は暗号化(Encryption)、\(D\) は復号(Decryption)を表す。

    • 暗号化
      暗号化は、平文 \(P\) と鍵 \(K\) から、暗号文 \(C\) を作る処理となる。

      \[ {\small C = E_{K}(P) } \]
    • 復号
      復号は、暗号文 \(C\) と鍵 \(K\) から、元の平文 \(P\) に戻す処理となる。

      \[ {\small P = D_{K}(C) } \]

    つまり、暗号では鍵 \(K\) を使って平文 \(P\) を暗号文 \(C\) に変換し、同じ鍵 \(K\) または対応する鍵を使って暗号文 \(C\) を平文 \(P\) に戻すという流れになる。

古典暗号の大きな分類

  • 転置式暗号と換字式暗号
    古典暗号は大きく分けると、転置式暗号換字式暗号に分類できる。

    分類 考え方 代表例
    転置式暗号 文字そのものは変えず、文字の並び順を入れ替える。 スキュタレー暗号
    換字式暗号 文字を別の文字や記号に置き換える。 シーザー暗号、ヒエログリフの変種

    例えば、「HELLO」を「H」「E」「L」「L」「O」の文字自体はそのままにして順番だけ変えるなら転置式暗号となる。
    一方、「H」を「K」、「E」を「H」のように別の文字へ置き換えるなら換字式暗号となる。

陶器の釉薬の配合(メソポタミア:紀元前3500年頃 - 紀元前539年)

  • 概要
    古代メソポタミアでは、紀元前 \(1500\) 年頃、陶器の釉薬の配合に関する記録が暗号化されていた例が確認されている。
    これは軍事連絡というより、職人の技術や商業上の秘密を守るための暗号と考えると分かりやすい。

    釉薬は、陶器の表面にガラス質の膜を作る材料で、色や質感を決める重要な技術となる。
    その配合が外部に知られると、他の職人に真似されてしまう可能性がある。
    そのため、材料名や分量をそのまま書かず、別名や隠語、置き換え表現を使って記録したと考えられる。

  • 配合記録を暗号化する例
    例えば、次のような配合があったとする。

    銅 2、灰 5、砂 3
    

    これをそのまま書くと、誰でも配合を理解できてしまう。

    そこで、次のような対応表を作る。

    本当の材料 記録上の名前
    青い石
    白い粉
    乾いた土

    この対応表を使うと、記録は次のようになる。

    青い石 2、白い粉 5、乾いた土 3
    

    対応表を知らない人には、これが何の材料なのか分かりにくい。
    しかし、職人仲間だけが対応表を知っていれば、正しい配合を復元できる。

ヒエログリフの変種(古代エジプト:紀元前3000年頃 - 紀元前30年)

  • 概要
    古代エジプトでは、紀元前 \(3000\) 年頃からヒエログリフ(象形文字)が使われていた。
    その中には、通常の象形文字を特別なシンボルに置き換えて書くことで、一般の人には読みにくくした例がある。

    これは現代的に言えば、文字を別の記号へ置き換える換字式暗号に近い考え方となる。

  • 置き換えの例
    例えば、次のような対応表を決めたとする。

    平文 A B C D
    記号 太陽

    この場合、BAD という平文は、次のように置き換えられる。

    BAD -> 鳥 太陽 蛇
    

    文字を知らない人から見ると、これは単なる絵や装飾に見える。
    しかし、対応表を知っている人にとっては、意味を持つメッセージになる。

  • 特徴

    • 文字を別の記号に置き換える。
      文字の順番ではなく、文字そのものの見た目を変える。
    • 装飾と秘匿を兼ねられる。
      モニュメントや宗教的な文脈では、見た目の意味も重要になる。
    • 対応表が鍵になる。
      どの記号がどの文字を表すかを知らなければ読めない。

スキュタレー暗号(古代ギリシャ:紀元前800年頃 - 紀元前146年)

  • 概要
    スキュタレー暗号は、古代ギリシャのスパルタで使われたとされる暗号で、文字の順番を入れ替える転置式暗号の代表例となる。

    特定の太さの棒(スキュタレー)に細長い革紐を巻き付け、横方向に文字を書く。
    革紐を棒から外すと文字の順番が崩れて読めなくなるが、同じ太さの棒に巻き直すと元のメッセージが読めるようになる。

    この暗号では、棒の太さ巻き方が鍵の役割を持つ。
    つまり、同じ棒を持っている人だけが正しく復号できる。

  • 暗号化の例
    平文を次の文章とする。
    ここでは、空白を除いた ATTACKATDAWN を暗号化の対象とする。

    ATTACK AT DAWN
    

    これを横 \(4\) 文字ずつ書くと、次のようになる。

    A T T A
    C K A T
    D A W N
    

    この表を縦方向に読んで暗号文を作る。

    A C D T K A T A W A T N
    

    空白を詰めると、暗号文は次のようになる。

    ACDTKATAWATN
    

    これは復号後の文章ではなく、文字の順番を入れ替えた後の暗号文となる。
    復号する側は、暗号文を同じ幅 \(4\) で元の表に戻せばよい。

    ATTACK AT DAWN
    

    この例では、鍵は「横 \(4\) 文字で並べる」という情報になる。

  • 特徴

    • 文字の種類は変わらない。
      AA のまま、TT のままとなる。
    • 文字の順番だけが変わる。
      そのため、出現する文字の種類や個数は平文と暗号文で同じになる。
    • 鍵は並べ方となる。
      棒の太さや表の幅が分からないと、元の順序に戻しにくい。

シーザー暗号 / カエサル暗号(古代ローマ:紀元前753年 - 西暦476年)

  • 概要
    シーザー暗号(カエサル暗号)は、アルファベットを一定の数だけずらす換字式暗号を指す。
    ユリウス・カエサルが軍事連絡に使用したことで有名で、古典暗号の中でも特に分かりやすい方式となる。

    例えば、鍵を \(3\) としてアルファベットを \(3\) つ後ろにずらす場合、対応関係は次のようになる。

    平文 A B C D E F G
    暗号文 D E F G H I J

    この場合、ADBECF になる。
    アルファベットの末尾まで進んだ場合は、先頭に戻って数える。

  • 数式表現
    アルファベットを A = 0B = 1C = 2、...、Z = 25 と対応させる。
    平文の文字を \(x\)、鍵を \(k\)、暗号文の文字を \(y\) とすると、シーザー暗号の暗号化は次のように表せる。

    \[ {\small y = (x + k) \bmod 26 } \]

    復号は、逆に \(k\) だけ戻すので、次のように表せる。

    \[ {\small x = (y - k) \bmod 26 } \]

    ここで \(\bmod 26\) は、\(26\) で割った余りを取るという意味を持つ。
    アルファベットは \(26\) 文字なので、Z の次は A に戻る。

  • 暗号化の例
    平文を次の単語とする。

    HELLO
    

    鍵を \(3\) とすると、各文字は次のように変換される。

    平文 H E L L O
    暗号文 K H O O R

    よって、暗号文は次のようになる。

    KHOOR
    

    復号する場合は、各文字を \(3\) つ前に戻す。

    KHOOR -> HELLO
    
  • 日本語で考える例
    考え方だけなら、ひらがなでも同じように説明できる。
    例えば、五十音の一部を次のように並べたとする。

    あ い う え お か き く け こ
    

    \(2\) つ後ろにずらすルールなら、次のようになる。

    あ -> う
    い -> え
    う -> お
    え -> か
    お -> き
    

    このルールで「あいお」を暗号化すると、次のようになる。

    あいお -> うえき
    

    実際の暗号では、対象文字の範囲や並び順を厳密に決める必要がある。
    しかし、基本的な考え方は「決められた文字表の中で、一定数だけずらす」ということになる。

古代暗号を比較する

  • 代表的な古代暗号の比較
    ここまでの代表例をまとめると、次のようになる。

    暗号 地域 方式 鍵になるもの 主な目的
    釉薬配合の秘匿記録 メソポタミア 換字式暗号に近い記録 材料名の対応表や隠語 技術・商業秘密の保護
    ヒエログリフの変種 古代エジプト 換字式暗号 記号の対応表 秘匿、権威付け、装飾
    スキュタレー暗号 古代ギリシャ 転置式暗号 棒の太さ、巻き方 軍事連絡
    シーザー暗号 古代ローマ 換字式暗号 ずらす文字数 軍事連絡

古典暗号の弱点

  • 総当たり攻撃に弱い
    古典暗号は仕組みが分かりやすい一方で、現代の基準では安全とは言えない。

    特にシーザー暗号は、鍵の候補が少ない。
    アルファベットを対象にする場合、ずらす数は \(1\) から \(25\) までしかない。

    つまり、攻撃者はすべての鍵を試しても、最大で \(25\) 通りを確認すればよい。

    KHOOR
    

    上記の暗号文に対して、鍵を順番に試すと、どこかで意味のある単語が出てくる。

    鍵 1 : JGNNQ
    鍵 2 : IFMMP
    鍵 3 : HELLO
    

    このように、すべての鍵を試す攻撃を総当たり攻撃(ブルートフォース攻撃)という。

  • 頻度分析に弱い
    文章が長い場合は、文字の出現頻度から推測されやすい。
    例えば英語では ETA などがよく出現するため、暗号文で特によく出る文字を調べることで、元の文字を推測できる場合がある。
    このような考え方を頻度分析という。

現代暗号とのつながり

  • 古典暗号と現代暗号の共通点
    古典暗号と現代暗号は、計算の複雑さや安全性の考え方は大きく異なる。
    しかし、基本的な構造はつながっている。

    • 平文を暗号文に変換する。
      これは古典暗号でも現代暗号でも同じになる。

    • 鍵を知らない人には読みにくくする。
      スキュタレーの棒、シーザー暗号のずらす数、現代暗号の暗号鍵は、いずれも鍵の役割を持つ。

    • 復号できる人を限定する。
      暗号は「誰にも読めない」ことではなく、「読める人を制御する」ことが重要となる。

    現代暗号では、シーザー暗号のような単純な \(\bmod 26\) の計算ではなく、非常に大きな数や複雑な数学を使う。
    それでも、暗号化を \(C = E_{K}(P)\)、復号を \(P = D_{K}(C)\) と考える基本構造は変わらない。

要約

  • スキュタレー暗号は、文字の順番を入れ替える転置式暗号
  • シーザー暗号は、文字を一定数ずらす換字式暗号
  • ヒエログリフの変種は、通常の文字を特別な記号に置き換える考え方。
  • メソポタミアの釉薬配合の記録は、職人の技術を守るための秘匿記録。
  • 現代暗号でも、暗号化を \(C = E_{K}(P)\)、復号を \(P = D_{K}(C)\) と考える基本構造は変わらない。


Copyright SIGMA-SE All Rights Reserved.
s-hama@sigma-se.jp