1993年のCICLOCK販売開始から長きに渡り、クレジットカード業界を始めとした各業界を支えてきた、情報漏洩対策・暗号化ソフトのプロが綴るセキュリティコラム。
今回のコラムでは、「暗号の種類(ストリーム暗号)」について解説します。
暗号アルゴリズムの特性を理解することで適した暗号アルゴリズムを選択し、より確実に情報漏洩を防止することができます。
これまでのコラムでは、暗号を使う上での注意点を書いてきました。これをまとめると以下のようになります。
暗号には「共通鍵暗号」と「公開鍵暗号」の2種類があると書きました。これは鍵のタイプによる分類ですが、暗号アルゴリズムのタイプで分類すると、「ブロック暗号」と「ストリーム暗号」の2種類に大別されます。
ブロック暗号が一定サイズのブロック単位に処理を行うのに対して、ストリーム暗号は1バイトとか1ビットとか、細かい単位で処理を行うのが特徴です。
ストリーム暗号の基本は「乱数」です。今回もシーザー暗号を例にとって説明しましょう。
シーザー暗号では平文の各文字を一定の文字数だけシフトしますが、すべての文字に対してシフト量が一定なので、簡単に解読されてしまいます。しかし、シフト量が次々に変わったら解読は難しくなりますね。この場合、1文字目は1文字シフト、2文字目は2文字シフト、3文字目は3文字シフト、という規則的な変化では、すぐにパターンを見破られてしまいますから、シフト量はランダムに変化しなければなりません。たとえばサイコロを振ってシフト量を決めれば、シフト量が1~6の間でランダムに変化する乱数の列が得られるわけです。本当は1から25まで目のあるサイコロがほしいのですが・・・。
コンピュータ上で行うストリーム暗号も考え方は同じです。乱数を次々に発生させ、平文の各要素(各バイト、各ビットなど)に乱数を掛け合わせること(専門的には「排他的論理和」)によって暗号化を行います。ブロック暗号に比べると、処理が非常に単純なので、処理速度が速いという特長があります。
ところで、サイコロを使って暗号化する場合、2、4、1・・・という目が出たとすれば、復号時もまったく同じ目を出さないと正しく復号できません。そんなに都合良くサイコロを振れる人はいるでしょうか。いるとすれば、いかさま師です。しかし「擬似乱数発生器」といういかさまサイコロを使うと、ある条件を同じにすることにより、いつでも2、4、1・・・という同じ目を出すことができるのです。
ここで言う「ある条件」のことを、シード(種)と呼びます。シードを変えれば生成される乱数列(つまりサイコロの目が出る順序)も変わってきますが、逆に言えば、同じシードを指定すれば、同じ乱数列を何度でも再現できます。したがって、シードを暗号の鍵に見立てれば、暗号化時と復号時で同じ鍵(シード)を指定することにより、共通鍵による暗号/復号が可能になるわけです。
なお、発生器というと専用の機械を思い浮かべるかもしれませんが、ソフトウェアによる演算処理でも実現されています。
カテゴリ一覧