通常、新バージョンのiOSがAppleからリリースされると、当日中にはiTunesで旧バージョンへの復元 (同一バージョン同士でも、ダウングレードでも) ができなくなる。
▼例えば、iOS 4.0.2がリリースされた当日以降、4.0.1以前のどのバージョンのiDeviceも、復元すると4.0.2にするしかなくなる。もとのバージョンにも戻れない。
ユーザのiOSバージョンをコントロールしたいという趣旨があるんだろうが、特定のiOSバージョンを維持したいユーザや企業に取って、迷惑この上ないシステムと思う。
もちろん、特定のバージョンをjailbreakしたいという人には、このシステムは大きなハードルの一つ。
このシステムの鍵になるのがECID*と、Appleの認証サーバだ。
*ECIDはiDevice1台ごとに固有の、16桁のhex数列。iDeviceをリカバリーモードにして接続した状態で、WindowsのUSBviewや、MacのSystem Profilerを使用すれば、ECID自体は簡単に読み出すことができる。
参考エントリ:【iPad_JB】 OS 3.2のECIDをCydiaにファイルする
▼iTunesからファームウェアをアップデートする際には、復元の作業中に『アップデートされたiPhoneソフトウェアを確認中』というダイアログがでる。
この裏ではiTunesが、接続された機器のECIDと、アップデートしようとするファームウェアの情報を、Appleの認証サーバに送信し、チャレンジ・レスポンス認証を行っている。
- ファームウェアの情報が、Appleが許可しているバージョンの正規ファームウェアかどうか確認。
- 確認できれば、送信されたECIDとファームウェア情報をキーにして署名(ECID SHSH) をしたファイル群 ECID blobsをiTunesに返す。
- 署名されたECID blobsを受け取って初めて、iTunesはファームウェアとECID blobsをiDeviceにアップロードする。
- iDeviceのブートROMは、自分のECIDの署名があるかどうかを確認し、復元作業に入る。
新しいファームウェアが出ると、古いファームウェアに復元できなくなるのは、Appleが古いファームウェアへの署名を停止するからだ。
iTunesとApple認証サーバ間は、驚いたことに暗号化がされていない。ただし、署名されたECID SHSHは128ビットの暗号化がされているため、改造や加工をすることはできない。
ECIDによるファームウェア認証は、3GSと、第3世代Touchで初めて利用されるようになり、ブートROMにこのためのシステムが組み込まれている。なお、iOS4.0以降では、3G以前の旧デバイスでもソフトウェアベースのECID認証がされるようになった。
このAppleの認証システムに対抗し、特定iOSバージョンのECID SHSHを保存、将来のiOSダウングレード・パスを確保する方法が3つある。
(1) JailbreakしてCydia経由で行う方法
【注意】Jailbreakは、いかなる問題・障害が起きたとも、全て『自己責任』で対処する必要があります。
iDeviceをjailbreakした場合の問題やリスクについて詳しくは、こちらのエントリをご参照ください。
▼初めてjailbreakして、Cydia (App Storeにあたる、Jailbreak App用のストア) を起動すると”Make my Life easier” と “I hate jailbreaking. Go away”の2択質問がでる。
“Make My Life Easier”をタップすると、そのiDevice固有のECIDがCydiaの認証バイパスサーバ(仮称: いい名前がないw 前のエントリではキャッシュサーバと読んでた。)に送信される。
あとは、Cydiaの認証バイパスサーバが、多数のユーザから受け取ったECIDを、バッチ処理で順番にAppleの認証サーバに送りつけ、ECID SHSHをたんまり溜め込んでいる。
一度”Make My Life Easier”としておけば、新バージョンのファームウェアが出れば、新しいファームウェア用にCydiaサーバECID SHSHをせっせと取得してくれる。その間、iDeviceがどのiOSバージョンであっても、jailbreakされてようがされてまいが、おかまいなしだ。
誤って”I hate Jailbreaking”をタップしてしまった場合、Cydiaのトップ画面下部の、Credits/Thank Youのセクションの『developing』の文字をタップすればよいらしい。
jailbreakが前提というハードルはあるが、この方法は自動的にどんどんECID SHSHをCydiaサーバに登録してくれる、という点で非常に使いやすく、お手軽だ。
▼ECIDが正しく登録されれば、Cydiaのトップ画面にSHSHs on file…というメッセージと、登録されたバージョンが表示される。最新のものが表示されるまでには、若干日数がかかるが、サーバ側で確実に作業はしてくれているはず。
これは、iPhone4を出荷時に4.0でjailbreakしたもの。その後勝手に4.0.1もサーバ側で作業され、表示されるようになった。
Cydiaに登録されたバージョンのECID SHSHを利用して、iOSのダウングレード・復元をする方法も非常に簡単。hostsファイルの最後にcydiaサーバのアドレスを追加するだけだ。
Windowsの場合:
C:\Windows\System32\drivers\etc\hosts (Windows)
Mac OS Xの場合:
/etc/hosts
の最後に、74.208.10.249 gs.apple.com を追加。
(うまく行かない場合は、74.208.105.171 でお試しのほど。情報thx: @freelyport 氏)
これにより、iTunesはAppleの認証サーバ (gs.apple.com) に問い合わせる代わりに、Cydia認証バイパスサーバに問い合わせ(リダイレクト)、あらかじめ登録されている、古いiOSバージョン用のECID SHSH blobsが送られてくる。受け取ったiTunesは、Appleの認証サーバが許可したものと思い込み、復元が成功する。という仕組み。
▼例えば、4.0.2がリリースされた場合。iOS4.0 ECID SHSH だけが登録されたiDeviceでは、iOS 4.0にダウングレード復元することが可能になる。
この例の場合、4.0.1 から4.0.1からの復元は4.0への一方通行になる。ダウングレードしたら、4.0か4.0.2にのみ、復元できる。
▼なお、ファームウェアをiTunesでダウングレード復元する際には、ipsw上のベースバンドより、現在iPhoneに書かれているものが新しい場合、復元完了直前にエラー1015が出て、iPhoneはリカバリーモードになる。
この状態になったら、iRecovery (と、同梱のlibusb)を使用する必要がある。詳しい解説がこちらのサイトにあった。
Macはコンソール、Windowsはコマンドプロンプトから操作する。
iRecovery -sで起動し、set auto-boot true、saveenv でiPhoneのブート情報を書き換え、/exit でiPhoneを取り外す。リブートすれば、アクティベーション・モードになるので、iTunesが起動していれば、自動的にアクティベーションされ、復元が完了するはず。
後述のTiny Umbrellaの最新版で”Kick Device Out of Recovery”ボタンを使用しても、同じ事ができる。こっちの方がiRecoveryよりお手軽。
参考エントリ:【iPhone3GS_JB】部分訳ーCaching Apple’s Signature Server
(2) iTunes経由で行う方法 (Jailbreak不要)
hostsファイルをCydia認証バイパスサーバに変更して、iDeviceを復元するだけ。前述の方法と一緒。
この状態で復元すれば、Appleの認証サーバとiTunesの間にCydiaの認証バイパスサーバが介在し、ECIDを受け取り、あとはCydiaの”Make It Easier”の場合と同じように、延々とECID SHSHを取得し続ける。
復元の方法も、同様。hostsファイルが書き換えて有れば、iTunes経由でダウングレード・復元ができるようになる。
この方法の問題は、きちんとCydiaの認証バイパスサーバに、ECID SHSHが保存されているか、iDeviceをjailbreakするまでは確認できないところ。Cydiaの作者のSaurikが何か方法を提供してくれればいいんだが。
(3) Tiny Umbrellaを使う方法 (Jailbreak不要)
notcomが開発した、Tiny Umbrellaというツールがある。このツールは言わばCydiaの認証バイパスをローカルマシンで行うようなものである。
▼Windows版、Tiny Umbrella 4.01.08にiPhone4をつないだ状態の画面
Windows版とMac版があるが、どちらでもAppleの認証を受けたECID blobsをハードディスクに保存しておくことができる。ツールから、TSS Serverという機能を起動すれば、スタンドアロン環境でiTunes経由で特定のバージョンに復元ができるようになる。
Advanced Optionsをチェックすると表示される、Requests From:のところで、Cydia認証バイパスサーバを使うか、Appleの認証サーバを使うか、選ぶことができる。デフォルトはCydiaな点に注意。
Tiny Umbrellaを使用すれば、Cydiaがダウンしていたりしても、ローカル環境だけで復元ができるし、確実に手元にECID blobsを保管できるのがメリット。
また、(1)、(2) の方法同様、Cydiaの認証バイパスサーバに対し、ECIDを登録する作業も行うことができる。
現状、上記3種類の方法のいずれかにより、特定バージョンのECID SHSHを確保すれば、ダウングレード・復元手段が確保できる。
しかし、Appleが今後iTunesでの復元認証方法に手を入れてくるかわからない。そうなれば、せっかくECID SHSHをCydiaにファイルしていたり、手元にblobsを持っていても何の役にも立たなくなる可能性がある。
@Woggieeeeをフォロー