情報科学屋さんを目指す人のメモ

方法・手順・解説を書き残すブログ。私と同じことを繰り返さずに済むように。

復元が不完全!?iPhoneバックアップで認証情報が復元できない理由とバックアップのオススメ設定

iOS (3) iPad (4) iPhone (144) iPod (1) iTunes (5) Mac (13) バックアップ (7)

iPhoneのバックアップ機能はとても強力です。しかし実は、初期設定のままバックアップした場合、「肝心なもの」がバックアップされません。あまり知られていないのですが、これが原因で各種「認証情報」が復元できず、機種変時にいろいろな問題が発生しているようなのです。

  • アプリが動かない・起動しない。でも再インストールしたら直った
  • パスワードが全部入れ直し(Wi-Fi・メールなど)
  • データが引き継げなかった

メールアカウント全部,Evernote系アプリ3種,toggle,Gladinet cloud,Facebook,twitter, Flicr,mixi 等々,ひたすらアカウント情報の再入力をしまくりました引用元

問題自体は有名なのですが、あまりにも問題が発生する仕組みが知られていないため、「仕方ないことだ」「機種変時には避けられないこと」と誤解している人が多いのが現状です

そこで今回は、ほとんど知られていない意外なバックアップの仕組みと注意点をしっかり紹介・解説します。

そして、その「肝心なもの」までバックアップできるそんなの気がつかないよ!な「バックアップのおすすめ設定」を紹介します。

おすすめ設定だけ知りたい人は「【最重要】おすすめ設定」という章までジャンプしてください。「肝心なもの」が何だか知りたければ「肝心なもの」でページ内検索をしてください(たぶん何それ?ってなる)

このブログの方針には「仕組みを書いておくことで役に立つ」というものがあるので、背景解説から読んでもらえると嬉しいです。

目次
(目次クリックで本文へ)

もくじ

  • 1.えっ、それがバックアップできないの?
  • 2.キーチェインの仕組み
    • 2-1.パスワードはキーチェインに保存されている
    • 2-2.キーチェインを暗号化する「暗号鍵」
  • 3.初期設定では「キーチェイン専用の暗号化鍵」をバックアップしない!
    • 3-1.問題の原因はこれ
    • 3-2.機種変じゃなければ大丈夫だから紛らわしい
  • 4.どうして「機種変したら○○が動かない!」になるのか
    • 4-2.まずい例
    • 4-3.データが消える
    • 4-4.データが再取得なら気がつかないかも
    • 4-5.じゃぁユーザはどうすればいいの?
  • 5.【最重要】おすすめ設定
  • 6.暗号化バックアップで解決する理由
  • 7.まとめ
    • 【アプリユーザ向け】まとめ
    • 【アプリ開発者向け】まとめ
  • 8.注意点
  • 9.iPhone5への機種変後利用不能報告が多いアプリ
  • 感想
  • 【アプリユーザ向け】参考資料
  • 【アプリ開発者向け】参考資料

1.えっ、それがバックアップできないの?

初期設定では「iPhone上で入力したパスワードを含めた各種認証情報」がバックアップされません

実は、iCloudおよび初期設定のiTunesが行うバックアップでは、新端末で「パスワード」などの認証情報を復元できない不完全なバックアップが作成されます。

そのため、機種変後の端末でアプリがパスワードなどを利用できず、再入力を求めたり、最悪エラーで動作しない状況になってしまうのです。

ではなぜこんな仕組みになっているのでしょうか。これを理解するために「キーチェイン」という仕組みについて説明します。

2.キーチェインの仕組み

iOSには、キーチェイン(KeyChain)と呼ばれる仕組みがあります(MacOSも搭載しているが仕組みに違いがある)

「キーチェイン」はiOSの中でも特にセキュリティを重視した「データの保存場所」です。

2-1.パスワードはキーチェインに保存されている

iPhone/iPadアプリ開発において、パスワードなどの認証に関する情報はキーチェインに保存することが推奨されています。

そして、キーチェインは暗号化されてiPhoneに保存されています。

