macOS Keychain
मुख्य Keychains
उपयोगकर्ता Keychain (
~/Library/Keychains/login.keycahin-db
), जिसका उपयोग उपयोगकर्ता-विशिष्ट प्रमाणपत्रों जैसे एप्लिकेशन पासवर्ड, इंटरनेट पासवर्ड, उपयोगकर्ता द्वारा उत्पन्न प्रमाणपत्र, नेटवर्क पासवर्ड और उपयोगकर्ता द्वारा उत्पन्न सार्वजनिक/निजी कुंजी आदि संदर्भित करने के लिए किया जाता है।सिस्टम Keychain (
/Library/Keychains/System.keychain
), जिसमें सिस्टम-स्तरीय प्रमाणपत्र जैसे WiFi पासवर्ड, सिस्टम रूट प्रमाणपत्र, सिस्टम निजी कुंजी और सिस्टम एप्लिकेशन पासवर्ड संग्रहीत होते हैं।
पासवर्ड Keychain एक्सेस
ये फ़ाइलें, जो कि स्वाभाविक रूप से सुरक्षा से लेप्त नहीं हैं और डाउनलोड किए जा सकते हैं, एन्क्रिप्टेड होती हैं और डिक्रिप्ट करने के लिए उपयोगकर्ता का सादापाठ पासवर्ड आवश्यक होता है। Chainbreaker जैसा एक उपकरण डिक्रिप्शन के लिए उपयोग किया जा सकता है।
Keychain Entries संरक्षण
ACLs
कीचेन में प्रत्येक एंट्री को पहुंच नियंत्रण सूची (ACLs) द्वारा शासित किया जाता है जो यह निर्धारित करती है कि कौन किसी भी कुंजीचैन एंट्री पर विभिन्न क्रियाएँ कर सकता है, जैसे:
ACLAuhtorizationExportClear: धारक को गोपनीय सीक्रेट का स्पष्ट पाठ प्राप्त करने की अनुमति देता है।
ACLAuhtorizationExportWrapped: धारक को दूसरे प्रदत्त पासवर्ड के साथ एन्क्रिप्ट किया गया स्पष्ट पाठ प्राप्त करने की अनुमति देता है।
ACLAuhtorizationAny: धारक को किसी भी क्रिया का प्रदर्शन करने की अनुमति देता है।
ACLs के साथ एक विश्वसनीय एप्लिकेशनों की सूची भी होती है जो इन क्रियाओं को प्रदर्शित कर सकती हैं बिना पूछे। यह हो सकता है:
N
il
(कोई अधिकारीकरण आवश्यक नहीं है, सभी विश्वसनीय हैं)एक खाली सूची (कोई नहीं विश्वसनीय है)
विशिष्ट एप्लिकेशनों की सूची।
इसके अलावा, एंट्री में कुंजी ACLAuthorizationPartitionID
भी हो सकती है, जिसका उपयोग टीमआईडी, एप्पल, और सीडीहैश की पहचान के लिए किया जाता है।
यदि टीमआईडी निर्दिष्ट किया गया है, तो एंट्री मान प्रम्प्ट के बिना पहुंचने के लिए उपयोग किया गया एप्लिकेशन को एंट्री मान में समान टीमआईडी होना चाहिए।
यदि एप्पल निर्दिष्ट किया गया है, तो एप्लिकेशन को एप्पल द्वारा साइन किया गया होना चाहिए।
यदि सीडीहैश निर्दिष्ट किया गया है, तो एप्लिकेशन को विशिष्ट सीडीहैश होना चाहिए।
एक Keychain Entry बनाना
जब एक नया एंट्री Keychain Access.app
का उपयोग करके बनाया जाता है, तो निम्नलिखित नियम लागू होते हैं:
सभी एप्लिकेशन एन्क्रिप्ट कर सकते हैं।
कोई एप्लिकेशन निर्यात/डिक्रिप्ट नहीं कर सकते (उपयोगकर्ता को पूछे बिना)।
सभी एप्लिकेशन अखंडता जांच देख सकते हैं।
कोई एप्लिकेशन ACLs नहीं बदल सकते।
पार्टीशनआईडी को
एप्पल
पर सेट किया जाता है।
जब एक एप्लिकेशन कुंजीचैन में एक एंट्री बनाता है, तो नियम थोड़े अलग होते हैं:
सभी एप्लिकेशन एन्क्रिप्ट कर सकते हैं।
केवल बनाने वाला एप्लिकेशन (या कोई अन्य एप्लिकेशन विशेष रूप से जोड़े गए हों) निर्यात/डिक्रिप्ट कर सकते हैं (उपयोगकर्ता को पूछे बिना)।
सभी एप्लिकेशन अखंडता जांच देख सकते हैं।
कोई एप्लिकेशन ACLs नहीं बदल सकते।
पार्टीशनआईडी को
teamid:[टीमआईडी यहाँ]
पर सेट किया जाता है।
Keychain तक पहुंचना
सुरक्षा
सुरक्षा
एपीआई
कीचेन इनुमरेशन और डंपिंग ऑफ सीक्रेट्स जो प्रॉम्प्ट नहीं उत्पन्न करेंगे को उपकरण LockSmith के साथ किया जा सकता है।
प्रत्येक कीचेन एंट्री के बारे में जानकारी की सूची और प्राप्त करें:
एपीआई
SecItemCopyMatching
प्रत्येक एंट्री के बारे में जानकारी देती है और इसका उपयोग करते समय कुछ विशेषताएँ आप सेट कर सकते हैं:kSecReturnData
: यदि सत्य है, तो यह डेटा को डिक्रिप्ट करने का प्रयास करेगा (पॉप-अप से बचने के लिए इसे असत्य पर सेट करें)kSecReturnRef
: कीचेन आइटम का संदर्भ भी प्राप्त करें (यदि बाद में आप देखते हैं कि आप पॉप-अप के बिना डिक्रिप्ट कर सकते हैं तो इसे सत्य पर सेट करें)kSecReturnAttributes
: एंट्रीज के बारे में मेटाडेटा प्राप्त करेंkSecMatchLimit
: वापसी करने के लिए कितने परिणामkSecClass
: किस प्रकार की कीचेन एंट्री
प्रत्येक एंट्री की ACLs प्राप्त करें:
एपीआई
SecAccessCopyACLList
के साथ आप कीचेन आइटम के लिए ACL प्राप्त कर सकते हैं, और यह ACL की सूची वापसी करेगा (जैसेACLAuhtorizationExportClear
और पहले उल्लिखित अन्य) जिसमें प्रत्येक सूची में होता है:विवरण
विश्वसनीय एप्लिकेशन सूची। यह हो सकता है:
एक ऐप: /Applications/Slack.app
एक बाइनरी: /usr/libexec/airportd
एक समूह: group://AirPort
डेटा निर्यात करें:
एपीआई
SecKeychainItemCopyContent
प्लेनटेक्स्ट प्राप्त करती हैएपीआई
SecItemExport
कुंजियाँ और प्रमाणपत्रों को निर्यात करती है लेकिन संदेश एन्क्रिप्टेड निर्यात करने के लिए पासवर्ड सेट करना पड़ सकता है
और ये हैं आवश्यकताएँ जिन्हें प्रॉम्प्ट के बिना एक गुप्त सीक्रेट को निर्यात करने के लिए होनी चाहिए:
यदि 1+ विश्वसनीय एप्लिकेशन सूचीज़ हैं:
उचित अधिकारण की आवश्यकता है (
Nil
, या गुप्त सूची में एप्लिकेशनों की अनुमति के लिए सीक्रेट जानकारी तक पहुंचने के लिए)कोड साइनेचर को मिलाना चाहिए PartitionID के साथ
कोड साइनेचर को मिलाना चाहिए उस एक विश्वसनीय एप्लिकेशन के साथ (या सही KeychainAccessGroup का सदस्य होना)
यदि सभी एप्लिकेशन विश्वसनीय हैं:
उचित अधिकारण की आवश्यकता है
कोड साइनेचर को मिलाना चाहिए PartitionID के साथ
यदि कोई PartitionID नहीं है, तो यह की आवश्यकता नहीं है
इसलिए, यदि 1 एप्लिकेशन सूचीज़ है, तो आपको उस एप्लिकेशन में कोड इंजेक्ट करने की आवश्यकता है।
यदि पार्टीशनआईडी में एप्पल निर्दिष्ट है, तो आप इसे osascript
के साथ एक्सेस कर सकते हैं ताकि कुछ भी जो पार्टीशनआईडी में एप्लिकेशन्स को विश्वसनीय मानता है। Python
भी इसके लिए उपयोग किया जा सकता है।
दो अतिरिक्त विशेषताएँ
अदृश्य: यह एक बूलियन फ्लैग है जो एंट्री को UI कीचेन ऐप से छुपाने के लिए है
सामान्य: यह मेटाडेटा को स्टोर करने के लिए है (इसलिए यह एन्क्रिप्टेड नहीं है)
माइक्रोसॉफ्ट सभी संवेदनशील अंत बिंदु तक पहुंचने के लिए सारे रिफ्रेश टोकन को सादा पाठ में स्टोर कर रहा था।
संदर्भ
Last updated