DO NOT PAY FOR JAILBREAK YOUR DEVICE!

最近、『NTTドコモのSIMカードでLTEを使えるようにする』『ソフトバンクやKDDIで月額を払わなくてもテザリングができるように』などのフレーズで『CommCenter* patch』や各種キャリアバンドルをインストールする代行業者があるようで、たいへん多くの「どのような関係性があるのか」「無償で提供しているように見せかけてカネを取るのか」「いくら儲かるのか」といった問い合わせを受けています。

これらの悪質な業者と我々は、いっさい関係がありません。Jailbreakは無償で提供されるべきものであり、これを商用利用すべきものでもありません。 [続きを読む »]


2012年11月6日火曜日

iOS 6.0.1でNTTドコモ『Xi』でのLTEを使うためのアレコレ

今回のエントリは、筆者自身がiPhone 5のSIMフリー版(A1429)を保有しておらず再現実験が完全ではないため、一部に間違いがあるかもしれません。にもかかわらず〝どうしてこうなるの?〟という問い合わせが多いので、手順と原理(の推定)を記しておきます。

今回の検証に際して、『MACお宝鑑定団』のライター諸氏にはたいへんお世話になりました。謝辞を申し上げます。

iOS 6.0.1へのアップデート提供開始以降、インターネット上で〝ドコモSIMでLTEが使える〟ということが話題になりました。当初は再現する環境が少なく、設定画面にLTEの切り替えスイッチなども表示されないため、「表示が間違っているのではないか」「そもそもウソなのではないか」といった声もあったようです。

以前にもエントリにしたように、NTTドコモとソフトバンクのLTEは方式と周波数帯が同一です。このため、SIMロックが解除された端末であれば相互にLTEが使えるのではないか、という見立てを書きました。また、これに該当するiPhoneはiPhone 5の〝A1429〟型番であることも書きました。

筆者はiOS 6.0.1リリース当日に、このバージョンからOS側のデータベースにキャリアHNI 44010=NTTドコモ=が〝LTE利用可能〟としてフラグが立てられたことを確認しており、少なくともローミング受け入れ時にはLTEが使えるのではないかという仮説を立てました。また、ふだんどおりにNTTドコモのSIMカードを挿入してもLTE表示にはならず、LTEスイッチも表示されないことを確認しました。これは、デフォルトのキャリアバンドルにLTEスイッチに関する設定がないので当然です。

1/30追記
このエントリの手順は、今のところiOS 6.0.2までで有効です。iOS 6.1にはOS標準の『設定』アプリとlockdowndのLTEフラグ制御にバグが残っていて、特定のUIDeviceFamily(※今のところ確認できているのはiPad miniおよびiPad Retinaのみ)でしか(非公式キャリアの) LTEエントリが有効になりません。

このように接続できるはずなのに接続できないものを接続するまでの手順をまず示します。

A1429なiPhone 5でドコモLTEに接続させるまで

端末を最新のiOSへアップデートする方法には、大きく分けて3つあります。

  • 端末の設定画面から最新のバージョンへ更新する (OTAアップデート)
  • iTunesから最新のバージョンへ更新する (差分アップデート)
  • iTunesから最新のバージョンへ復元する (完全アップデート)

まず、端末本体側とiTunesからの更新でも行われるプロセスが異なります。端末側ではアップデートされた部分のみが配信され、この差分を置き換えていきます。iTunesは基本的にはOS全体をダウンロードした上で、差分アップデートか完全アップデートかによって置き換える部分を決定します。

また、これら物理的なファイルを置き換えたあとのポストプロセスも、アップデート前に行われる準備段階のプリプロセスも異なります。ここでは、必要なくなったファイルなどを削除したり、複数の箇所や権限から参照するファイルやディレクトリにシンボリックリンクを生成したりしていますが、OTAではこれらが不完全です。今回のドコモLTEに接続できたりできなかったりする件も、この処理の不完全さに起因しています。具体的には以下のような手順でLTE接続が可能となります。

  1. 端末をiTunesから「復元」によってiOS 6.0.1へアップデートする
  2. NTTドコモのXi契約となっているSIMカードを挿入してアクティベートする(このSIMはカットしたものでも正規のnanoSIMでもOK)
  3. この状態で端末をiTunesから「更新」で再びiOS 6.0.1を適用する(Windowsではshift+[更新 更新を確認]、Macではoption-[更新 更新を確認])
