मेरा सवाल iOS (iPhone, iPad, ...) में कीचेन की चिंता करता है। मुझे लगता है (लेकिन मुझे यकीन नहीं है) कि मैक ओएस एक्स के तहत किचेन का कार्यान्वयन एक ही प्रश्न के साथ एक ही प्रश्न उठाता है।
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
, इसलिए यह किसी अन्य प्रकार की वस्तु की "अद्वितीय कुंजी" का हिस्सा नहीं हो सकता है, और ऐसा कोई प्रलेखन नहीं लगता है जो स्पष्ट रूप से इंगित करता है जो विशिष्ट रूप से एक चाबी का गुच्छा आइटम निर्धारित करता है।
"GenericKeychain" के "KeychainItemWrapper" वर्ग में नमूना कोड kSecAttrGeneric
एक अद्वितीय आइटम बनाने के लिए विशेषता का उपयोग करता है , लेकिन यह एक बग है। इस उदाहरण में दो प्रविष्टियाँ केवल दो अलग-अलग प्रविष्टियों के रूप में संग्रहीत की जाती हैं, क्योंकि उनका kSecAttrAccessGroup
अंतर अलग है (एक के पास एक्सेस समूह सेट है, दूसरा इसे मुफ्त देता है)। यदि आप एक पहुंच समूह के बिना 2 पासवर्ड जोड़ने की कोशिश करते हैं KeychainItemWrapper
, तो Apple का उपयोग करके , आप असफल हो जाएंगे।
तो, कृपया, मेरे प्रश्नों का उत्तर दें:
- यह, सच है कि के संयोजन
kSecAttrAccessGroup
,kSecAttrAccount
औरkSecAttrService
कीचेन आइटम जिसकी kSecClass है की "अद्वितीय कुंजी" हैkSecClassGenericPassword
? - यदि नहीं
kSecClass
है तो कौन सी विशेषता एक किचेन आइटम को अद्वितीय बनाती हैkSecClassGenericPassword
?