RSAのグレイ氏が語る,安全なアプリケーション開発のポイント

【海外記事】2002.2.19

 カリフォルニア州サンノゼにて,2月18日より「RSA Conference 2002」が開催されている。初日のセッションの1つとして「Security Pitfalls: Avoiding Them(セキュリティの落とし穴:どう避けるか)」と題したチュートリアルが行われた。この中で米RSAセキュリティのジェームズ・グレイ氏は,アプリケーション開発・構築の際に見落とされがちな5つのポイントを,実装の失敗例を交えながら紹介した。そして同氏は,そうした脅威からデータを守るためには,ハッシュの活用といった手法が非常に重要だと述べている。

 まず最初に同氏が指摘したのが,「攻撃者は,たとえ保護されたデータであれ,暗号化されたデータであれ,それを解読しようと試み,実際に解読してしまう」という事実である。辞書を使った総当り攻撃が好例だが,攻撃者は「推測とチェック」を繰り返すことによって,最終的にはパスワードや暗号鍵を見出してしまうという。

 代表的な例が,パスワード保護の弱さだ。グレイ氏はまず,パスワードを直接キャッシュやディスクに保存するのは論外であり,MD5やSHA-1といったアルゴリズムを用いてパスワードのハッシュを取り,そちらを保存すべきであるという基本的な原則から紹介した。仮にパスワードを暗号化してキャッシュに保存していたとしても(これはWindows 95での実装だという),攻撃者が暗号鍵の推測とチェックを繰り返していけば,最終的にはクリアテキストキャッシュを入手でき,つまり解読できてしまうという。

 だが,攻撃者の側もハッシュの手法について知るようになった現在,ただ漫然と1度ハッシュを取るだけでは不十分だ。したがって,マシンのリソースさえ許せば1024回以上ハッシュを取り,また取り外し可能な認証デバイスを併用し,さらに「ソルト」と呼ばれるランダムなデータを付け加えるようにすべきだと同氏は言う。このソルトを加えることで,元のデータの推測を格段に難しくすることができる。

 同氏は次に,暗号化の際に同じ鍵を何度も使うことの危険性を指摘した。同一の鍵でデータやパスワードを暗号化している場合,攻撃者が何らかの手段で通信ストリームを盗聴できれば,複数の暗号化されたデータから元の鍵を推測し,求めることができる。

 したがってこうしたケースでは,再現が不可能な何らかのデータ――たとえば入力時の時刻やランダムチャレンジなど――を組み合わせて同一の鍵の再利用を防ぎ,攻撃者による推測を困難にすることが必要だというのがグレイ氏の説明だ。

 しかもここで追加される「他のデータ」は,十分な長さを持っている必要がある。ここで問題があったのが,昨年話題になったWEPのセキュリティホールだ。WEPの場合,追加されるデータが24ビットという不十分な長さであったため,鍵の再利用を許す結果になってしまったという。

 同氏は他にも,「統計的に関連付けられた鍵」「予測可能なPRNG(擬似乱数ジェネレータ)のシード」「メッセージ認証の軽視」といった落とし穴を指摘した。いずれも,先に触れた2つの問題と同様に,「推測とチェック」の手法によって,重要なデータが解読される可能性がある。同氏はそれぞれの解決策として,ハッシュを活用して鍵が正しいものであることを確かめる,乱数生成のためのシードの多様化,それにMAC(Message Authentication Code)の利用が重要だとした。

 どのアルゴリズムを用い,どのような手順で暗号化を行ったりハッシュを取るか,細部まで気を配ってアプリケーションを設計しておかなければ,いずれはデータが読み取られてしまう。逆に言えば,ただ単に暗号化しているからといって,データの安全が保証されるわけではない。同氏のチュートリアルで紹介された論点は,まだ議論されること自体少ないが,開発者によって非常に重要な視点を示したものだといえるだろう。

関連リンク

▼RSAセキュリティ

[高橋睦美 ,ITmedia]