2-2.キーチェインを暗号化する「暗号鍵」

このとき、iOSのキーチェインはユーザのパスワードなどで暗号化されるのではなく、iOSが裏でひっそりと生成した専用の暗号鍵によって暗号化されます。

当然、この「キーチェイン専用の暗号化鍵」が無ければキーチェインの中身を見ることは不可能です。

3.初期設定では「キーチェイン専用の暗号化鍵」をバックアップしない!

実は、iTunesの初期設定(およびiCloud)では「キーチェインのデータ自体」はバックアップされるのですが、肝心の「キーチェイン専用の暗号化鍵」がバックアップされないのです。

冒頭で言っていた「肝心なもの」とはこの「キーチェイン専用の暗号化鍵」のことです。

3-1.問題の原因はこれ

したがって、バックアップした情報全てを新しいiPhoneに復元したとしても、バックアップしていたキーチェインは利用不可能です。

これが「機種変したら○○が動かない!」「パスワードの再入力が必要」が起こる根本的な原因です。

3-2.機種変じゃなければ大丈夫だから紛らわしい

ではバックアップ元のiPhoneに復元した場合はどうなるかというと、キーチェイン専用の暗号化鍵は端末に元からあるので、何事もなかったかのようにバックアップされていたキーチェインの情報を読み出すことに成功し、問題にはなりません

このようになっているのは、バックアップデータが盗まれたとしても、キーチェインに格納されている重要な情報が取り出されないようにするためです。つまり、「バックアップ元の端末が無いと読み出せない」というわけです。セキュリティを意識したキーチェインならではの仕組みです(参考:Keychain Services Programming Guide: Keychain Services Concepts)。

4.どうして「機種変したら○○が動かない!」になるのか

このように、初期設定でバックアップしたユーザは、キーチェインを引き継ぐことができません。

そんなとき、アプリケーションがキーチェインからあるはずの認証情報を取得できなかったときにどのような挙動を示すのかがとても重要になります。

4-2.まずい例

ありそうでまずいのが、「キーチェインからの認証情報取り出し失敗」「サーバへの送信・認証の失敗」を区別せず、まとめて「一時的な認証失敗」として扱ってしまう場合です。

つまり、ネットワークの問題やサーバの問題による一時的な認証の失敗でしかエラーの発生を想定しておらず、キーチェインからパスワードやユーザIDを取り出せなかった場合でも同じエラーとして扱うため、永遠に再認証を試みてしてしまい、抜け出せなくなるのですiPhone5機種変時に大量発生したLINEのエラーも、エラーメッセージ的にこのあたりが原因ではないかと思います)

4-3.データが消える

したがって、キーチェインから必要な情報が取り出せなかった場合は、再度パスワード・ユーザIDを入力させる仕組みを用意する必要があります(参考:Adding Keychain Services to Your Application)。

そして、このような再認証の仕組みが無い場合は、ユーザが再インストールなどでアプリの状態をリセットせざるを得ない状態になってしまいます。

つまり、端末に保存されていたデータが初期化され、端末にしか保存されていなかったデータが失われてしまうのです。

4-4.データが再取得なら気がつかないかも

一方で、再インストールすることになったとしても、Twitter(クライアント)のようにサーバ側から主要なデータを再取得可能なアプリケーションの場合なら、まさかこんな仕組みが背景にあったことに気がつくこともなく、アプリケーションを今まで通り再び利用可能になるわけです(設定内容は消えるかもしれないが)

4-5.じゃぁユーザはどうすればいいの?

以上から、初期設定でバックアップした時点で、かなり状況がきびしいと言えます。やはり、キーチェイン内のデータも機種変後の新しい端末で利用したい

では、ユーザ側は、キーチェインの内容を引き継ぎ、アプリのデータをしっかり引き継ぐためにどんな対策ができるのでしょうか。もうとっくにお分かりの通り、「初期設定じゃない」設定が用意されているのです。

5.【最重要】おすすめ設定

iTunesを用いたバックアップでは「バックアップの暗号化」という設定ができます

