暗号化されたAppleiTunes iPhoneバックアップを復号化する方法は?
多くの不幸なiPhoneユーザーから、iTunesバックアップからデータを復元するのを手伝ってくれるように頼まれました。これは、暗号化されていない場合は簡単ですが、パスワードがわかっているかどうかに関係なく、暗号化されている場合は簡単ではありません。 そのため、暗号化されたときにmddataファイルとmdinfoファイルで使用される暗号化スキームを理解しようとしています。それ以外の場合はこれらのファイルを読み取るのに問題はなく、そのための堅牢なC#ライブラリをいくつか構築しました。(あなたが助けることができれば、私はあなたがどの言語を使うかは気にしません。それは私がここで求めている原則です!) Appleの「iPhoneOSEnterprise展開ガイド」には、「iTunesのデバイス概要ペインで[iPhoneバックアップの暗号化]オプションを選択すると、デバイスのバックアップを暗号化された形式で保存できます。ファイルは256ビットキーのAES128を使用して暗号化されます。キーはiPhoneのキーチェーンに安全に保管されています。」 これはかなり良い手がかりです。iPhoneAES / Rijndaelの相互運用性に関するStackoverflowには、128のキーサイズとCBCモードを使用できることを示唆するいくつかの良い情報があります。 他の難読化とは別に、キーと初期化ベクトル(IV)/ソルトが必要です。 キーは、ユーザーがiTunesによって入力を求められ、CBCによって指示された方法で埋め込まれた「AppleMobileBackup.exe」に渡される「バックアップパスワード」の操作であると考える人もいるかもしれません。ただし、iPhoneキーチェーンへの参照を考えると、「バックアップパスワード」がX509証明書または対称秘密鍵のパスワードとして使用されないのではないか、証明書または秘密鍵自体が鍵として使用されるのではないかと思います。(AESとiTunesの暗号化/復号化プロセスは対称的です。) IVは別の問題であり、それはいくつかのことかもしれません。おそらく、それはiTunesまたはデバイス自体にハードコードされたキーの1つです。 上記のAppleのコメントは、キーがデバイスのキーチェーンに存在することを示唆していますが、これはそれほど重要ではないと思います。暗号化されたバックアップを別のデバイスに復元できます。これは、復号化に関連するすべての情報がバックアップとiTunesの構成に存在し、デバイス上にあるものだけがこのコンテキストでは無関係で置き換え可能であることを示しています。では、鍵はどこにあるのでしょうか。 以下にWindowsマシンからのパスをリストしましたが、どのOSを使用する場合でもかなりの量になります。 「\ appdata \ Roaming \ AppleComputer \ iTunes \ itunesprefs.xml」には、「Keychain」dictエントリを含むPListが含まれています。「\ programdata \ apple \ Lockdown \ 09037027da8f4bdefdea97d706703ca034c88bab.plist」には、「DeviceCertificate」、「HostCertificate」、および「RootCertificate」を含むPListが含まれており、これらはすべて有効なX509証明書のようです。同じファイルには、非対称キー「RootPrivateKey」と「HostPrivateKey」も含まれているようです(私の読書では、これらはPKCS#7エンベロープである可能性があります)。また、各バックアップ内には、Manifest.plistファイルに「AuthSignature」と「AuthData」の値がありますが、これらは各ファイルが段階的にバックアップされるにつれてローテーションされているように見えますが、実際に何かがない限り、キーとしてはそれほど有用ではないことを示唆していますかなり関与しています。 暗号化されたバックアップからデータを取得するのが簡単であることを示唆する誤解を招くものがたくさんあります。そうではなく、私の知る限り、それは行われていません。バックアップ暗号化をバイパスまたは無効にすることはまったく別の問題であり、私がやろうとしていることではありません。 これは、iPhoneなどをハッキングすることではありません。私がここで求めているのは、暗号化されていないものと同じように、暗号化されたiTunesバックアップからデータ(写真、連絡先など)を抽出する手段だけです。上に書いた情報を使ってあらゆる種類の順列を試しましたが、どこにも行きませんでした。私が見逃したかもしれない考えやテクニックをいただければ幸いです。