गाड़ी के लिए तय की गई फ़ाइल को एन्क्रिप्ट (सुरक्षित) करने की सुविधा इस्तेमाल करें

इस पेज पर, वाहन के आधार पर बाइंडिंग एन्क्रिप्शन सीड की सुविधाओं को चालू करने का तरीका बताया गया है.

खास जानकारी

वाहन को बांधने के लिए सीड की सुविधा का मुख्य मकसद, उपयोगकर्ता की निजता को और सुरक्षित रखना है. इसके लिए, वाहन में मौजूद इन्फ़ोटेनमेंट (आईवीआई) सिस्टम के डेटा को वाहन से हटाने से रोका जाता है. ऐसा करने के लिए, स्टोरेज एन्क्रिप्शन पासकोड को किसी अन्य इलेक्ट्रॉनिक कंट्रोल यूनिट (ईसीयू) से जोड़ा जाता है. इससे, अगर आईवीआई को हटाकर किसी दूसरे वाहन में लगाया जाता है या टेस्ट बेंच पर चलाया जाता है, तो आईवीआई पर एन्क्रिप्ट किया गया उपयोगकर्ता डेटा डिक्रिप्ट नहीं किया जा सकता.

फ़ाइल एन्क्रिप्शन पासकोड को बांधने के लिए, Vold वाहन के हिसाब से सीड को पासकोड एन्क्रिप्शन के साथ मिक्स करता है, ताकि पासकोड यूनीक हों और वाहन से जुड़े हों. सीड एक बाइट कलेक्शन है, जिसे OEM, STORAGE_ENCRYPTION_BINDING_SEED ने नई वाहन हार्डवेयर ऐब्स्ट्रैक्शन लेयर (वीएचएएल) प्रॉपर्टी के तौर पर दिखाया है. इस प्रॉपर्टी की अनुमतियों पर पाबंदी लगी हुई है, ताकि सिर्फ़ खास सिस्टम डेमन ही इसकी क्वेरी कर सकें.

आर्किटेक्चर डायग्राम

इस इमेज में, वाहन से जुड़े इंटिग्रेशन का आर्किटेक्चर दिखाया गया है:

पहली इमेज. वाहन से जुड़ा आर्किटेक्चर.

वाहन के हिसाब से बाइंडिंग की सुविधा चालू करना

वाहन के साथ स्टोरेज एन्क्रिप्शन को साफ़ तौर पर जोड़ा जाना चाहिए. फ़ैक्ट्री रीसेट किए बिना, इसे चालू या बंद नहीं किया जा सकता. इसका मतलब है कि डिवाइस को मिटाए बिना, ओवर-द-एयर (ओटीए) अपडेट की मदद से, इस सुविधा को चालू नहीं किया जा सकता. अगर कोई OEM डिवाइस को फ़ैक्ट्री रीसेट करता है, तो वह डिवाइस को अपग्रेड करने के बाद, इस सुविधा को चालू करने का विकल्प चुन सकता है. उदाहरण के लिए, सेवा के लिए आने पर.

वाहन के लिए वेंडर की ओर से उपलब्ध कराए गए एचएएल में STORAGE_ENCRYPTION_BINDING_SEED प्रॉपर्टी का इस्तेमाल करके, यह सुविधा चालू की जाती है. इस प्रॉपर्टी में 16 बाइट की बाइट स्ट्रिंग होती है. साथ ही, यह उम्मीद की जाती है कि इसे IVI से अलग ईसीयू पर सेव किया जाएगा. इस प्रॉपर्टी को शुरुआत में Android Automotive OS (AAOS) सेट करता है. यह क्रिप्टोग्राफ़िक तरीके से सुरक्षित रैंडम नंबर जनरेटर (CSRNG) का इस्तेमाल करके इसे जनरेट करता है. इसके बाद, AAOS अगले बूट पर प्रॉपर्टी को पढ़ता है.

VHAL, STORAGE_ENCRYPTION_BINDING_SEED की वैल्यू को कैसे सेव करता है, यह वेंडर के हिसाब से होता है. सीड को सुरक्षित रखने के लिए, हमारे पास ये सामान्य सुझाव हैं:

  1. (सुझाया गया) सीड को वाहन में मौजूद ईसीयू में सेव किया जाता है, जो भौतिक रूप से अच्छी तरह से सुरक्षित होता है. अगर ऐसा नहीं है, तो वाहन से IVI और ईसीयू, दोनों को आसानी से हटाया जा सकता है.
  2. (सुझाया गया) आईवीआई और ईसीयू को एक-दूसरे की पुष्टि करनी चाहिए, ताकि सीड को एक-दूसरे के साथ शेयर किया जा सके और ईसीयू से सीड के लिए स्पूफ़िंग अनुरोधों को रोका जा सके.
  3. (सुझाया गया) सीड को सुरक्षित चैनल का इस्तेमाल करके ट्रांसमिट किया जाना चाहिए, ताकि CAN बस को हैक न किया जा सके.

इसके अलावा, mount_all --late से पहले late-fs पर वेंडर init.target.rc को पक्का करने के लिए, यह जानकारी जोड़ें:

# feed vehicle binding seed to vold
exec_start vold_seed_binding

वाहन के एचएएल को hal now के बजाय early_hal में शुरू किया जाना चाहिए. persist.* सिस्टम की किसी भी प्रॉपर्टी को early-hal में ऐक्सेस नहीं किया जा सकता, क्योंकि /data partition अब तक माउंट नहीं हुआ है.

वाहन के हिसाब से बाइंडिंग कॉन्फ़िगर करना

अगर ईसीयू का बीज डेटा मेल नहीं खाता है, तो डिवाइस रिकवरी मोड में रीबूट हो जाता है. साथ ही, उपयोगकर्ता को /data पार्टीशन मिटाने या फिर से कोशिश करने के लिए कहा जाता है.

builtins.cpp में जाकर, डेटा मिटाने और उससे जुड़े प्रॉम्प्ट के व्यवहार को बदला जा सकता है:

  1. prompt_and_wipe_data को wipe_data में बदलें. डिवाइस का डेटा मिट जाता है और फिर डिवाइस बिना किसी सूचना के रीबूट हो जाता है.
  2. प्रॉम्प्ट मैसेज, recovery.cpp में मौजूद होता है.

    दूसरी इमेज. सूचना वाला मैसेज.

वाहन के हिसाब से बाइंडिंग की जांच करना

मॉक टेस्टिंग

packages/services/Car/cpp/security/vehicle_binding_util/tests में एक मॉक टेस्ट दिया गया है.

यह मॉक टेस्ट चलाने के लिए:

attest libvehicle_binding_util_test

इंटिग्रेशन टेस्टिंग

packages/services/Car/cpp/security/vehicle_binding_util/tests में atest टेस्ट दिया गया है.

इस इंटिग्रेशन टेस्ट को चलाने के लिए:

atest vehicle_binding_integration_test