पहचान क्रेडेंशियल
Android डिवाइस, पहचान क्रेडेंशियल का इस्तेमाल करते हैं लाइब्रेरी का इस्तेमाल किया जा सकता है, ताकि डिवाइस पर क्रेडेंशियल सुरक्षित तरीके से मैनेज किए जा सकें. पहचान क्रेडेंशियल लाइब्रेरी में सुरक्षा से जुड़ी ऐसी कई सुविधाएं उपलब्ध हैं जिनका इस्तेमाल, जारी करने वाले को करना चाहिए ताकि यह पक्का किया जा सके कि उनका Google के साथ इंटिग्रेशन ज़्यादा से ज़्यादा सुरक्षित हो.
हस्ताक्षर किया गया नॉन्स
Identity क्रेडेंशियल लाइब्रेरी एक "चैलेंज" है (इस एपीआई में इस रूप में बताया गया है नॉन्स) डिवाइस आइडेंटिटी सर्टिफ़िकेट को वापस पाने के दौरान, सर्टिफ़िकेट देने वाली कंपनी को भेजा जाता है RegisterDeviceRequest में जाकर. इस नॉन्स को साइन किया गया है और डिवाइस के पुष्टि करने वाले एक्सटेंशन में एम्बेड किया गया है पहचान प्रमाणपत्र. इससे, जारी करने वाले को भरोसा होता है कि रीसेंसी कितना होगा और सर्टिफ़िकेट की पुष्टि की हो. साथ ही, अगर इसे सर्वर पर दोबारा नहीं देखा जा रहा हो पर बातचीत के दौरान रखा जा सकता है.
ऐक्सेस कंट्रोल प्रोफ़ाइलों
ऐक्सेस कंट्रोल प्रोफ़ाइल की मदद से, जारी करने वाला कंपनी यह तय कर सकती है कि उसे चाहते हैं कि पहचान के क्रेडेंशियल में सेव किए जा रहे डेटा को सुरक्षित किया जाए. कॉन्टेंट बनाने जारी करने वाला यह तय कर सकता है कि डेटा को ऐक्सेस करने के लिए उपयोगकर्ता की पुष्टि करना ज़रूरी है या नहीं एलिमेंट और पुष्टि करने की प्रक्रिया के लिए उपयोगकर्ता को कितना समय देना है. आने वाला समय (नहीं कुछ मामलों में, एक से ज़्यादा उपयोगकर्ताओं को सीमित डेटा एलिमेंट को ऐक्सेस कर सकते हैं. ऐक्सेस कंट्रोल को फ़ॉर्मैट करने के तरीके के बारे में जानकारी प्रोफ़ाइल, क्रेडेंशियल ऑब्जेक्ट फ़ॉर्मैट में मिल सकती हैं.
प्रावधान का सबूत
प्रॉविज़निंग ऑब्जेक्ट का सबूत, जारी करने वालों के लिए यह जानने का तरीका होता है कि क्रेडेंशियल को पहचान क्रेडेंशियल में सेव किया गया. जारी करने वाले को यह करना चाहिए आपको क्रेडेंशियल के लिए एमएसओ तब तक जारी नहीं करना चाहिए, जब तक उन्हें प्रॉविज़निंग. इस ऑब्जेक्ट को पहचान के क्रेडेंशियल वाले दस्तावेज़ में ज़्यादा दस्तावेज़ किया गया है.
ऑब्जेक्ट फ़ॉर्मैट
इनमें से हर ऑब्जेक्ट, डिवाइस और जारी करने वाला. इस वजह से, Google के सर्वर में ये ऑब्जेक्ट हैं और इनमें से कुछ ऑब्जेक्ट बाकी एपीआई ऑब्जेक्ट की मदद से किया जा सकता है. उदाहरण के लिए, क्रेडेंशियल को देना चाहिए, क्योंकि Android लेवल पर इसकी उम्मीद की जाती है.
क्रेडेंशियल
क्रेडेंशियल में डेटा एलिमेंट शामिल होते हैं. साथ ही, यह भी जानकारी होती है कि उन्हें कैसे ऐक्सेस किया जाना चाहिए. यह
दो मुख्य ऑब्जेक्ट, provisionedData और accessControlProfiles शामिल हैं. कॉन्टेंट बनाने
provisionedData में वे सभी नेमस्पेस शामिल हैं जो किसी भी
क्रेडेंशियल टाइप है. उदाहरण के लिए, मोबाइल ड्राइविंग लाइसेंस के लिए, यह
org.iso.18013.5.1 और org.aamva.18013.5.1. डेटा एंट्री और वैल्यू
नेमस्पेस के अंदर, काम के ऐक्सेस कंट्रोल प्रोफ़ाइल की जानकारी देता है. यह है
आईडी की सूची के रूप में किया जाता है, जहां आईडी किसी ऐक्सेस नियंत्रण प्रोफ़ाइल से संबंधित होती है
accessControlProfiles सूची. नीचे दिए गए उदाहरण में, हर डेटा में मौजूद [0]
एंट्री का मतलब इंडेक्स 0 के बजाय, आईडी 0 वाली ऐक्सेस कंट्रोल प्रोफ़ाइल से है.
नीचे, कोड में बदले नहीं गए सीबीओआर मैप डेटा आइटम का उदाहरण दिया गया है.
{ "provisionedData": { "org.iso.18013.5.1": [ { "name": "family_name", "value": "Smith", "accessControlProfiles": [ 1 ] }, { "name": "given_name", "value": "Stewart", "accessControlProfiles": [ 1 ] }, { "name": "birth_date", "value": { "tag": 1004, "value": "1965-09-01" }, "accessControlProfiles": [ 1 ] }, { "name": "issue_date", "value": { "tag": 1004, "value": "2022-08-01" }, "accessControlProfiles": [ 1 ] }, { "name": "expiry_date", "value": { "tag": 1004, "value": "2027-08-01" }, "accessControlProfiles": [ 1 ] }, { "name": "issuing_authority", "value": "IA", "accessControlProfiles": [ 1 ] }, { "name": "issuing_country", "value": "US", "accessControlProfiles": [ 1 ] }, { "name": "document_number", "value": "D04320785", "accessControlProfiles": [ 1 ] }, { "name": "portrait", "value": { "type": "Buffer", "data": [ 167, 30, 148, 218, 204, 75, 112, 162, 138, 40, 52, 63, 255 ] }, "accessControlProfiles": [ 1 ] }, { "name": "un_distinguishing_sign", "value": "USA", "accessControlProfiles": [ 1 ] }, { "name": "driving_privileges", "value": [ { "expiry_date": { "tag": 1004, "value": "2027-08-01" }, "issue_date": { "tag": 1004, "value": "2022-08-01" }, "vehicle_category_code": "B" } ], "accessControlProfiles": [ 1 ] }, { "name": "sex", "value": 1, "accessControlProfiles": [ 1 ] }, { "name": "height", "value": 170, "accessControlProfiles": [ 1 ] }, { "name": "weight", "value": 79, "accessControlProfiles": [ 1 ] }, { "name": "eye_colour", "value": "Blue", "accessControlProfiles": [ 1 ] }, { "name": "hair_colour", "value": "Gray", "accessControlProfiles": [ 1 ] }, { "name": "age_in_years", "value": 57, "accessControlProfiles": [ 1 ] }, { "name": "age_over_18", "value": true, "accessControlProfiles": [ 1 ] }, { "name": "age_over_21", "value": true, "accessControlProfiles": [ 1 ] }, { "name": "resident_address", "value": "1600 Amphitheatre Pkwy ", "accessControlProfiles": [ 1 ] }, { "name": "issuing_jurisdiction", "value": "US-CA", "accessControlProfiles": [ 1 ] }, { "name": "resident_city", "value": "Mountain View", "accessControlProfiles": [ 1 ] }, { "name": "resident_state", "value": "CA", "accessControlProfiles": [ 1 ] }, { "name": "resident_postal_code", "value": "94043", "accessControlProfiles": [ 1 ] }, { "name": "resident_country", "value": "US", "accessControlProfiles": [ 1 ] } ], "org.iso.18013.5.1.aamva": [ { "name": "DHS_compliance", "value": "F", "accessControlProfiles": [ 1 ] }, { "name": "domestic_driving_privileges", "value": [ { "domestic_vehicle_class": { "domestic_vehicle_class_code": "D", "domestic_vehicle_class_description": "Operator", "expiry_date": { "tag": 1004, "value": "2027-08-01" }, "issue_date": { "tag": 1004, "value": "2022-08-01" } }, "domestic_vehicle_restrictions": [ { "domestic_vehicle_restriction_code": "B", "domestic_vehicle_restriction_description": "Corrective lenses (also automated - vision screening)" } ] } ], "accessControlProfiles": [ 1 ] }, { "name": "aamva_version", "value": "1", "accessControlProfiles": [ 1 ] }, { "name": "family_name_truncation", "value": "N", "accessControlProfiles": [ 1 ] }, { "name": "given_name_truncation", "value": "N", "accessControlProfiles": [ 1 ] }, { "name": "organ_donor", "value": true, "accessControlProfiles": [ 1 ] } ] }, "accessControlProfiles": [ { "id": 1, "userAuthenticationRequired": true, "timeoutMillis": 10000 } ] }
इसके बाद, इस ऑब्जेक्ट को सीबीओआर फ़ॉर्मैट में एन्कोड करना होगा. इसके बाद, एन्क्रिप्ट (सुरक्षित) किया जाना चाहिए. इसके बाद, base64 कोड में बदला गया. अगर टेस्ट एनवायरमेंट में डेटा एन्क्रिप्ट (सुरक्षित) नहीं किया जा रहा है, तो इसे सीबीओआर फ़ॉर्मैट में एन्कोड किया जाना चाहिए और फिर base64 कोड में बदला जाना चाहिए.
ध्यान दें कि ऊपर दिया गया उदाहरण एक कोड में बदला गया सीबीओआर मैप है, JSON नहीं. अगर JSON स्ट्रिंग को सीबीओआर में एन्कोड किया जाता है, तो इसे Android डिवाइस से सही तरीके से पार्स नहीं किया जाएगा.
मोबाइल सुरक्षा ऑब्जेक्ट
एमडीएल को पक्का करने के लिए, ISO/IEC 18013-5 मोबाइल सिक्योरिटी ऑब्जेक्ट (एमएसओ) के बारे में जानकारी देता है डेटा के साथ कोई छेड़-छाड़ न की गई हो और उसे किसी भरोसेमंद संस्था ने जारी किया हो.
MSO में ये शामिल हैं:
- डाइजेस्ट वैल्यू: ये यूनीक वैल्यू होती हैं, जो हर डेटा के लिए जनरेट होती हैं एमडीएल के क्रेडेंशियल में एलिमेंट शामिल है. इनका इस्तेमाल यह पुष्टि करने के लिए किया जाता है कि डेटा एमएसओ पर हस्ताक्षर होने के बाद से बदलाव हुए हैं.
- डिवाइस कुंजी: यह एक खास कुंजी है, जो हर मोबाइल डिवाइस के लिए जनरेट की जाती है जो क्रेडेंशियल को सेव करता हो. इसका इस्तेमाल MSO को डिवाइस से बाइंड करने के लिए किया जाता है. साथ ही, दूसरे डिवाइसों पर इसका इस्तेमाल नहीं किया जा सकेगा.
- प्लान की अवधि की जानकारी: इसमें प्लान के शुरू और खत्म होने की तारीख शामिल होती है एमएसओ मान्य है.
- आईए सिग्नेचर: यह एक डिजिटल हस्ताक्षर है, जो अपने निजी पासकोड का इस्तेमाल करके, इसे जारी करने वाली संस्था (आईए) ने जारी किया हो. इसका इस्तेमाल यह पुष्टि करने के लिए किया जाता है कि एमएसओ किसी भरोसेमंद अधिकारी ने जारी किया है.
MSO की यह सीसीडीएल स्ट्रक्चर है:
MobileSecurityObjectBytes = #6.24(bstr .cbor MobileSecurityObject)
MobileSecurityObject = {
"digestAlgorithm" : tstr, ; Message digest algorithm used
"valueDigests" : ValueDigests, ; Array of digests of all data elements
"deviceKeyInfo" : DeviceKeyInfo,
"docType" : tstr, ; DocType as used in Documents
"validityInfo" : ValidityInfo
}
DeviceKeyInfo = {
"deviceKey" : DeviceKey
? "keyAuthorizations" : KeyAuthorizations,
? "keyInfo" : KeyInfo
}
DeviceKey = COSE_Key ; Device key in COSE_Key as defined in RFC 8152
KeyAuthorizations = {
? "nameSpaces" : AuthorizedNameSpaces
? "dataElements" : AuthorizedDataElements
}
AuthorizedNameSpaces = [+ NameSpace]
AuthorizedDataElements = {+ NameSpace => DataElementsArray}
DataElementsArray = [+ DataElementIdentifier]
KeyInfo = { * int => any} ; Positive integers are RFU, negative integers may be used for proprietary use
ValueDigests = {
"nameSpaces" : NameSpacesDigests
}
NameSpacesDigests = {
+ NameSpace => DigestIDs
}
DigestIDs = {
+ DigestID => Digest
}
ValidityInfo = {
"signed" : tdate,
"validFrom" : tdate,
"validUntil" : tdate,
? "expectedUpdate" : tdate
}
NameSpace = tstr ; NameSpace as used in IssuerSigned
DigestID = uint ; DigestID as used in IssuerSigस्टैटिक पुष्टि डेटा
स्थायी पुष्टि डेटा, जिसमें दोनों शामिल होते हैं
digestIdMapping और issuerAuth, इन्हें जारी करने वाले को बनाना होगा.
किसी खास नेमस्पेस के लिए digestIdMapping में, ये चीज़ें होती हैं
IssuerSignedItem इंस्टेंस, हर एक की elementValue प्रॉपर्टी के लिए वैल्यू शून्य है.
इसके अलावा, issuerAuth को साइन इन करने पर जनरेट किया जाता है:
COSE_Sign1 का इस्तेमाल करके MobileSecurityObjectBytes.
StaticAuthDataBytes = (bstr .cbor StaticAuthData) StaticAuthData = { "digestIdMapping" : DigestIdMapping, "issuerAuth" : IssuerAuth } DigestIdMapping = { NameSpace => [ + IssuerSignedItemBytes ] } ; Defined in ISO 18013-5 ; NameSpace = String DataElementIdentifier = String DigestID = uint IssuerAuth = COSE_Sign1 ; The payload is MobileSecurityObjectBytes IssuerSignedItemBytes = #6.24(bstr .cbor IssuerSignedItem) IssuerSignedItem = { "digestID" : uint, ; Digest ID for issuer data auth "random" : bstr, ; Random value for issuer data auth "elementIdentifier" : DataElementIdentifier, ; Data element identifier "elementValue" : DataElementValue ; Data element value }
/provisionMobileSecurityObjects को शुरू करने पर
एंडपॉइंट, StaticAuthDataBytes को HPKE का इस्तेमाल करके एन्क्रिप्ट (सुरक्षित) किया गया है और
.
यहाँ है कोड सैंपल एमएसओ और स्टैटिक पुष्टि डेटा बनाने के लिए.