Android 8.1 में पेश किया गया Weaver हार्डवेयर ऐब्स्ट्रैक्शन लेयर (एचएएल)
(IWeaver.aidl),
लॉक स्क्रीन नॉलेज फ़ैक्टर (एलएसकेएफ़) की मदद से, उपयोगकर्ता की पुष्टि करने के लिए एक सुरक्षित इंटरफ़ेस उपलब्ध कराता है.
एलएसकेएफ़ में पिन, पैटर्न, और पासवर्ड जैसी चीज़ें शामिल होती हैं.
Weaver, गेटकीपर की एलएसकेएफ़ की पुष्टि करने की सुविधा की जगह लेता है. हालांकि, हार्डवेयर की मदद से पुष्टि करने वाले टोकन जनरेट करने के लिए, अब भी गेटकीपर का इस्तेमाल किया जाता है.
Android 9 और इसके बाद के वर्शन में, सीडीडी 9.11.2 के तहत, StrongBox की सुविधा वाले डिवाइसों के लिए, सुरक्षित हार्डवेयर उपलब्ध कराना ज़रूरी है. इस हार्डवेयर की मदद से, उपयोगकर्ता की पुष्टि सुरक्षित तरीके से की जा सकती है. इस सुरक्षित हार्डवेयर का इस्तेमाल करके, Weaver एचएएल को लागू करने से, "उपयोगकर्ता की पुष्टि सुरक्षित तरीके से करने" की ज़रूरी शर्त पूरी हो जाती है.
जिन डिवाइसों में सुरक्षित एलिमेंट (एसई) की सुविधा नहीं होती है उनमें भी Weaver को ट्रस्टेड एक्ज़ीक्यूशन एनवायरमेंट (टीईई) में लागू किया जा सकता है. जैसे, Trusty.
Android 17 और इसके बाद के वर्शन में, सुरक्षित एलिमेंट की सुविधा वाले डिवाइसों के साथ-साथ, बिना सुरक्षा चिप की सुविधा वाले डिवाइसों में भी Weaver को लागू करने का सुझाव दिया जाता है.
कॉम्पोनेंट
Weaver में तीन कॉम्पोनेंट होते हैं:
- वीवर एआईडीएल इंटरफ़ेस (
IWeaver): यह एचएएल की फ़ॉर्मल स्पेसिफ़िकेशन है. Android 13 और इससे पुराने वर्शन में, एआईडीएल के बजाय एचआईडीएल का इस्तेमाल किया जाता था. - वीवर हार्डवेयर ऐब्स्ट्रैक्शन लेयर (एचएएल) सेवा:
यह वेंडर के हिसाब से Android की एक प्रोसेस है, जो
IWeaverइंटरफ़ेस को लागू करती है. - वीवर ट्रस्टेड ऐप्लिकेशन (टीए): यह सुरक्षित एनवायरमेंट में चलने वाली मुख्य लॉजिक है. यह एलएसकेएफ़ की पुष्टि करता है और रेट-लिमिटिंग लागू करता है. एचएएल सेवा, लागू करने के हिसाब से सुरक्षित चैनल का इस्तेमाल करके, टीए से कम्यूनिकेट करती है.
इंटरफ़ेस
Weaver का इंटरफ़ेस, परसिस्टंट स्लॉट का फ़िक्स्ड साइज़ वाला कलेक्शन दिखाता है. हर स्लॉट में फ़िक्स्ड साइज़ वाली कुंजी और फ़िक्स्ड साइज़ वाली वैल्यू होती है. हर स्लॉट की पहचान उसके आईडी से होती है. यह आईडी, [0, numSlots - 1] इंटरवल में मौजूद एक पूर्णांक होता है. किसी स्लॉट की वैल्यू को सिर्फ़ तब ऐक्सेस किया जा सकता है, जब सेव की गई कुंजी से मेल खाने वाली कुंजी दी गई हो.
Weaver के इंटरफ़ेस में मुख्य तौर पर ये चीज़ें शामिल होती हैं:
getConfig(): यह लागू करने की प्रोसेस के लिए, स्लॉट की संख्या, कुंजी का साइज़, और वैल्यू का साइज़ वापस लाता है.write(): यह तय किए गए स्लॉट को नई कुंजी-वैल्यू पेयर से बदलता है. यह ऑपरेशन एटॉमिक होता है. साथ ही, इससे पहले का डेटा हमेशा के लिए मिट जाता है . इसे वापस नहीं लाया जा सकता. इसे सुरक्षित तरीके से मिटाना कहा जाता है.read(): यह तय किए गए स्लॉट की वैल्यू वापस लाने की कोशिश करता है. यह ऑपरेशन सिर्फ़ तब काम करता है, जब रेट-लिमिटिंग टाइमआउट (टीए की ओर से लागू किया गया) चालू न हो और दी गई कुंजी, सेव की गई कुंजी से पूरी तरह मेल खाती हो.warmUp(): Android 17 और इसके बाद के वर्शन में, यह एक हिंट देता है कि जल्द ही रीड या राइट ऑपरेशन हो सकता है.
पूरे इंटरफ़ेस की स्पेसिफ़िकेशन के लिए, देखें
IWeaver.aidl.
Android में इसका इस्तेमाल
जब Weaver को लागू किया जाता है, तब Android सिस्टम सर्वर में मौजूद LockSettingsService, उपयोगकर्ता के डेटा को सुरक्षित रखने के लिए इसका इस्तेमाल करता है. डिवाइस पर मौजूद हर उपयोगकर्ता के लिए, LockSettingsService एक Weaver स्लॉट मैनेज करता है:
- स्लॉट कुंजी (
weaverKey): यह उपयोगकर्ता के एलएसकेएफ़ का हैश है. अगर उपयोगकर्ता के पास स्क्रीन लॉक नहीं है, तो डिफ़ॉल्ट स्ट्रिंग का इस्तेमाल किया जाता है. - स्लॉट वैल्यू (
weaverSecret): यह ज़्यादा एंट्रॉपी वाली, रैंडम तरीके से जनरेट की गई क्रिप्टोग्राफ़िक सीक्रेट है.
weaverSecret को सिर्फ़ इन तरीकों से वापस लाया जा सकता है:
- वीवर टीए को उसकी
रेट-लिमिटिंग नीति के तहत, सही
weaverKeyदेकर. - उस सुरक्षित एनवायरमेंट से समझौता करके जिसमें Weaver टीए चलता है. ऐसा करना बहुत मुश्किल होता है.
LockSettingsService , उपयोगकर्ता के सिंथेटिक पासवर्ड को एन्क्रिप्ट (सुरक्षित) करने के लिए, weaverKey और weaverSecret, दोनों का इस्तेमाल करता है. सिंथेटिक पासवर्ड,
फ़ाइल-बेस्ड एन्क्रिप्शन (एफ़बीई)
के लिए, उपयोगकर्ता के क्रेडेंशियल-एन्क्रिप्टेड (सीई) स्टोरेज और
Android कीस्टोर में, उपयोगकर्ता की पुष्टि से जुड़ी कुंजियों को सुरक्षित रखता है.
इसलिए, जब तक Weaver सीक्रेट रिलीज़ नहीं करता, तब तक डेटा को ऐक्सेस नहीं किया जा सकता.
Android 17 और इसके बाद के वर्शन में, एलएसकेएफ़ डालने की प्रोसेस शुरू होने पर, LockSettingsService, Weaver के warmUp() तरीके को कॉल करता है. Weaver को लागू करने की प्रोसेस में, इस सिग्नल का इस्तेमाल करके, सुरक्षित हार्डवेयर को कम पावर वाली स्थिति से बाहर लाया जा सकता है. इससे, आने वाले read() अनुरोध के लिए, लेटेंसी कम हो जाती है.
Weaver बनाम गेटकीपर
पहले,
गेटकीपर एचएएल
, verify() कॉल में दो अलग-अलग काम करता था:
- पुष्टि करना: टीईई की ओर से लागू की गई रेट-लिमिटिंग के साथ, एलएसकेएफ़ की जांच करना.
- सर्टिफ़िकेट जारी करना: KeyMint (पहले Keymaster) को यह बताने के लिए
HardwareAuthTokenजारी करना कि एलएसकेएफ़ की पुष्टि हो गई है.
Weaver पर क्यों स्विच किया जा रहा है?
Android 8.1 में, पासकोड रीसेट करने के सुरक्षित टोकन की सुविधा शुरू होने के बाद, "सिंथेटिक पासवर्ड" मुख्य क्रिप्टोग्राफ़िक सीक्रेट बन गया. ऊपर बताए गए दोनों काम अब
गेटकीपर के अलग-अलग एनरोलमेंट से किए जाते हैं. इनमें से एक एनरोलमेंट, userId + 100000के तहत एलएसकेएफ़ के लिए और दूसरा, userIdके तहत सिंथेटिक पासवर्ड के लिए होता है.
Weaver को पहले काम के लिए पेश किया गया था. यह सुरक्षित एलिमेंट (एसई) पर आधारित लागू करने की प्रोसेस के लिए, आसान एचएएल इंटरफ़ेस का इस्तेमाल करता है.
| सुविधा | Weaver | गेटकीपर |
|---|---|---|
| सुरक्षित तरीके से मिटाना | सुरक्षित तरीके से मिटाना ज़रूरी है. इसे लागू करना आसान है, क्योंकि the इंटरफ़ेस में फ़िक्स्ड साइज़ वाले स्लॉट की संख्या तय होती है. | सुरक्षित तरीके से मिटाना ज़रूरी नहीं है. इसे लागू करना मुश्किल है, क्योंकि इंटरफ़ेस में एनरोलमेंट की संख्या तय नहीं होती. |
| हार्डवेयर | एसई के लिए ऑप्टिमाइज़ किया गया है, लेकिन यह टीईई में भी काम करता है. | यह सिर्फ़ टीईई में काम करता है. मौजूदा डिज़ाइन के साथ, इसे एसई में लागू करने से सुरक्षा से जुड़ा कोई फ़ायदा नहीं मिलता. |
| गड़बड़ी प्रबंधन | गड़बड़ी के कोड ज़्यादा साफ़ होते हैं | गड़बड़ी के कोड अस्पष्ट होते हैं. इस वजह से, लॉक स्क्रीन, गलत एलएसकेएफ़ और इनसे जुड़ी गड़बड़ियों के बीच अंतर नहीं कर पाती. |
| एटॉमिकिटी | LockSettingsService में मौजूद वह कोड जो Weaver का इस्तेमाल करता है,
एलएसकेएफ़ में बदलाव एटॉमिक तरीके से करता है. नया डेटा, Weaver के नए स्लॉट में लिखा जाता है. साथ ही,
पुराना स्लॉट सिर्फ़ तब मिटाया जाता है, जब ऐसा करना सुरक्षित हो. |
LockSettingsService में मौजूद वह कोड जो गेटकीपर
का इस्तेमाल करता है, एलएसकेएफ़ में बदलाव एटॉमिक तरीके से नहीं करता. एलएसकेएफ़ में बदलाव करते समय कोई गड़बड़ी होने पर, उपयोगकर्ता का सारा डेटा खो सकता है. |
रेफ़रंस कोड
AOSP में, Weaver के दो रेफ़रंस लागू करने की प्रोसेस शामिल है:
-
Android 17 और इसके बाद के वर्शन में,
system/weaver/सामान्य सुरक्षित एनवायरमेंट के लिए, Weaver को लागू करने की प्रोसेस शामिल है. -
Android 8.1 और इसके बाद के वर्शन में,
external/libese/में, ISO/IEC7816-4 के साथ काम करने वाले सुरक्षित एलिमेंट के लिए, Weaver को लागू करने की प्रोसेस शामिल है.
जांच करना
Weaver को लागू करने की प्रोसेस की पुष्टि करने के लिए, VtsHalWeaverTargetTest का इस्तेमाल करें:
atest VtsHalWeaverTargetTest
या:
vts-tradefed run vts -m VtsHalWeaverTargetTest