パソコンとネットワーク|on Note

パソコン・ネットワーク・データ通信に関する記事

on Note

「シーザー暗号」を例に「アルゴリズム」と「鍵」を理解する

シーザー暗号は、平文で使われるアルファベットを一定の文字数だけずらすことで暗号化する。

「HELLO」という文字列があったとする。アルファベットの並び順において、「H」「E」「L」「L」「O」をそれぞれ1文字ずつずらすと「IFMMP」という、理解できない文字列に変わる。

シーザー暗号では、「アルファベットの文字をずらす」がアルゴリズムであり、「ずらす文字数」がにあたる。上の例では、ずらした文字数である「1」が鍵である。

暗号とセキュリティの常識

シーザー暗号のように、簡単なアルゴリズムで起こり得るリスクは、アルゴリズムさえ分かっていれば鍵を総当たりすることで解読できてしまうこと。しかしながらこれは、「アルゴリズムを知られてはならない」という話になるのではなく、「暗号強度が低い」という話である。

暗号強度の高いアルゴリズムは、アルゴリズムが知られていても鍵が特定できないようになっている。よって、秘密にすべきはアルゴリズムではなく復号鍵の方である。

下記がセキュリティ分野での常識。

  • 秘密の暗号アルゴリズムを使うな。
  • 弱い暗号は、暗号化しないよりも危険。
  • どんな暗号もいつかは解読される。
  • 暗号は、セキュリティのほんの一部。

秘密のアルゴリズムを使うな

「独自の暗号アルゴリズムを考え出し、それを秘密にしておけば安全」という考えは誤り。秘密の暗号アルゴリズムを使っても高いセキュリティを得ることはできない。

使用する暗号アルゴリズムは、「秘密の暗号アルゴリズム」ではなく、「公開されていて、強いとされる暗号アルゴリズム」にするべきである。

これらの主な理由に次の2つがある。

  • 歴史的に、秘密にした暗号アルゴリズムが暴かれなかった例は1つもない。

    暗号アルゴリズムそのものを秘密にし機密性を保とうとする暗号システムは、暗号アルゴリズムの詳細が暴かれると最後。

    対して、公開されている暗号アルゴリズムは、アルゴリズムが秘密でない為、暴かれて強さを減じるという危険がない。

  • 強い暗号アルゴリズムを生み出すことは非常に困難。

    暗号アルゴリズムの強弱を見極めるのは非常に困難。暗号アルゴリズムの強さは数学的に証明することができない。専門の暗号解読者たちがその暗号アルゴリズムを解読しようと何年も試みて失敗した、という事実でしか暗号アルゴリズムの強さを示すことができない。

暗号アルゴリズムを秘密にしてセキュリティを保とうとする行為は、一般に「隠すことによるセキュリティ」と呼ばれ、危険かつ愚かなこととされている。

専門の暗号解読者たちに、暗号アルゴリズムの詳細を教え、プログラムのソースコードを渡し、サンプルとして平文と暗号文の組を複数渡しておいたとしても、新たな暗号文を解読する為には非常に長い時間がかかる。これが強い暗号である。

弱い暗号は、暗号化しないよりも危険

「どんなに弱い暗号であっても、暗号化しないよりはましだろう」という考えは危険。「弱い暗号を使うぐらいなら、最初から暗号化しない方がまし」と考えるべき。

その理由は、ユーザが「暗号」という言葉により誤った安心感を抱く為。その暗号の強度とは無関係に、「暗号化されている」という事実に安心してしまう。その結果、機密性の高い情報の扱いが雑になってしまいがち。

どんな暗号もいつかは解読される

「絶対に解読されない暗号アルゴリズム」は存在しない。どんな暗号アルゴリズムで作った暗号文でも、全ての鍵をしらみつぶしに試すことでいつか解読することができる。

よって、暗号文が解読されるまでの時間と、暗号を使って守りたい平文の価値とのバランスが重要になる。

暗号は、セキュリティのほんの一部

相手にメールを暗号化して送ったとする。この暗号アルゴリズムが簡単に破られないにしても、第三者がこのメールの内容を知る方法はいくらでもある。例えば、コンピュータに残っている、暗号化前のメールを読むなど。

情報システム部を名乗る者から電話で、「コンピュータのセキュリティチェックの為、パスワードを一時的に○○○○に変更して下さい」と言われたとする。しかしこの相手は、実は攻撃者なのかも知れない。

これらの攻撃は、暗号の強さとは全く関係しない。高いセキュリティを保つ為には、システムの性質を理解する必要がある。

メニュー