😬
[iOS] Keychainの読み込み結果の各フィールドの意味
要約
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
- その項目のデータを表す
Discussion