11/09追記
日本語ロケールのOSではボタンの表記が [更新] ではなく [更新(アップデート?)を確認] であるというご指摘をいただきました。筆者は日本語表記が苦手なためにOSを英語ロケールで運用しているため、このあたりの確認が不足していました。

いったん完全なアップデートを適用し、NTTドコモのSIMカードが挿入された状態でアクティベーションを実行した上(アクティベーション自体はWi-Fi経由でもOK)、ふたたび差分アップデートを行う、というのがキモです。

アクティベーション時にLTE通信の使えるドコモMVNOのSIMカード(日本通信やIIJなどのもの)では、同様の手順を行ってもLTE通信が使用できないようですが、これはMVNOでは音声ネットワーク(CS)に接続することができず、一部の初期化コマンドが正しく受け入れられない(ドコモ本家=MNO=のデータ通信サービスはこれらが行える)ことに起因しているのではないかと推定します(筆者個人としては、ドコモ本家のデータプランが月々サポート施策によって月額1,200円程度で使用できる以上は、MVNOには存在価値はないと思っています)。

11/09追記
どこかのメディアなどが〝アップデート前にデータローミングスイッチをONにする必要がある!〟などと書き立てているようですが、これは関係ありません。SIMカードのIMSI(先頭5ケタ)と接続されたキャリアのHNIが一致している場合、データローミング設定はいっさい関係ないものとして扱われるためです(ローミングしていないのですから当然です)。アホしか読まないメディアなど読まないようにしましょう :)

どうして再更新で接続できてしまうの?

これに関しては、iOS 5からCommCenterのキャリアバンドル検証ルーチンが変更となり、iOS 5.1でキャリアバンドルのOTAアップデートが行える実装が入ったことが原因と推定しています。

キャリアバンドル自身はファイルシステムの /System/Library/Carrier Bundles/iPhone/ 以下にHNIで表記された実体と名前空間で作成されるHNIへのシンボリックリンクで構成されています。キャリアバンドルのOTAアップデート時は /var/mobile/Library/Carrier Bundles/ に新しいものが書き込まれます。この実装のために、iOS 5からは後者が存在する場合はそれを優先して読み込むようになり、iOS 5.1でキャリアバンドルのOTAアップデートが正式に実装されました。また、前者はシステム権限・後者はユーザー権限で読み込まれる、複雑な実装です。

キャリアバンドルとオペレータバンドル

そして、OSのアップデート時には /var/mobile/Library/ 以下に存在するシンボリックリンクの一部を、実体であるファイルやディレクトリに置き換える処理が行われています。これは、アクセス権限がアップデートによって変更となった場合の救済措置ではないかと考えています。この処理はアップデート前のバージョンの段階で行われますが(プリプロセス)、アップデート後のポストプロセスがOTAアップデートと差分アップデートで決定的に異なります。

OTAではユーザー権限である /var/mobile/ 以下はそのままとなりますが、iTunesからの差分アップデートではユーザー権限のファイルも正しく検証が行われて、/var/mobile/Library/Carrier Bundles/ に存在するファイルが、新しくなった /System/Library/Carrier Bundles/iPhone/ 以下の実体へのシンボリックリンクに置き換えられます。このため、新しくなったキャリアバンドルの設定が使用できることとなります。

ただし、オペレータバンドルと呼ばれる /var/mobile/Library/Operator Bundles/ 側のファイルが正しく作成・更新されない場合があり、この〝作成されない場合〟のほうに完全アップデートが・〝更新されない場合〟のほうにOTAアップデートが該当しています。

アクティベーションによるパラメータ設定

また、これら2つのバンドル以外に、初回アクティベーションに使用されたSIMカードから読み出された設定情報は暗号化されたプロファイルに保存され、ここには具体的にどのようなサービスとネットワークに接続できるのかという設定情報が含まれます。この際、音声ネットワークを経由して例えばHSDPA接続ができるか・LTE接続ができるか、できるのであればそのカテゴリは何かという情報も読み出されるため、ここに接続できないMVNOでは正しいパラメータが読み出せません。

