DICE के लिए SDV प्रोफ़ाइल

डिवाइस आइडेंटिफ़ायर कंपोज़िशन इंजन (डाइस) के लिए एसडीवी प्रोफ़ाइल, डाइस के लिए 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 फ़ील्ड में जाता है.

AVB के लिए, SHA-256 हैश एल्गोरिदम का इस्तेमाल करने का सुझाव दिया जाता है. इससे, VBMeta डाइजेस्ट 32 बाइट का होता है. DICE के लिए ओपन प्रोफ़ाइल के उलट, DICE के लिए Android प्रोफ़ाइल, DICE फ़्लो के लिए 32 बाइट लंबे android-dice-input-values का इस्तेमाल करने की अनुमति देती है. साथ ही, DICE सर्टिफ़िकेट में codeHash के तौर पर 32 बाइट लंबी वही वैल्यू रखने की अनुमति देती है.android-dice-hash-algos

कॉन्फ़िगरेशन डिस्क्रिप्टर: 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 होना चाहिए.