ページ

2010年3月5日金曜日

Keychain Services 調査 (7) ドキュメントを読む #5 iPhone補足

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

(前回)Cocoaの日々: Keychain Services 調査 (6) ドキュメントを読む #4 - Keychain Services API の概要

今回は iPhone関連の補足など。

Mac Dev Center: Keychain Services Programming Guide: Keychain Services Concepts

Note: On iPhone, Keychain rights depend on the provisioning profile used to sign your application. Be sure to consistently use the same provisioning profile across different versions of your application.

iPhoneの場合、Keychainの利用可否は、アプリを署名した provisioning profile に依存する。

iPhone OS: The iPhone OS gives an application access to only its own keychain items. The keychain access controls discussed in this section do not apply to iPhone OS.

iPhoneの場合、アクセスできるのはアプリ自身が作成した keychain items のみ。


iPhone Keychain Backups

  • iPhoneの場合、アプリ自身が作成した keychain items には常にアクセスできる
  • 他のアプリの keychain items へはアクセスできない
  • システムは、keychain へのパスワードを生成し、どのようなアプリからもアクセスできない形で保存する
  • ユーザが iPhoneのバックアップを行った時に keychain data もバックアップされる。なお秘密情報は暗号化されたままバックアップされる
  • keychain のパスワードはバックアップには含まれない。これによって、他の人がバックアップを取得したとしても利用できない(暗号化されたパスワードや秘密情報を復号化できない)。
  • このため、iPhoneで Webサイトへのログインで使うパスワードなどを保存するのに keychain を使うことは重要である

iPhone OS Keychain Services Search Dictionaries
  • iPhone OS では、Keychain Services は keychain item を検索したり、作成する時に attributes の指定に key-value dictionary を使う
  • 検索用の標準的な dictionary は次の通り:
    ・検索対象の keychain item class(例:Internet passowrds, cryptographic keys)
    ・attribute data を特定するための条件(例:label, creation date)
    ・検索オプション(用途や大文字小文字無視など、例:issuing certificates, email addresses)
    ・戻り値の型(例:dictionary, reference)
  •  attributes は keychain class の種類に依存する(例:クラスが kSecClassGenericPassword の場合、creation date, modification date の指定はできるが、証明書で使う subjectや issuer などは指定できない)
  • Apple Store account の例

    { kSecClass              : kSecClassGenericPassword,
      kSecAttrAccount        : "ImaUser",
      kSecAttrService        : "Apple Store",
      kSecMatchCaseInsentive : kCFBooleanTrue,
      kSecReturnData         : kCFBooleanTrue }
  • 戻り値で dictionary を取得したい場合は、 kSecReturnAttributes : kCFBooleanTrue とする