डिवाइस आइडेंटिफ़ायर कंपोज़िशन इंजन (डाइस) के लिए एसडीवी प्रोफ़ाइल, डाइस के लिए Android प्रोफ़ाइल का एक्सटेंशन है. एसडीवी में, एक वीएम दो पैरलल DICE चेन का इस्तेमाल करता है:
- Secure World DICE chain
- Android SDV DICE चेन
Android प्रोफ़ाइल के कॉन्फ़िगरेशन डिस्क्रिप्टर के ये फ़ील्ड, इन सभी चेन के लिए काम के हैं:
| नाम | कुंजी | प्रकार | ब्यौरा |
|---|---|---|---|
| कॉम्पोनेंट का नाम <0x0 | -70002
|
tstr
|
हर सीडीआई लेयर पर सुझाव दिया गया है. कॉम्पोनेंट का नाम, Android SDV VM चलाने वाले वाहन या वाहन के प्लैटफ़ॉर्म के सभी DICE चेन में स्टेज की पहचान करता है. |
| सुरक्षा से जुड़ा वर्शन | -70005
|
uint
|
हर सीडीआई स्टेज पर ज़रूरी है. इस नीति की मदद से, DICE नीति तय की जा सकती है. इससे असुरक्षित रिमोट वीएम वर्शन को एसडीवी के सुरक्षित मेश में शामिल होने से रोका जा सकता है. |
| कॉम्पोनेंट इंस्टेंस का नाम <0 | -70007
|
tstr
|
यह पहले वीएम पर मौजूद सीडीआई लेयर के लिए ज़रूरी है. उदाहरण के लिए, हाइपरवाइज़र के बाद, Android SDV DICE चेन के लिए. एसडीवी इंस्टेंस का नाम. अगर एक से ज़्यादा सीडीआई लेयर में कॉम्पोनेंट इंस्टेंस का नाम शामिल है, तो हर लेयर में एक ही वैल्यू होनी चाहिए. |
Secure World DICE chain
Secure World DICE चेन वही है जो Android डिवाइसों से, Android के रिमोट की प्रोविज़निंग (आरकेपी) सर्वर को मिलती है. IRemotelyProvisionedComponent HAL generateCertificateRequestV2(), इस DICE चेन को Android के लिए उपलब्ध कराता है.
इस टेबल में, Secure World DICE चेन का एक सैंपल दिखाया गया है:
| बूट स्टेज | DICE CDI लेयर | जारी करने वाला |
|---|---|---|
| प्राइमरी बूटलोडर | CDI[0] |
यूडीएस |
| सेकंडरी बूटलोडर | CDI[1] |
प्राइमरी बूटलोडर |
| TEE बूट | CDI[2] |
सेकंडरी बूटलोडर |
| KeyMint टीए बूट | CDI[3] (पत्ती) |
टीईई |
KeyMint के भरोसेमंद ऐप्लिकेशन (टीए) को लागू करने के लिए, इनमें से किसी एक विकल्प का इस्तेमाल करें:
- सभी एसडीवी वीएम के लिए एक KeyMint इंस्टेंस: आपको सभी वीएम के लिए एक ही सीडीआई तय करना होगा.
या,
- हर एसडीवी वीएम के लिए एक KeyMint इंस्टेंस: आपको हर वीएम के लिए, सीडीआई की अलग वैल्यू तय करनी होगी. सीडीआई की हर वैल्यू में, कॉम्पोनेंट इंस्टेंस का ऐसा नाम होना चाहिए जो वीएम के कॉम्पोनेंट इंस्टेंस के नाम से मेल खाता हो.
Android SDV DICE चेन
Android SDV DICE चेन, बूट पाथ पर चलने वाले सॉफ़्टवेयर को सर्टिफ़िकेट देती है. यह बूट पाथ, हाइपरवाइज़र से होकर SDV VM पर चलने वाले Android के हाई-लेवल ऑपरेटिंग सिस्टम (HLOS) तक जाता है.
इस टेबल में, Android SDV DICE चेन का एक सैंपल दिखाया गया है:
| बूट स्टेज | DICE CDI लेयर | जारी करने वाला |
|---|---|---|
| प्राइमरी बूटलोडर | CDI[0] |
यूडीएस |
| सेकंडरी बूटलोडर | CDI[1] |
प्राइमरी बूटलोडर |
| हाइपरवाइज़र | CDI[2] |
सेकंडरी बूटलोडर |
| Android HLOS | CDI[3] (पत्ती)
|
(Android loader in the) Hypervisor1 |
1 हाइपरवाइज़र, गेस्ट ओएस में मौजूद Android बूटलोडर को लेयर के तौर पर सर्टिफ़िकेट देता है. Android बूटलोडर, Android HLOS को सर्टिफ़िकेट देता है.
Android HLOS CDI सर्टिफ़िकेट
Android बूटलोडर (या हाइपरवाइज़र, अगर Android बूटलोडर नहीं है, लेकिन सिर्फ़ एक Android "लोडर" प्रोग्राम है, जो हाइपरवाइज़र के अंदर वीएम को लोड करता है) Android HLOS CDI सर्टिफ़िकेट पर हस्ताक्षर करता है और Android HLOS को कवर करता है. उदाहरण के लिए, इसमें वह सारा कोड शामिल होता है जिसकी पुष्टि Android बूटलोडर, Android Verified Boot (AVB) के हिसाब से करता है.
Android HLOS CDI सर्टिफ़िकेट में, Android OS की SDV से जुड़ी वैल्यू होनी चाहिए. इससे सुरक्षा से जुड़ी जोखिम की आशंकाओं को कम किया जा सकता है. उदाहरण के लिए, एसडीवी सिक्योर मेश से उन वर्चुअल मशीन (वीएम) को बैन करके, संभावित सीक्रेट लीक होने से रोका जा सकता है जिनमें सुरक्षा से जुड़ी समस्याएं पहले से मौजूद हैं. AVB की पुष्टि करने से, इनमें से ज़्यादातर वैल्यू मिलती हैं.
इन्हें टीईई में मौजूद KeyMint को भी सौंप दिया जाता है. यहां सर्टिफ़िकेट पर SecureWorld DICE चेन के लीफ़ सीडीआई के हस्ताक्षर होते हैं. इसके बाद, इसे Android को DeviceInfo में पास कर दिया जाता है, ताकि Android के मुख्य कॉम्पोनेंट में कुंजी और आईडी की पुष्टि करने जैसी सुविधाएं चालू की जा सकें.
कोड इनपुट और कोडहैश सर्टिफ़िकेट फ़ील्ड
VBMeta डाइजेस्ट (यह एक आउटपुट है, जिसे Android बूटलोडर, AVB की पुष्टि के लिए बनाता है) में Android HLOS का सॉफ़्टवेयर शामिल होता है. इसलिए, यह CDI सीक्रेट पाने के लिए android-dice-input-values के तौर पर काम करता है. साथ ही, यह CDI सर्टिफ़िकेट के dice-cert-fields फ़ील्ड में जाता है.
कॉन्फ़िगरेशन डिस्क्रिप्टर: DICE के लिए Android प्रोफ़ाइल में मौजूद फ़ील्ड
सभी सीडीआई लेयर के लिए बताई गई बातों के अलावा, यहां दी गई जानकारी Android Profile for DICE के कॉन्फ़िगरेशन डिस्क्रिप्टर फ़ील्ड पर लागू होती है:
| नाम | कुंजी | प्रकार | ब्यौरा |
|---|---|---|---|
| कॉम्पोनेंट का वर्शन | -70003
|
int
|
सिस्टम के ओएस का वर्शन, AVB version-info-avb से लिया गया है. यह android.os.Build.VERSION.release के बराबर भी है. |
| सुरक्षा से जुड़ा वर्शन | -70005
|
uint
|
system पार्टीशन के सुरक्षा पैच का लेवल, YYYYMMDD फ़ॉर्मैट में. |
| आरकेपी वीएम मार्कर | -70006
|
null
|
आरकेपी वीएम मार्कर, रिमोट की प्रोविज़निंग को Android SDV DICE चेन के लिए सर्टिफ़िकेट जारी करने से रोकता है. |
आरकेपी वीएम मार्कर, Android SDV DICE चेन के पहले सीडीआई सर्टिफ़िकेट में दिखना चाहिए. यह सर्टिफ़िकेट, Secure World DICE चेन के साथ शेयर नहीं किया जाता है. यह भी ज़रूरी है कि यह किसी भी अन्य सीडीआई सर्टिफ़िकेट में न दिखे, ताकि आरकेपी सर्वर rkp-avf-support, डाइस चेन को आरकेपी वीएम से न माने.
कॉन्फ़िगरेशन डिस्क्रिप्टर: नए फ़ील्ड
Android HLOS CDI सर्टिफ़िकेट के कॉन्फ़िगरेशन डिस्क्रिप्टर में, SDV से जुड़ी ऐसी वैल्यू होनी चाहिए जो DICE के लिए Android प्रोफ़ाइल में बताई गई वैल्यू से अलग हों. DICE के लिए SDV प्रोफ़ाइल, इस मकसद के लिए [-71000, -71999] की वैल्यू की रेंज रिज़र्व करती है. रिज़र्व की गई रेंज से बाहर की वैल्यू का इस्तेमाल करके, लागू करने से जुड़े फ़ील्ड जोड़े जा सकते हैं. SDV से जुड़ी वैल्यू ये हैं:
| नाम | कुंजी | प्रकार | ब्यौरा |
|---|---|---|---|
| वेरीफ़ाइड बूट की स्थिति | -71000
|
tstr
|
green, yellow या orange में से कोई एक.
|
| build fingerprint | -71001
|
tstr
|
ऐसी स्ट्रिंग जिसे कोई भी व्यक्ति आसानी से पढ़ सकता है. यह स्ट्रिंग, इस बिल्ड की खास तौर पर पहचान करती है. यह ro.build.fingerprint के जैसी ही होती है. Android CDD, 3.2.2 Build Parameters, cdd-3-2-2 में इसके बारे में बताया गया है.
VBMeta इसे com.android.build.system.fingerprint नाम की प्रॉपर्टी के तौर पर सेव करता है |
system_ext
सुरक्षा
पैच का लेवल |
-71002
|
uint
|
YYYYMMDD फ़ॉर्मैट में system_ext पार्टीशन के सुरक्षा पैच का लेवल. |
product
सुरक्षा
पैच का लेवल |
-71003
|
uint
|
YYYYMMDD फ़ॉर्मैट में product पार्टीशन के सुरक्षा पैच का लेवल. |
vendor
सुरक्षा
पैच का लेवल |
-71004
|
uint
|
YYYYMMDD फ़ॉर्मैट में vendor पार्टीशन के सुरक्षा पैच का लेवल. |
boot
सुरक्षा
पैच का लेवल |
-71005
|
uint
|
boot पार्टिशन (जिसमें Linux कर्नेल होता है) के सुरक्षा पैच का लेवल, YYYYMMDD फ़ॉर्मैट में. |
| SDV बूट मोड | -71006
|
tstr
|
locked या unlocked. ज़्यादा जानने के लिए, मेश की स्थिति और प्रोविज़निंग लेख पढ़ें. |
Android HLOS CDI में मोड इनपुट वैल्यू चुनने की सुविधा
Android HLOS CDI सर्टिफ़िकेट का android-dice-mode, इस परिभाषा का इस्तेमाल करता है:
| एवीबी अनलॉक किया गया | एवीबी लॉक है | |
|---|---|---|
| SDV का बूट मोड UNLOCKED है | डीबग | डीबग |
| SDV का बूट मोड LOCKED है | कॉन्फ़िगर नहीं किया गया (अमान्य) | सामान्य |
की डेरिवेशन फ़ंक्शन
Android HLOS CDI के लिए CDI_Attest सीक्रेट से सार्वजनिक और निजी पासकोड पेयर पाने वाला android-dice-kdf, SHA512 के साथ HKDF होना चाहिए.