Cosnomi

プログラミングをする医学生。物を作ること、自動化すること、今まで知らなかったことを知ることが好き。TypeScript書いたり、Pythonで機械学習したりなど。

Twitter / GitHub / GPG key / Fediverse / My Page
TOP >

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

無線LANの通信規格であるWPA2はWEPなどと比べ安全だとされます。しかし、公衆無線LANでよく見られる、掲示されているパスワードを入力する方式は安全なのでしょうか。皆が同じパスワードを入力するので、なんだか怪しい感じがします。

本記事では、WPA2でクライアントとアクセスポイントの通信がどのように暗号化されるのかについて見ていき、公衆無線LANの安全性について考察します。

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などで教えていただけるとありがたいです。セキュリティは難しいけど、その精巧な仕組みには感動します。


Comments

記事一覧へ