WEPキーの生成手順を複雑に

図2●WEPとTKIPの暗号カギ生成手順の違い
TKIPでは暗号カギの生成手順が複雑になっているため,暗号カギの類推が困難になっている。MACアドレスなどを組み合わせてカギを生成することで,クライアントごとに異なるカギを実現。また,TKIPシーケンス・カウンタを使ってパケットごとに暗号カギが変化するようになっている。

 WEPでは,送出するパケットごとに暗号カギ(WEPキー)を自動的に変化させるようになっている。これは,暗号カギのもとであるベース・キーに,初期化ベクトル(IV:イニシャライゼーション・ベクター)という24ビットの乱数を組み合わせることで実現する。IVは,送信者側でパケットを送信するごとに生成される。

 ただ,クライアント側でランダムに生成したIVは,パケットに平文で挿入される。復号用にアクセス・ポイントにIVの値を通知するためである。これがクラッカにとってはWEPキーを類推する手がかりになる。WEPキーはIVとベース・キーをつなぎあわせるという程度の単純な処理で生成されているため,WEPキーから容易にベース・キーを類推できる。こうなると,暗号化の意味がなくなってしまう。

 TKIPでは,WEPキーの生成方法がもっと複雑になっている。TKIPの暗号カギは2段階の手順を踏んで生成される。まず,従来のWEPと同様に,クライアントやアクセス・ポイントにはあらかじめベース・キー(TKIPの場合はテンポラル・キーと呼ばれる)を設定しておく。第1段階では,クライアントのMACアドレスとテンポラル・キーを混ぜ合わせる(ハッシュ)。こうすることで,クライアントごとに異なる暗号カギができる(図2[拡大表示])。次に,この結果と,TKIPシーケンス・カウンタ(tsc)と呼ぶ48ビットの数値を使って再度ハッシュをかける。tscは1パケットごとに数値が増えるデータで,送信クライアント上で生成される。従来のIVと同じイメージで,パケットごとに異なる暗号カギを生成できる。これらの2回にわたる混合処理を実行することで,現状のWEPよりもWEPキーの類推を難しくしてある。

改ざん,なりすましを防御

図3●現行のWEPでは改ざんやなりすましやカギの類推を防御できない
暗号化されたパケットをキャプチャされ,改ざんされたり,再利用(なりすまし)されても,アクセス・ポイントは検知できない。結果として,クラッカが暗号を解くヒントを得てしまう危険性がある。改ざんやなりすましの攻撃は簡単ではないが,原理的には可能なため,対策が求められていた。

 WEPの改ざんに対するぜい弱性を突いた攻撃に,ビット・フリッピングがある。クラッカが,暗号化されたパケットを傍受,キャプチャし,そのパケットの一部を改ざんしてサーバーなどに送りつける攻撃だ。なりすましに対するぜい弱性は,キャプチャした暗号データをそのまま再送する,いわゆるリプレイ攻撃を可能にしてしまう(図3[拡大表示])。

 こうした攻撃を許してしまうと,内容の推測が容易な特定のパケットから暗号カギを類推されかねない。あるシステムへのログイン処理用のパケットを,クラッカがキャプチャしてリプレイ攻撃を仕掛けるとしよう。クライアントから送信されているデータには,ID/パスワードが含まれ,その応答パケットには認証OKを示すメッセージが格納される。メッセージ内容が既知なら,それを暗号化したデータを入手すれば,逆演算で暗号カギを割り出しやすい。ビット・フリッピングの場合は,暗号化データを書き換えることで,復号化された時点でわざとデータ誤りを発生させる。こうして,既知のエラー・メッセージが返されれば,暗号カギを類推できる。

 TKIPでの対策は2つある。改ざん防止のために,MIC(メッセージ・インテグリティ・チェック)という領域を付加し,ボディ部分にハッシュをかけた数値を入れる。アクセス・ポイントでは,データを復号化して中継する際にMICをチェックし,改ざんを検出したら,データを廃棄する。こうすることで,ビット・フリッピング攻撃は防げる。

 MICだけでは,キャプチャしたデータをそのまま使うリプレイ攻撃は防げない。そこでTKIPでは,パケットのシーケンス番号,つまりtscを識別して,過去に使われたシーケンス番号のデータがあった場合には,それを破棄する。

(河井 保博=kawai@nikkeibp.co.jp)