[解決済み] キーチェーンのアイテムは何がユニークなのか(iOSの場合)?
質問
私の質問は iOS (iPhone、iPad、...) のキーチェーンに関するものです。Mac OS X でのキーチェーンの実装は、同じ質問と同じ答えを提起していると思います (確信はありませんが)。
iOS では、キーチェーンのアイテムに 5 つのタイプ (クラス) が用意されています。キーには、これら 5 つの値のいずれかを選択する必要があります。
kSecClass
というキーで、その種類を決定します。
kSecClassGenericPassword used to store a generic password
kSecClassInternetPassword used to store an internet password
kSecClassCertificate used to store a certificate
kSecClassKey used to store a kryptographic key
kSecClassIdentity used to store an identity (certificate + private key)
長い間、リンゴのドキュメントやブログ、フォーラムのエントリを読んできた結果、キーチェーンのアイテムが
kSecClassGenericPassword
の属性から一意性を得ていることがわかりました。
kSecAttrAccessGroup
,
kSecAttrAccount
と
kSecAttrService
.
もしリクエスト1のこれら3つの属性がリクエスト2と同じであれば、他の属性に関係なく、同じ汎用パスワードキーチェーンアイテムを受け取ることができます。この属性の1つ(または2つ、またはすべて)が値を変更した場合、異なるアイテムが取得されます。
しかし
kSecAttrService
は
kSecClassGenericPassword
でしか使用できないため、他のタイプのアイテムの "ユニーク キー" の一部にはなりえず、どの属性がキーチェーン アイテムを一意に決定するかを明確に指摘する文書もないようです。
GenericKeychain" のクラス "KeychainItemWrapper" のサンプル コードでは、属性を使用しています。
kSecAttrGeneric
を使用してアイテムをユニークにしていますが、これはバグです。この例の2つの項目は、2つの異なる項目として保存されるだけです。
kSecAttrAccessGroup
が異なるため、この例では 2 つの異なるエントリとして保存されています (1 つはアクセス グループが設定されており、もう 1 つはアクセス グループを解放しています)。もし、アクセスグループなしで 2 つ目のパスワードを追加しようとすると、Apple の
KeychainItemWrapper
を使用して、アクセス グループなしで 2 つ目のパスワードを追加しようとすると、失敗します。
では、私の質問に答えてください。
-
の組み合わせは本当ですか?
kSecAttrAccessGroup
,kSecAttrAccount
とkSecAttrService
は、kSecClassがkSecClassGenericPassword
? -
キーチェーンのアイテムが
kSecClass
がkSecClassGenericPassword
?
どのように解決するのですか?
主キーは以下の通りです (Appleのオープンソースファイルから派生しました。 Schema.m4 , キースキーマ.m4 と SecItem.cpp ):
-
クラスのキーチェーン・アイテムの場合
kSecClassGenericPassword
の組み合わせで、主キーはkSecAttrAccount
とkSecAttrService
. -
クラスのキーチェーン・アイテムの場合
kSecClassInternetPassword
の組み合わせで、主キーはkSecAttrAccount
,kSecAttrSecurityDomain
,kSecAttrServer
,kSecAttrProtocol
,kSecAttrAuthenticationType
,kSecAttrPort
とkSecAttrPath
. -
クラスのキーチェーン・アイテムの場合
kSecClassCertificate
の組み合わせで、主キーはkSecAttrCertificateType
,kSecAttrIssuer
とkSecAttrSerialNumber
. -
クラスのキーチェーン・アイテムの場合
kSecClassKey
の組み合わせで、主キーはkSecAttrApplicationLabel
,kSecAttrApplicationTag
,kSecAttrKeyType
,kSecAttrKeySizeInBits
,kSecAttrEffectiveKeySize
そして、SecItem ではまだ公開されていない作成者、開始日、終了日です。 -
クラスのキーチェーンアイテムの場合
kSecClassIdentity
オープンソースのファイルでは主キーのフィールドに関する情報は見つかりませんでしたが、 ID は秘密鍵と証明書の組み合わせであることから、主キーはkSecClassKey
とkSecClassCertificate
.
各キーチェーンアイテムはキーチェーンアクセスグループに属しているため、キーチェーンアクセスグループのように感じます(フィールド
kSecAttrAccessGroup
) は、これらすべての主キーに追加されたフィールドであるように感じられます。
関連
-
[解決済み] iOSまたはmacOSで、インターネット接続が有効かどうかを確認するにはどうすればよいですか?
-
[解決済み] iOSのバージョンを確認する方法を教えてください。
-
[解決済み] Objective-Cで配列に結合する
-
[解決済み] IOSのUIViewからアプリケーションのドキュメントフォルダに画像を保存する
-
[解決済み] performSelectorの使用: メソッドを呼び出すだけと比較した場合
-
[解決済み] ベストプラクティス - 自分のプロジェクト/アプリのためのNSErrorドメインとコード
-
[解決済み] メソッドが存在するかどうかをチェックする
-
[解決済み] キーチェーンのアイテムは何がユニークなのか(iOSの場合)?
-
[解決済み] 別のUIViewの下にあるUIViewとのインタラクションを許可する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン