😬

[iOS] Keychainの読み込み結果の各フィールドの意味

2024/11/09に公開

要約

Keychainでデータを読み込むと、Dict型でデータが返ってくる。
各フィールドが何を表しているかを調べる。

環境

  • Xcode(16.0)

Keychainとは

iOSのデバイス上に、セキュアにデータを保存するためのしくみ。
UserDefaultと違い、データは暗号化されて保存される。
また、AccessGroupを指定することで、アプリ間でデータを共有することも可能。

保存したデータを以下のコードで取得してみる。

func readDataFromKeychain() {
    var query: [String: Any] = [
        kSecClass as String: kSecClassGenericPassword, // <- GenericPasswordクラスのデータを取得
        kSecReturnData as String: kCFBooleanTrue!, // <- データを取得
        kSecReturnAttributes as String: kCFBooleanTrue!, // <- 属性を取得
        kSecMatchLimit as String: kSecMatchLimitOne // <- 1つのデータを取得
    ]
    var item: AnyObject?
    let status = SecItemCopyMatching(query as CFDictionary, &item)
    print(item)
}

readDataFromKeychain()

たとえば、以下のようなデータが取得される。

{
    accc = "<SecAccessControlRef: ak>";
    acct = "data2-group3-001";
    agrp = "YourTeamID.Ueeek.keychainTest3";
    cdat = "2024-10-05 14:19:11 +0000";
    mdat = "2024-10-05 14:19:11 +0000";
    musr = {length = 0, bytes = 0x};
    pdmn = ak;
    sha1 = {length = 20, bytes = 0xcf4890ced0ef24d762d8f080bb36bae0d20f4c15};
    svce = service"";
    sync = 0;
    tomb = 0;
    "v_Data" = {length = 6, bytes = 0x646174612d31};
}

各フィールドの意味

  • accc
    • kSecAttrAccessControl
    • その項目のアクセス制御情報を表す
  • acct
    • kSecAttrAccount
    • その項目のアカウント名を表す
    • 書き込むときに、kSecAttrAccountに渡した値が入る。
  • argp
    • kSecAttrAccessGroup
    • その項目が所属するアクセスグループを表す
    • 書き込むときに、kSecAttrAccessGroupに渡した値が入る。
  • cdat
    • kSecAttrCreationDate
    • その項目が作成された日時を表す
  • mdat
    • kSecAttrModificationDate
    • その項目が最後に変更された日時を表す
  • musr
    • 公開されてないField?
    • Documentやコード内で記述が見つからなかった。
  • pdmn
    • 公開されてないField?
    • Documentやコード内で記述が見つからなかった。
  • sha1
    • 公開されてないField?
    • Documentやコード内で記述が見つからなかった。
  • svce
    • kSecAttrService
    • その項目のサービス名を表す
    • 書き込むときに、kSecAttrServiceに渡した値が入る。
  • sync
    • kSecAttrSynchronizable
    • その項目がiCloudで同期できるかどうかを表すBool
  • tomb
    • kSecAttrTombstone
    • 公開されてないField?
    • Documentやコード内で記述が見つからなかった。
  • v_Data
    • kSecValueData
    • その項目のデータを表す

Ref

Discussion