คำถามของฉันเกี่ยวกับพวงกุญแจใน iOS (iPhone, iPad, ... ) ฉันคิดว่า (แต่ไม่แน่ใจ) ว่าการใช้งานพวงกุญแจภายใต้ Mac OS X ทำให้เกิดคำถามเดียวกันกับคำตอบเดียวกัน
iOS มีรายการพวงกุญแจห้าประเภท (คลาส) คุณต้องเลือกหนึ่งในห้าค่าสำหรับคีย์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 เหมือนกับในคำขอ 2 คุณจะได้รับรายการพวงกุญแจรหัสผ่านทั่วไปเหมือนกันโดยไม่คำนึงถึงแอตทริบิวต์อื่น ๆ หากแอตทริบิวต์หนึ่ง (หรือสองรายการหรือทั้งหมด) เปลี่ยนค่าคุณจะได้รับรายการที่แตกต่างกัน
แต่kSecAttrService
ใช้ได้เฉพาะกับสินค้าประเภทkSecClassGenericPassword
ดังนั้นจึงไม่สามารถเป็นส่วนหนึ่งของ "คีย์เฉพาะ" ของรายการประเภทอื่น ๆ ได้และดูเหมือนว่าจะไม่มีเอกสารประกอบที่ชี้ให้เห็นอย่างชัดเจนว่าแอตทริบิวต์ใดกำหนดรายการพวงกุญแจโดยเฉพาะ
โค้ดตัวอย่างในคลาส "KeychainItemWrapper" ของ "GenericKeychain" ใช้แอตทริบิวต์kSecAttrGeneric
เพื่อทำให้ไอเท็มไม่ซ้ำกัน แต่นี่เป็นข้อบกพร่อง สองรายการในตัวอย่างนี้จะถูกจัดเก็บเป็นสองรายการที่แตกต่างกันเท่านั้นเนื่องจากรายการเหล่าkSecAttrAccessGroup
นี้แตกต่างกัน (รายการหนึ่งมีการตั้งค่ากลุ่มการเข้าถึงส่วนอีกรายการหนึ่งปล่อยให้เป็นอิสระ) หากคุณพยายามเพิ่มรหัสผ่านที่ 2 โดยไม่มีกลุ่มการเข้าถึงโดยใช้ของ Apple KeychainItemWrapper
คุณจะล้มเหลว
ดังนั้นโปรดตอบคำถามของฉัน:
- มันเป็นความจริงว่าการรวมกันของ
kSecAttrAccessGroup
,kSecAttrAccount
และkSecAttrService
เป็น "กุญแจสำคัญที่ไม่ซ้ำกัน" ของรายการพวงกุญแจที่มี kSecClass คือkSecClassGenericPassword
? - ซึ่งคุณลักษณะที่ทำให้รายการพวงกุญแจที่ไม่ซ้ำกันถ้า
kSecClass
ไม่ได้kSecClassGenericPassword
?