セキュリティ製品などの宣伝文句で「××は強力な暗号を使っているから安全」といった表現をよく見かける。逆に「○○の暗号が破られた」というニュースが飛び込んできたりもする。こんな風に何気なく使っている「暗号の強さ」とは,どうやって判断しているのだろうか。

 暗号の強さを説明する前に,通信などで使う暗号技術そのものについて少し確認しておこう。

 暗号というと「トラ・トラ・トラ」やシャーロック・ホームズの「踊る人形」のようなものを思い浮かべるかもしれないが,通信で使う暗号はこれらの暗号とは性格が異なる。「トラ・トラ・トラ」のような暗号は,暗号文を元の文章に戻すためのルールを秘密にすることで,安全性を保つしくみになっている。

 それに対して現在の通信技術で使っている暗号技術の正体は,特殊な変換式である。元のデータ(ビット列)と暗号鍵(これもビット列)と呼ばれる秘密のデータを組み合わせ,変換式を使って計算することで暗号データに変換する。暗号鍵を知らないと,暗号データを元のデータに戻せないしくみである。

 現在の通信で使う暗号技術が「トラ・トラ・トラ」のような暗号と違うのは,暗号を解く方法(変換式)そのものを公開している点である。つまり,解き方のルールを最初から明らかにしておき,暗号鍵だけを秘密にするのだ。

 秘密になっているのが暗号鍵だけだとすると,考えられる暗号鍵を次々と試していけば,いつかは正しい暗号鍵にぶつかって暗号を解読できてしまう。これは,「総当たり攻撃」と呼ばれる暗号破りの手法である。通信で使う暗号は,原理的に,総当たり攻撃によってあり得る暗号鍵をすべて試せば,必ず解けるようにできている。

 しかし,暗号鍵のバリエーションを十分増やせば,総当たり攻撃による解読は現実的に不可能になる。例えば,128ビットの暗号鍵だと,バリエーションはおよそ10の38乗になる。こうした暗号鍵を使った暗号を解読しようと総当たり攻撃をしかけるとすると,1秒間に100兆(10の14乗)の鍵をチェックできるコンピュータを使っても,全部を確認するにはざっと3.3京年(京は兆の1万倍)という非現実的な年月がかかる。仮に,半分の64ビットの暗号鍵を使って暗号化されたデータを,おなじ条件で総当たり攻撃すると,28時間弱で済む計算になる。

 要するに,暗号鍵の長さが長くなるほど,バリエーションが多くなり,暗号の強度も「強い」と言える。ただし,これは暗号の変換式がきちんと作られている場合に限った話。もし,変換式に欠陥があって,総当たり攻撃よりも効率よく暗号鍵を見つける近道があれば,これまでの話は根本からひっくり返る。

 こうした欠陥が「ぜい弱性」と呼ばれるものである。普通「暗号が破られた」と言う場合は,こうしたぜい弱性が見つかったことを指す。先に述べたように,通信で使う暗号は,変換式が公開されている。つまり,多くの人がその変換式にぜい弱性があるかどうか調べられる状況にある。こうした中でもぜい弱性が見つからない暗号で,暗号鍵が十分長い暗号技術が「強い」暗号と言えるわけだ。

(山田 剛良)