iOS 6.0.1からNTTドコモのネットワーク上でLTE接続が可能になったわけですから、当然ながらiOS 6.0.1以降でのアクティベーション時にしか当該のパラメータを読み出そうとしません。そして、アクティベーションは復元による完全アップデート時にしか行われず、OTAアップデートや差分アップデートでは行われません。これによって、iOS 6.0からアップデートした場合とiOS 6.0.1で復元した場合で保持されているネットワークの初期情報が異なります(アクティベーションはCommCenterではなくlockdowndの権限です)。

キャリアとオペレータの複雑な関係性

用語としての解説も兼ねますが、まず〝キャリア〟はSIMカードを発行した事業者で、〝オペレータ〟は実際にサービスを提供する事業者です。オフィシャルキャリアであるソフトバンクを例に説明すると、日本国内で使用するぶんにはどちらも同一の〝ソフトバンクモバイル〟になります。米国へ渡航してAT&Tへの国際ローミングを使用した場合、キャリアは〝ソフトバンクモバイル〟オペレータは〝AT&T〟となります(これは設定画面の一般 > 情報で「ネットワーク」「回線」「キャリア」などとして確認できます)。

このため、キャリアバンドルとオペレータバンドルは同一である必要がなく、事業者のユニークなIDであるHNIやバンドル自身のバージョン情報も読み込み時には厳密に検証されていないため、例えば新しいキャリアバンドルと古いオペレータバンドル、という組み合わせでも動いてしまうことになります。

また、これらのファイルへアクセスする権限がシステムとユーザーで異なることに起因して、正しい設定が読み出せない状況が作り出されることがあります。さらに先ほど述べたアクティベーションによる初期情報の齟齬が発生します。このような状況がアップデートのやり方次第で作り出されてしまいます。

つまり、結果的に利用したい状況へ持って行くためには、「iTunesからクリーンインストールとしてiOS 6.0.1を復元し」、「使用したいカード(NTTドコモ Xi契約のもの)でアクティベーションを行い」、「iTunesから再びアップデートとしてiOS 6.0.1の差分アップデートを行う」という3点が必要となるわけです。

そもそもAppleはどうしてNTTドコモの周波数帯で認証を取るの?

NTTドコモのSIMカードでは、NTTドコモ自身がオフィシャルキャリアではないため、Unknown.bundleというデフォルトのキャリアバンドルが使用されます。ここにはLTEスイッチの設定もありませんし、当然APN設定なども空欄です。

ただし、NTTドコモは海外でも多数のオフィシャルキャリアが渡航時のローミング先として正式に提携しているキャリアです。NTTドコモも当然、ローミング時にはiPhoneを受け入れてサービスを提供します。これがiPhone 4SまではNTTドコモのプラスエリアで技術基準適合証明を取得していた理由です(iPhone 5でベースバンド自身がプラスエリアに非対応とした理由は、NTTドコモとしての800MHz帯のプラスエリア拡張予定がほぼなく、エリアとしてのカバレッジは2100MHz帯と近似したからという点もあると思います)。

LTE接続できるようになるまでの時代的背景

渡航先でLTEネットワークが利用できる〝4Gローミング〟も国際的に広がりつつあります。2100MHz帯でのLTEサービスは国際的にも極めて珍しい(※別エントリを参照のこと)ものですが、NTTドコモ側もLTEでのローミングを受け入れないとは発言していません。

いくつかのオフィシャルキャリア(AT&Tなど)が日本での4Gローミングサービスを発表するにあたって、NTTドコモが受け入れ先としてiOS 6.0.1から対応リストに入った、というのが事の真相です。

しかし、アップデート時のプロセスの違いによってこれらの実処理が異なってしまい、アンオフィシャルキャリアであるNTTドコモがキャリアかつオペレータの状況ではLTE接続できたりできなかったりという状態が発生すること、初回アクティベーションを行ったSIMカードのキャリアはファーストキャリアとして特別視されるために読み出されるパラメータが異なる状況が発生してしまう、という点が今回の一連の騒動の主な原因です。

これらの状況を鑑みて、AppleがふたたびNTTドコモのSIMカードによるLTE接続を塞ぐのではないかという懸念に関してはおそらくノーで、システムとしての実装のまずさに起因するトラブルであるため、将来的にはより正しい方向に改修されるのではないでしょうか。

個人的には、OSアップデート時は必ずiTunesから復元して新規設定しましょう・オフィシャルキャリアで使いましょう・どうしてもイヤならMVNOなど使わず正しくMNOを使いましょう、という3点に集約される話だと思っています。

0 件のコメント:

コメントを投稿