これで問題が解決する理由は置いておいて、先に手順を説明します。

  1. iTunesの「デバイス」にあるiPhoneを選択して、「概要」を選択します。
  2. 「バックアップ」にある「このコンピューターにバックアップを作成」にチェックを入れます。
  3. 「ローカルのバックアップを暗号化」にチェックを入れます

この設定を行った状態でiTunesにバックアップすれば、キーチェインが機種変で移行できない問題が解決されます。

※iCloudではなく、iTunesを利用することが重要です。
※通常のバックアップより時間がかかります。

作業にあたって困ったら、「【iPhone】データをiTunesにバックアップする手順メモ(画像付き・iOS8提供iPhone 6発売直前時点)」を読んでみてください。

※「8.注意点」も参照してください。

6.暗号化バックアップで解決する理由

今までキーチェインの話ばかりしていたので誤解があるかもしれませんが、初期設定では、キーチェイン以外のデータは暗号化されずにそのまま保存(バックアップ)されています(そもそもiPhone内部で暗号化済みの部分もある)。

これに対して「バックアップの暗号化」を行うと、「ユーザが指定したパスワード」によって「バックアップ全体」が暗号化されます

このときiTunesは、「ユーザが指定したパスワード」で「キーチェインの暗号化鍵」も一緒に暗号化してバックアップしてくれます。つまり、暗号化するかどうかでバックアップ対象が増えるわけですね。しかも超重要なものが。これは分かりにくい

そして、キーチェインの暗号化鍵を含んだバックアップから機種変後の端末に復元すれば、キーチェインの暗号化鍵まで含めて復元される、つまりキーチェインが利用可能な状態で復元されるのです

こうして、今まで説明したようなキーチェインにアクセスできないという問題が解決されるのです(これはデフォルトのキーチェインデータについてであり、キーチェインのうち、他の端末に移行不可と設定されたデータは復元不可能という例外もあります←末尾にて説明)

こういう仕組みだったのですね。調べていて、「あー、あの挙動はこういうことだったのかー」と納得できてとても楽しかったです。

7.まとめ

【アプリユーザ向け】まとめ

結果、ユーザは何を気を付けるべきかというと、とにかくバックアップは暗号化がオススメということです。ただし、バックアップの暗号化に利用したパスワードは忘れないように気を付けてください。

「機種変の直前に暗号化バックアップすればいいんじゃないの?」というのは「No」です。なぜなら、水没や破損・故障・盗難などのアクシデントがあった場合にも新端末になり、暗号化バックアップしていないとキーチェインが引き継げず、アプリが移行できなかったり、動かなかったりでいろいろ困ってしまうからです。いつ「暗号化バックアップ」が必要になるかわかりません。

【アプリ開発者向け】まとめ

(自分がiOSアプリを開発したことがないのに言うのは妙なことなのですが、)「キーチェインが移行されなかった場合の挙動を実装する」のをおすすめしたいとおもいます。前述したような実装だと、「iPhone5で動きません!!!」と各所から言われることになって大騒ぎになるのではないかと思われます(すでになっている様子も…)。

また、引き継ぎの可否を含めたキーチェインのセキュリティに関する設定はいろいろ変更可能なので、「参考資料」もチェックしてみてください。

8.注意点

ここで注意なのですが、「暗号化バックアップ」をしたからといって完全にバックアップできる・問題がすべて解決するというわけではないという点を忘れないでください。

たとえば、「決して他の端末に引き継げないようにするオプション」というものがあるので、これをアプリ開発者が指定していた場合はそれを引き継げませんし、そもそもiOSの仕組み上、バックアップの対象にならないディレクトリ(フォルダ)が存在します。したがって、真に完全なバックアップは無理なのです(→イメージバックアップではない)。

その他の注意点としては、機種変して家に帰ってすぐ復元するより、一度リセット(初期化)してから復元した方がよいそうです(iPhone 5を買ったらまずすること。それは旧端末からの「データの復元」!!)。確かに電話帳の復元に失敗している人とか多いですし。

