वीवर

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

वीवर, गेटकीपर की एलएसकेएफ़ की पुष्टि करने की सुविधा की जगह लेता है. हालांकि, हार्डवेयर की मदद से पुष्टि करने वाले टोकन जनरेट करने के लिए, अब भी गेटकीपर का इस्तेमाल किया जाता है.

Android 9 और इसके बाद के वर्शन में, सीडीडी 9.11.2 के तहत, StrongBox की सुविधा वाले डिवाइसों के लिए, सुरक्षित हार्डवेयर उपलब्ध कराना ज़रूरी है. इस हार्डवेयर की मदद से, उपयोगकर्ता की पुष्टि सुरक्षित तरीके से की जा सकती है. इस सुरक्षित हार्डवेयर का इस्तेमाल करके, वीवर एचएएल को लागू करने से, "उपयोगकर्ता की पुष्टि सुरक्षित तरीके से करने" की ज़रूरी शर्त पूरी होती है.

जिन डिवाइसों में सुरक्षित एलिमेंट (एसई) नहीं होता उन पर भी, वीवर को ट्रस्टेड एक्ज़ीक्यूशन एनवायरमेंट (टीईई) में लागू किया जा सकता है. जैसे, Trusty.

घटक

वीवर में तीन कॉम्पोनेंट होते हैं:

  • वीवर एआईडीएल इंटरफ़ेस (IWeaver): यह एचएएल की फ़ॉर्मल स्पेसिफ़िकेशन है. Android 13 और इससे पुराने वर्शन में, एआईडीएल के बजाय एचआईडीएल का इस्तेमाल किया जाता था.
  • वीवर हार्डवेयर ऐब्स्ट्रैक्शन लेयर (एचएएल) सेवा: यह वेंडर के हिसाब से Android की एक प्रोसेस है, जो IWeaver इंटरफ़ेस को लागू करती है.
  • वीवर ट्रस्टेड ऐप्लिकेशन (टीए): यह सुरक्षित एनवायरमेंट में चलने वाली मुख्य लॉजिक है. यह एलएसकेएफ़ की पुष्टि करता है और रेट-लिमिटिंग लागू करता है. एचएएल सेवा, लागू करने के हिसाब से सुरक्षित चैनल का इस्तेमाल करके, टीए से कम्यूनिकेट करती है.

इंटरफ़ेस

वीवर का इंटरफ़ेस, परसिस्टेंट स्लॉट का फ़िक्स्ड साइज़ वाला कलेक्शन दिखाता है. हर स्लॉट में, फ़िक्स्ड साइज़ वाली कुंजी और फ़िक्स्ड साइज़ वाली वैल्यू होती है. हर स्लॉट की पहचान उसके आईडी से होती है. यह आईडी, [0, numSlots - 1] इंटरवल में मौजूद एक इंटिजर होता है. किसी स्लॉट की वैल्यू को सिर्फ़ तब ऐक्सेस किया जा सकता है, जब सेव की गई कुंजी से मेल खाने वाली कुंजी दी जाती है.

वीवर के इंटरफ़ेस में ये शामिल हैं:

  • getConfig(): यह लागू करने की प्रोसेस के लिए, स्लॉट की संख्या, कुंजी का साइज़, और वैल्यू का साइज़ वापस लाता है.
  • write(): यह तय किए गए स्लॉट को, नई कुंजी-वैल्यू पेयर से बदलता है. यह ऑपरेशन एटॉमिक होता है. साथ ही, इससे पहले का डेटा हमेशा के लिए मिट जाता है . इसे वापस नहीं लाया जा सकता. इसे सुरक्षित तरीके से मिटाना कहा जाता है.
  • read(): यह तय किए गए स्लॉट की वैल्यू वापस लाने की कोशिश करता है. यह सिर्फ़ तब काम करता है, जब रेट-लिमिटिंग टाइमआउट (टीए के ज़रिए लागू किया गया) चालू नहीं होता और दी गई कुंजी, सेव की गई कुंजी से पूरी तरह मेल खाती है.

