😬
[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