それと、バックアップ・復元周りは本当に失敗例が多いので、よく調べてから行ったほうが良いかもしれません。「復元してみたらiOSのバージョンが上がっていてビックリ」のような「予定外」に遭遇している例も多く見かけますし。

9.iPhone5への機種変後利用不能報告が多いアプリ

あまり調べられていませんが、参考までに機種変更時に利用不能(要再インストール)になると言われているアプリを列挙しておきます(当然、原因が認証情報が復元できなかったからだけとは限らない点に注意)

解説したように、通常バックアップからの復元では、パスワードの再要求は仕方のない仕組みです。パスワードの再要求ができない場合、アプリは利用不能になってしまうわけです。

感想

機種変でトーク履歴が消える人続出中!「LINE」が壊れないデータ移行手順とは(iPhoneからiPhoneへの機種変向け)」の記事を書いて、iPhoneのバックアップ時の挙動について調べてみると、なかなか事情が複雑だということがわかりました。

そして、このあたりの複雑さが原因なのか、アプリ開発者向け記事はほんの少し見つかるのですが、ユーザ向けの記事はほんと見つかりませんでした。見つかるものと言えば、「暗号化」にチェックを入れたら引き継げた、という部分だけで、どうしてそんなことになるのかはまぁ気にしない、もしくは「パスワードを引き継ぐには暗号化が必要です」のようなappleの公式説明書を引用しているというパターンが多かったです。

もちろんそのような記事と同様に設定方法だけを書いても良かったのですが、最近今まで以上に「操作方法だけ書いてあっても」という気持ちが強くなって、いろいろと書いて、またまたこんな長い記事になってしまいました。まぁ、なかなか最後まで読んでもらえなくなる、というのが残念なところなのですが。。。

※見つけた文章の説明を読んだだけでは判断が付かない部分も多かったので、挙動の間違いについて指摘してもらえると助かります。ただ、分かりやすさ優先で表現を選んだ部分も多いので、そのあたりの問題もあるかと思います。

以降、参考資料や詳細情報です。

【アプリユーザ向け】参考資料

iCloud:バックアップと復元の概要

iCloud:バックアップと復元の概要」には、次のような記述があり、キーチェインがバックアップされないor復元後に利用できないことを示唆しています。

注意:デバイスで有効なすべてのアカウントのパスワードを入力するよう求められる場合があります。また、iCloud バックアップがコンテンツの復元を試みている、iTunes、iBookstore および App Store のアカウントのパスワードを入力するように求められる場合もあります。

iOS:現在の iPhone、iPad、または iPod touch から新しいデバイスに情報を転送する

iOS:現在の iPhone、iPad、または iPod touch から新しいデバイスに情報を転送する」では、機種変時のデータ転送方法(旧端末でのバックアップと新端末での復元)が解説されています。

iOS:バックアップ方法

iOS:バックアップ方法」では、バックアップ方法および復元方法が解説されています。

iTunes:iOS ソフトウェアの復元

iTunes:iOS ソフトウェアの復元」では、トラブルシューティングとしての復元、つまり同端末でのバックアップ・復元について解説されています。

iPhone ユーザガイド iOS6ソフトウェア用

http://manuals.info.apple.com/ja_JP/iphone_user_guide_j.pdf(.pdf)」はいわゆる説明書です。

「iTunes」でバックアップするときにお使いのコンピュータに保存される情報を暗号化したい場合は、デバイスの「概要」パネルで「iPhone のバックアップを暗号化」を選択します。暗号化されたバックアップは鍵アイコンで示されます。バックアップから復元するには、別のパスワードが必要です。このオプションを選択しない場合は、ほかのパスワード(メールアカウントのパスワードなど)がバックアップに含まれないため、バックアップを使ってデバイスを復元する場合にパスワードを再入力する必要があります

キーチェインの振る舞い

アプリをアンインストールしても残る

キーチェインの情報はアプリをアンインストールしても残ります。したがって、アプリを再インストールしても同じ認証情報を引き続き利用可能なのは、この仕様のおかげです。

【アプリ開発者向け】参考資料