पूरे इंटरफ़ेस की स्पेसिफ़िकेशन के लिए, देखें IWeaver.aidl.

Android में इसका इस्तेमाल

जब वीवर को लागू किया जाता है, तब Android सिस्टम सर्वर में मौजूद LockSettingsService, उपयोगकर्ता के डेटा को सुरक्षित रखने के लिए इसका इस्तेमाल करता है. डिवाइस पर मौजूद हर उपयोगकर्ता के लिए, LockSettingsService, वीवर स्लॉट को मैनेज करता है:

  • स्लॉट कुंजी (weaverKey): यह उपयोगकर्ता के एलएसकेएफ़ का हैश है. अगर उपयोगकर्ता के पास स्क्रीन लॉक नहीं है, तो डिफ़ॉल्ट स्ट्रिंग का इस्तेमाल किया जाता है.
  • स्लॉट वैल्यू (weaverSecret): यह हाई-एंट्रॉपी वाला, रैंडम तरीके से जनरेट किया गया क्रिप्टोग्राफ़िक सीक्रेट है.

weaverSecret को सिर्फ़ इन तरीकों से वापस लाया जा सकता है:

  • वीवर टीए को, उसकी रेट-लिमिटिंग नीति के तहत सही weaverKey देकर.
  • उस सुरक्षित एनवायरमेंट से समझौता करके जिसमें वीवर टीए चलता है. ऐसा करना बहुत मुश्किल होता है.

LockSettingsService , उपयोगकर्ता के सिंथेटिक पासवर्ड को एन्क्रिप्ट (सुरक्षित) करने के लिए, weaverKey और weaverSecret, दोनों का इस्तेमाल करता है. सिंथेटिक पासवर्ड, फ़ाइल-बेस्ड एन्क्रिप्शन (एफ़बीई) के लिए, उपयोगकर्ता के क्रेडेंशियल-एन्क्रिप्टेड (सीई) स्टोरेज और Android कीस्टोर में, उपयोगकर्ता की पुष्टि से जुड़ी कुंजियों को सुरक्षित रखता है. इसलिए, जब तक वीवर सीक्रेट जारी नहीं करता, तब तक डेटा को ऐक्सेस नहीं किया जा सकता.

वीवर बनाम गेटकीपर

पहले, गेटकीपर एचएएल , verify() कॉल में दो अलग-अलग काम करता था:

  1. पुष्टि करना: टीईई के ज़रिए लागू की गई रेट-लिमिटिंग के साथ, एलएसकेएफ़ की जांच करना.
  2. अटेस्टेशन: यह बताने के लिए HardwareAuthToken जारी करना कि एलएसकेएफ़ की पुष्टि हो गई है.

वीवर का इस्तेमाल क्यों किया जाता है?

Android 8.1 में, सुरक्षित पासकोड रीसेट टोकन की सुविधा शुरू होने के बाद, "सिंथेटिक पासवर्ड" मुख्य क्रिप्टोग्राफ़िक सीक्रेट बन गया. ऊपर बताए गए दोनों काम अब अलग-अलग गेटकीपर एनरोलमेंट से किए जाते हैं. इनमें से एक एलएसकेएफ़ के लिए userId + 100000 और दूसरा सिंथेटिक पासवर्ड के लिए userIdके तहत किया जाता है.

वीवर को पहला काम करने के लिए पेश किया गया था. यह काम, सुरक्षित एलिमेंट (एसई) पर आधारित लागू करने की प्रोसेस के लिए, आसान एचएएल इंटरफ़ेस का इस्तेमाल करके किया जाता है.

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

रेफ़रंस कोड

आईएसओ/आईईसी7816-4 के साथ काम करने वाले सुरक्षित एलिमेंट में, वीवर को लागू करने के लिए रेफ़रंस कोड, AOSP में उपलब्ध है: external/libese/.

जांच करना

वीवर को लागू करने की प्रोसेस की पुष्टि करने के लिए, VtsHalWeaverTargetTest का इस्तेमाल करें:

atest VtsHalWeaverTargetTest

या:

vts-tradefed run vts -m VtsHalWeaverTargetTest