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 kSecClassuntuk 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 kSecClassGenericPasswordmendapatkan keunikannya dari atribut kSecAttrAccessGroup, kSecAttrAccountdan 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 kSecAttrServicehanya 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 kSecAttrGenericuntuk membuat item menjadi unik, tetapi ini adalah bug. Dua entri dalam contoh ini hanya disimpan sebagai dua entri berbeda, karena keduanya kSecAttrAccessGroupberbeda (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,kSecAttrAccountdankSecAttrServicemerupakan "kunci unik" dari item rantai kunci yang kSecClass-nyakSecClassGenericPassword? - Atribut mana yang membuat item rantai kunci unik jika
kSecClasstidakkSecClassGenericPassword?