私の周囲に物理的に近づくことのできる人は、私が使っているノート型コンピュータの無線LANインターフェイスのMACアドレス*1を知ることができる。たとえば、セミナー等で私が講演している会場に来れば、講演中に私が無線LANのスイッチを切り忘れていたなら、無線LANのパケットを傍受することで私のMACアドレスを知るだろう*2。それだけでは他の人のアドレスと混じって区別できないだろうが、別の場所で再び同じことをすれば、両方に存在したものが私のMACアドレスだ。
これはもう隠しようがないので、先に自ら暴露してしまおう。「00:1f:5b:d1:ec:bd」は私のMACアドレスだ(図1)。
これを暴露するのはリスクのある行為であり、お薦め出来ない。また、仮に他人のMACアドレスを知ったとしても、当人に断りなく暴露する行為は控えるべきである。
しかし、知ることができてしまう以上、これが知られてしまっても問題を生じさせない社会が構築されるべきであろう。
さて、今週はIETF72に来ている。IETFの会場には無線LANが配備されており、そのネットは当然ながらIPv6対応だ。Macに乗り換えてから初めてIPv6の使える環境に来たので、自分のIPアドレスがどうサーバに伝わるのか調べたいと思い、「IPv6対応確認くん」のようなサイトはないかと探していたところ、なんと、ちょうど都合のよいことに、次のニュースが流れていた。
「fusianasan」も使えるようなので、早速書き込んでみた。
さて、このときの私のIPv6アドレスは「2001:df8:0:16:21f:5bff:fed1:ecbd」だった(図2)のだが、そのことは、私が黙っていれば他人にはわからない(ようになっているのが望ましい)。
しかし、この(128ビットある)の下位半分の64ビット(インタフェースID)は、私のMACアドレスから機械的に生成されている。(日経ネットワークの記事「シスコ資格:CCNPへの道(BSCI編) IPv6編<第1回> IPv6アドレスを知る」など参照。)
「21f:5bff:fed1:ecbd」は、「02 1f 5b ff fe d1 ec bd」のことで、私のMACアドレスの上位24ビット「00 1f 5b」と下位24ビットの「d1 ec bd」の間に固定の値「ff fe」が挿入され、上から7ビット目が反転されて(00 が 02になっている)生成されている(図3)。
したがって、私のMACアドレス「00:1f:5b:d1:ec:bd」を知っている人は、「21f:5bff:fed1:ecbd」も知ることができる。この文字列でGoogle検索してみるとどうなるだろうか。
そう、私が書き込んだ2ちゃんねるの文章が見つかってしまう。*3
このように、(基本形の)IPv6アドレスは、ケータイWebの契約者固有IDと同じプライバシー上の問題を孕んでいる。つまり、このままでは、
ということだ。(IPv6が十分に普及した暁には。)
この問題を避けるために、IPv6では、RFC 3041「Privacy Extensions for Stateless Address Autoconfiguration in IPv6」という規格が2001年に定められていて*4、IPアドレスの下位にMACアドレスを使用しない方法(しかも定期的に自動変更する方法)が規定されてる(10日の日記「日本のインターネットが終了する日」の後半の「IPv6のプライバシー問題は既に解決済み」参照。)。このアドレスのことを「anonymous address(匿名アドレス)」または「temporary address(一時アドレス)」と呼ぶ。
Windows Vistaでは、標準設定で、この一時アドレスを使うようになっている。そのため、Windowsでアクセスした場合は上記の問題が生じない。2ちゃんねるの「書き込みテスト 専用スレッド 1」でfusianasanで書き込んでいる事例のうち、下位アドレスの真ん中に「ff:fe」を含んでいないものは、一時アドレスで、これらはWindowsから書き込んだものと思われる。
さて、Mac OS Xにおいて、一時アドレスを使いたいのだが、どうやったらそれができるだろうか。GUIの設定項目を探している限りでは方法が見当たらない。ググってもそういった情報が見当たらない。
ググってググってググりまくったところ、ようやくその方法を見つけた。ターミナルから、以下のコマンドを実行すればよいようだ(管理者パスワードが必要)。
sudo sysctl -w net.inet6.ip6.use_tempaddr=1
これを設定して、無線LAN(Macでは「AirMac」と呼ばれる)を一旦「切」にした後「入」にすると、一時アドレスが使えるようになる。
図4のように、「IPv6アドレス」の欄に複数のアドレスが表示されるようになる。このうち、右半分の真ん中当たりに「ff:fe」がない方が、一時アドレスである。(ランダムな値のように見えるもの。)
ここで、2つのアドレスが割り当てられた状態なので、Webブラウザがどちらのアドレスを使うかが問題となる。Firefox 3とSafariで試してみたところ、どちらでも、ちゃんと、一時アドレスの方をソースアドレスとしてサーバにアクセスしていることが確認できた(図5)。
ただし、Mac OS Xを再起動するとこの設定は元に戻ってしまうことに注意が必要である。現在の設定状態を確認するには、以下のコマンドを使えばよい。「0」と表示されたときは、一時アドレスを使わない設定になっていることを意味する。
sysctl net.inet6.ip6.use_tempaddr
Mac OS Xで、起動時から「use_tempaddr=1」の設定となるようにしたいのだが、どうするのがよいだろうか。詳しい方の解説を待ちたい。
設定がよくわからない人には、IPv6を「切」に設定することをお勧めする。図6のところで「切」に設定できる。
ちなみに、
sudo sysctl -w net.inet6.ip6.temppltime=秒数
で、アドレスを変更するタイミングを設定することができるようだ。
それにしても、Webで見ている限り、これらの設定に関する解説が皆無だ。話題にしている人もごく少数しか見つからない。わずかに見つけたのは以下の3つだ。
さらにこれ以上の細かいパラメータの設定などはnet.inet6以下をsysctl(8)で設定することになります。これは他のBSDと同様に利用できます。例えば、
$ sudo sysctl -w net.inet6.ip6.use_tempaddr=1
とするとプライバシ拡張アドレス[RFC3041]を利用することができます。ルータ広告を受け取るか否かはip6configコマンドやGUIによってインタフェース毎に設定できますが、プライバシ拡張アドレスはip6configやGUIで設定でき ませんので、一度設定すると全インタフェースのアドレスがプライバシ拡張アドレス使用になってしまうことに注意してください。
Our IPv6 implementation comes with the code to enable this feature, but by default it is turned off. My proposal is to enable it by default, and (略)
1つ目は、KAMEプロジェクトについて書かれた何かの原稿のようだ。Mac OS XのIPv6スタックはKAME由来らしいので、設定方法が同じとなっている。原稿では、機能について一通り説明されているが、その必要性は説明されていない。
2つ目は、Mac OS Xでこの設定をした場合にハングアップしてしまうという不具合を指摘したもので、Apple Computerのtechnical staffが返事をしている。この不具合はおそらく現在では修正済みと思われる。
3つ目は、FreeBSDの開発チームの会話だろうか。一時アドレス機能をデフォルトで有効にしようよと提案されていて、賛同されている。2008年6月のやりとりなので、つい最近の話だ。近々、FreeBSDでも一時アドレスが有効になり、その後にはMac OS Xでもそうなるのかもしれない。
それにしても、日経BPや@ITなどのIPv6の解説記事を探しても、この「一時アドレス」のことについての解説がぜんぜん見当たらない。どういう危険が想定されてこの機能が用意されたのか、各種OSで標準設定がどうなっていて、どうやって変更できるかと、もっと一般の人達に解説され、周知されてしかるべきだろう。
IPv6の普及が十分でない現在ではまだこのリスクはあまり顕在化していないかもしれない。自宅のインターネット接続がIPv6対応していないという家庭はほとんどだろう。それでも、出先で使った無線LANが、知らないうちにIPv6対応しているということは、そろそろ起きても不思議ではない。アクセス先のサーバが知らないうちにIPv6対応していて、アクセスログをIPv6アドレスで記録しているということも、そろそろ増えてきそうだ(2ちゃんねるのように)。
IPv6対応サイトが少ないとしても、広告会社のサーバだけがIPv6対応していれば、広告によるトラッキングは可能になってしまう(アクセス元がIPv6対応していれば)。
ちなみに、昨年4月に総務省から出た「電子政府システムのIPv6対応に向けたガイドライン」には、次の記述が見られる。
5.3 匿名性や閉鎖性の低下によるプライバシー問題の顕在化への対応方法
電子政府システムのIPv6対応に向けたガイドライン, 総務省, 2007年4月2日
- IPv6アドレスは、後半64ビットに各ホスト固有の識別子(インタフェース識別子)を含む。インタフェース識別子は通常EUI-64を用いて定義される。
- 上のように定義されたアドレスを用いた場合には、固定されたインタフェース識別子からユーザの行動が追跡される、いわゆるトラッキングの危険が存在する。従ってプライバシーが懸念される状況においては、通常のEUI-64から生成されるアドレスに代わって、 RFC 3041で標準化されている Temporary Addressを用いることが推奨されている。
- Temporary Addressのインタフェース識別子には、ハッシュ関数を用いて生成される(擬似)乱数列を利用する。またアドレスには有効期限を設け、定期的に更新を行うことでトラッキングの防止を実現する。
- Windows XP SP2 のIPv6スタックには、このRFC3041一時アドレスが実装されている。Windows VistaにおいてはRFC3041に加えて、アドレス有効期限の延長が可能な、独自の一時アドレスも利用できる。
このことをもっと一般に知らせるべきだ。
たぶん同様の回答多数だと思うけど、 % echo net.inet6.ip6.use_tempaddr=1 | sudo tee -a /etc/sysctl.conf でよいのではないかと。(これがお作法に則ったやり方なのかはわからないですが) しかしこの件のように、MacOS X ではデフォルトが安全側に倒れてない場合がしば..
おいちゃんだよ!高木先生のところで、MacのIPv6のプライベートなところがMACアドレスから自動生成されちゃって、AirMacのMACアドレスと突き合わせると個人特定されちゃって嫌だよね、あとこれ(コンピューター的な意味で)個体識別されちゃうよね、って話が載っていた。...