Pertanyaan saya menyangkut gantungan kunci di iOS (iPhone, iPad, ...). Saya pikir (tapi saya tidak yakin) bahwa penerapan gantungan kunci di bawah Mac OS X menimbulkan pertanyaan yang sama dengan jawaban yang sama.
iOS menyediakan lima jenis (kelas) item rantai kunci. Anda harus memilih salah satu dari lima nilai kunci kSecClass
untuk menentukan jenis:
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)
Setelah sekian lama membaca dokumentasi apel, blog, dan entri forum, saya menemukan bahwa jenis item gantungan kunci kSecClassGenericPassword
mendapatkan keunikannya dari atribut kSecAttrAccessGroup
, kSecAttrAccount
dan kSecAttrService
.
Jika ketiga atribut dalam permintaan 1 sama dengan permintaan 2, Anda akan menerima item rantai kunci kata sandi umum yang sama, terlepas dari atribut lainnya. Jika satu (atau dua atau semua) atribut ini mengubah nilainya, Anda akan mendapatkan item yang berbeda.
Namun kSecAttrService
hanya tersedia untuk item jenis kSecClassGenericPassword
, sehingga tidak dapat menjadi bagian dari "kunci unik" item jenis lain, dan tampaknya tidak ada dokumentasi yang menunjukkan dengan jelas atribut mana yang secara unik menentukan item rantai kunci.
Kode contoh di kelas "KeychainItemWrapper" dari "GenericKeychain" menggunakan atribut kSecAttrGeneric
untuk membuat item menjadi unik, tetapi ini adalah bug. Dua entri dalam contoh ini hanya disimpan sebagai dua entri berbeda, karena keduanya kSecAttrAccessGroup
berbeda (satu memiliki kumpulan grup akses, yang lain membiarkannya gratis). Jika Anda mencoba menambahkan kata sandi kedua tanpa grup akses, menggunakan kata sandi Apple KeychainItemWrapper
, Anda akan gagal.
Jadi, tolong jawab pertanyaan saya:
- Apakah benar, bahwa kombinasi
kSecAttrAccessGroup
,kSecAttrAccount
dankSecAttrService
merupakan "kunci unik" dari item rantai kunci yang kSecClass-nyakSecClassGenericPassword
? - Atribut mana yang membuat item rantai kunci unik jika
kSecClass
tidakkSecClassGenericPassword
?