Cosnomi

医学生 / Web系や機械学習を勉強中。医療におけるIT活用に興味があります。

Twitter / GitHub / Keybase
TOP >

公衆無線LANのWPA2-PSKって本当に安全なの?

パスワードなしの無線LANアクセスポイントは安全でないという話はテレビ番組などでも紹介され、だいぶ浸透しているように感じます。また、WEPはもはや安全でなく、WPA2であれば安全だとしばしば言われます。しかし、本当にWPA2であれば安全なのでしょうか? また、WPA2自体が安全であったとしても、多くの場合、それらの運用は適切に行われているのでしょうか?

公衆無線LANの場合、パスワードが公開されてそれを入力するように求められることがありますよね。直感的には、皆が同じパスワードを入力するというのは安全でなさそうです。端末(client)とアクセスポイント(AP)の間の通信は暗号化されていますが、そのkeyが同じなのであれば容易に盗聴されてしまいそうです。さすがにそんな仕組みにはなっていないだろう…と思い調べてみたのですが、WPA2だからといって必ずしも安心できるわけではないようです。

WPA2には2つのモードがある

WPA2には2つのモードPersonal(WPA2-PSK)とEnterprise(WPA2-EAP)があります。名前の通り、それぞれ個人向けと事業向けの方式です。 この記事で重要になってくる両者の違いとしては、Pairwise Master Key (PMK)という通信の暗号化に間接的に使われるキーの取得方法が異なることです。Pairwiseという名前が示すとおり、PMKはclientとAPの両者で共有されています。

WPA2-PSKはみんな同じパスワードを使う

WPA2-PSKのPSKは事前共有キー(Pre-Shared Key)の略です。これは、clientとアクセスポイント(AP)の間で接続前に共有されているキーで、具体的に言うと、「ルーターのパスワード」のようなものです。家庭様無線LANルーターの本体側面にパスワードが書いてあったりしませんか? それがPSKです。あるいは、公衆無線LANで「次のパスワードを入力してください」と書かれている場合のそれです。ポイントはクライアント間でPSKが同じということです。

WPA2-PSKではPSKがPMKとなります。すなわち、PMKもクライアント間で同じになるのです。

WPA2-EAPはユーザごとに異なるパスワードを使う

WPA2-EAPのEAPはExtensible Authentication Protocolの略です。WPA2-EAPには、PSKがありません。企業の無線LANでは社員の出入りがあったりして、パスフレーズを共有するのは難しい場合があります。WPA2-EAPでは、認証サーバーに対して「ユーザーID/パスワード」や「電子証明書」を用いた認証を行うことになります。この認証はIEEE802.1x認証と呼ばれます。これであれば、ユーザーの追加や削除が容易になります。

WPA2-EAPでは認証サーバーからclientとAPにPMKが与えられます。認証サーバーはclientごとに異なるPMKを与えることが可能だということが分かります。

PMKからPTKを生成する手順: four-way handshake

PTKは暗号化に直接使われるkey

先程述べたとおり、PMKは暗号化に 間接的に 用いられるキーです。実際の暗号化に用いられるキーはPTK (Pairwise Transient Key) です。PTKは以下の5つの要素から生成されることができます。

  • PMK
  • APのMACアドレス(AA)
  • clientのMACアドレス(SA)
  • APで生成されるランダムな値nonce (Anonce)
  • clientで生成されるランダムな値nonce (Snonce) 両者が共通のPMKを持っている状態から共通のPTKを得るためには、これらの情報を交換する必要があります。この交換はfour-way handshakeと呼ばれる手順で行われます

four-way handshakeはnonceの交換

実際にfour-way handshakeで交換されるのは、5つの要素のうちAnonceとSnonceです。なぜなら、他はその前に共有されているからです。PMKはPSKとして既に両者で共有されている、あるいは、認証サーバから両者に与えられていますね。MACアドレスについては、そもそもhandshakeを開始する時点で分かっていないと通信できません。(WPA2の認証・暗号化の話はOSIモデルのデータリンク層での話なので、お互いのMACアドレスは知っていないといけません。ちなみに、clientにIPアドレスは割り当てられていません。)

下図はWikipedia Commonsから引用したものです。MICとは改ざん検出用のコードです。 4 way handshake WPA2

このようにして共有したPTKを用いて、clientとAPは暗号化された通信を開始します。ここで重要なことは、同じPMKを持つclientでもnonceが異なるためPTKは異なるということです。つまり、WPA-PSK方式では全てのclientが同じPMKを持つことになりますが、それでも実際に暗号化で使われるkeyであるPTKは異なるのです。それなら安心です、良かったですね、とはなりません。なぜなら、handshakeが安全でないからです。

four-way handshakeは盗聴されうる

暗号化されていないからnonceが漏れる

four-way handshakeの通信は暗号化されていません。なぜなら、handshake開始時点で、clientとAPは共通鍵の交換を終えていないからです。したがって、攻撃者はAnonceとSnonceを容易に得ることができます。この点については、WPA2-PSKとWPA2-EAPで変わりません。では、どちらも安全性は変わらないのでしょうか。

PMKは知られていないことが前提

しかし、公衆無線LANのケースでは両者に大きな違いがあります。WPA2-PSKでは攻撃者がPMK(=PSK)を得ることは容易です。なぜなら、それはしばしば掲示されているからです。一方、WPA2-EAPではclientごとにPMKは異なる(ことができる)ので、攻撃者がPMKを得ることは必ずしも容易でありません。PMKが知られていなければ、MACアドレスとnonceが知られていてもPTKを知られることはありません。

つまり、PMKは正規のユーザー以外に知られていないことが前提なのです。家庭用無線LANルーターがWPA2-PSKを採用するのは、ルーターの側面にある文字列なんかを知っているのは正規のユーザーしかいないだろうという前提があるからなのですね。

SSL/TLSがあるから大丈夫

こういう話をすると公衆無線LANを使うのが怖くなってしまうかもしれないのですが、実のところそこまで心配する必要はありません。なぜなら、この暗号化が破られたところで大した影響のない場合が多いからです。

最近のWebではclientとserverの通信のほとんどがSSL/TLSを用いて暗号化されています。この暗号化はアプリケーション層(あたり)の話ですよね。WPA2のようなデータリンク層で暗号化が破られても、より上の層で大きな壁があるので問題ないと考えられます。一方、古いWebページでSSL/TLSによる暗号化がされていない場合はその内容が盗聴されうるということに留意しておく必要があります。

公衆Wi-Fiはどのような場合に安全か

以下のいずれかに当てはまれば安全だと考えます。もちろん適切な運用がされている場合、という話になりますが。

  1. APとの通信がWPA2-EAPで暗号化されている (データリンク層での暗号化)
  2. SSL/TLSでWeb serverとの通信が暗号化されている (アプリケーション層での暗号化)
  3. VPNを使用している (ネットワーク層での暗号化)

最後に

私も勉強しながらこの記事を書いたので、間違っている所があればTwitterなどで教えていただけるとありがたいです。セキュリティは難しいけど、その精巧な仕組みには感動します。


記事一覧へ
コメントフォームは設置していませんので、ご意見・ご感想などはTwitter(@cosnomi)などへお願いします。