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