वीवर

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

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

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

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

Android 17 और इसके बाद के वर्शन में, सुरक्षित एलिमेंट की सुविधा वाले डिवाइसों के साथ-साथ, बिना सुरक्षा चिप की सुविधा वाले डिवाइसों में भी वीवर को लागू करने का सुझाव दिया जाता है.

घटक

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

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

इंटरफ़ेस

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

वीवर के इंटरफ़ेस में मुख्य रूप से ये चीज़ें शामिल होती हैं:

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

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

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

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

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

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

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

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

Android 17 और इसके बाद के वर्शन में, जब एलएसकेएफ़ डाला जाता है, तब LockSettingsService, वीवर के warmUp() तरीके को कॉल करता है. वीवर को लागू करने वाली कंपनियां या लोग, इस सिग्नल का इस्तेमाल करके, सुरक्षित हार्डवेयर को कम पावर वाली स्थिति से बाहर ला सकते हैं. इससे, आने वाले read() अनुरोध के लिए, लेटेंसी कम हो जाती है.

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

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

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

वीवर पर क्यों शिफ़्ट किया गया?

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

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

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

रेफ़रंस कोड

AOSP में, वीवर के दो रेफ़रंस लागू करने की सुविधा है:

  • Android 17 और इसके बाद के वर्शन में, system/weaver/ सामान्य सुरक्षित एनवायरमेंट के लिए, वीवर को लागू करने की सुविधा है.
  • Android 8.1 और इसके बाद के वर्शन में, external/libese/ ISO/IEC7816-4 के साथ काम करने वाले सुरक्षित एलिमेंट के लिए, वीवर को लागू करने की सुविधा है.

जांच करना

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

atest VtsHalWeaverTargetTest

या:

vts-tradefed run vts -m VtsHalWeaverTargetTest