Keychain Services Programming Guide: Keychain Services Concepts

Keychain Services Programming Guide: Keychain Services Concepts」は最重要資料です。

このあたりは便利なラッパーがあるようで、開発者にあまり詳細(復元の可否との関連)が知られずに使用されている場合が多い気がします。

iPhone Keychain Backups

The system generates its own password for the keychain, and stores the key on the device in such a way that it is not accessible to any application. When a user backs up iPhone data, the keychain data is backed up but the secrets in the keychain remain encrypted in the backup. The keychain password is not included in the backup.

Keychain Services Reference

Keychain Services Reference」も重要な資料で、よりアプリケーション実装に近い情報がわかります。

Key Type Values

These constants are legal values for kSecAttrAccessible used for determining when a keychain item should be readable. 引用元

KeyChainに保存するデータ(Item)の属性(Keychain Item Accessibility Constants)を指定することで、機種変時の挙動が変わります。

引き継ぎ可能(Not ThisDeviceOnly)
  • kSecAttrAccessibleAfterFirstUnlock
  • kSecAttrAccessibleAlways(非推奨)
  • kSecAttrAccessibleWhenUnlocked

これらのうちのいずれか指定されているItemは、暗号化バックアップをしたときに新デバイスへ引き継がれます。つまり、通常バックアップでは引き継がれません(Items with this attribute migrate to a new device when using encrypted backups.)。

引き継ぎ不能(ThisDeviceOnly)
  • kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly
  • kSecAttrAccessibleAlwaysThisDeviceOnly(非推奨)
  • kSecAttrAccessibleWhenUnlockedThisDeviceOnly

これらのうちのいずれかが指定されているItemは、バックアップ不能です。つまり、暗号化バックアップしても引き継がれません(Thus, after restoring from a backup, these items will not be present.)。

メモ

デフォルトで「kSecAttrAccessibleWhenUnlocked」が指定されているため、デフォルトなら暗号化バックアップによって他のデバイスに引き継ぎ可能です。また、読んで分かるように、KeyChainの中身が非暗号化バックアップで引き継がれることは一切無く、暗号化バックアップが必須です(前述した理由から当然)。

Keychain Services Tasks for iOS

Keychain Services Programming Guide: Keychain Services Tasks for iOS」は、Keychainの基本的な使い方を解説しています。

iTunes:iOS のバックアップについて

iTunes:iOS のバックアップについて」には、バックアップ対象が詳細に列挙されています。あまりにもたくさん列挙されているため(34項目)見逃しやすいのですが、最重要な記述はこれです。

キーチェーン (メールアカウントのパスワード、Wi-Fi パスワード、および Web サイトやその他のアプリケーションに入力するパスワードなどです。iOS 4 以降でバックアップを暗号化する場合は、別のデバイスにキーチェーン情報を転送することができます暗号化されていないバックアップの場合は、キーチェーンを同じ iOS デバイスにだけ復元できます。暗号化されていないバックアップを使用して新しいデバイスに復元する場合は、これらのパスワードをもう一度入力する必要があります)

今回は、ある意味この1項目を詳細に解説したとも言えますね。

その他

ブログの更新情報はこちらから

RSS を 購読 する Facebook いいね! は こちら から Twitter で @did2memo をフォロー

コメント(2)

  1. くみくみ
    2013年11月10日(日) 21:40

    暗号化してやったのですが、i.softbank.jpのほうのメールが全て復元されませんでした。
    もう一度、最初から、バックアップとるところから、やり直してもダメでした。
    どうしてでしょうか?

  2. あほいうな
    2014年6月17日(火) 20:15

    >実は、iTunesの初期設定(およびiCloud)では「キーチェインのデータ自体」はバックアップされるのですが、肝心の「キーチェイン専用の暗号化鍵」がバックアップされないのです。

    ではなぜiCloudバックアップから復元するとLINEなどのアプリでパスワード再入力を必要とせず、当然トーク履歴も消えずに済むのか説明してください。憶測だけで勝手に記事を書くのはやめましょう。

新しいコメントを投稿