इस दस्तावेज़ में, AVF के सामान्य इस्तेमाल के उदाहरण दिए गए हैं.
अलग-अलग कॉन्टेंट का कंपाइलेशन
सुरक्षित वीएम, सॉफ़्टवेयर से सुरक्षित एनक्लेव के तौर पर, सुरक्षा से जुड़े संवेदनशील कोड को संकलित करने के लिए सुरक्षित एनवायरमेंट उपलब्ध कराता है. इस एनवायरमेंट की मदद से, bootclasspath
और सिस्टम सर्वर JAR (APEX अपडेट से ट्रिगर होने वाले) के कंपाइलेशन को, रिबूट से पहले के समय से, रिबूट से पहले के समय पर ले जाया जा सकता है. साथ ही, APEX अपडेट के बाद रिबूट होने में लगने वाले समय को काफ़ी कम किया जा सकता है.
इसे com.android.compos
APEX में लागू किया गया है. यह कॉम्पोनेंट ज़रूरी नहीं है और इसे makefile का इस्तेमाल करके शामिल किया जा सकता है.
सुरक्षा का मकसद, पुष्टि किए गए इनपुट को सही तरीके से कंपाइल करना और आउटपुट को अलग से जनरेट करना है. Android, भरोसेमंद क्लाइंट के तौर पर, कंपाइलेशन के आउटपुट में किसी भी तरह का बदलाव नहीं कर सकता. हालांकि, Android, बूट टाइम कंपाइलेशन पर वापस जाने पर, आउटपुट को गलत बना सकता है.
VM में कंपाइलेशन सेवा सिर्फ़ तब हस्ताक्षर जनरेट करती है, जब पूरे कंपाइलेशन के दौरान कोई गड़बड़ी न हो. Android, सिग्नेचर की पुष्टि करने के लिए, VM से सार्वजनिक पासकोड हासिल कर सकता है.
VM की कुंजी, VM की DICE प्रोफ़ाइल से जनरेट होती है. इसे VM में माउंट किए गए APEX और APK के साथ-साथ, VM के अन्य पैरामीटर से तय किया जाता है. जैसे, डीबग करने की सुविधा.
सार्वजनिक कुंजी किसी अनचाहे VM से नहीं है, यह पता लगाने के लिए Android, VM को बूट करता है. इससे यह पता चलता है कि कुंजी सही है या नहीं. हर APEX अपडेट के बाद, VM को जल्दी बूट किया जाता है.
Protected VM के 'पुष्टि किए गए बूट' की सुविधा के साथ, कंपाइलेशन सेवा सिर्फ़ पुष्टि किए गए कोड को चलाती है. इसलिए, कोड सिर्फ़ उन इनपुट को स्वीकार कर सकता है जो कुछ शर्तों को पूरा करते हैं. उदाहरण के लिए, सिर्फ़ उस इनपुट फ़ाइल को स्वीकार करना जहां उसका नाम और fs-verity
डाइजेस्ट, अनुमति वाली सूची में दिया गया हो.
वीएम से एक्सपोज़ किए गए सभी एपीआई, अटैक सरफ़ेस होते हैं. सभी इनपुट फ़ाइलों और पैरामीटर को किसी ऐसे क्लाइंट से माना जाता है जिस पर भरोसा नहीं किया जा सकता. इसलिए, प्रोसेस करने से पहले उनकी पुष्टि करना और जांच करना ज़रूरी है.
इनपुट/आउटपुट फ़ाइल की इंटिग्रिटी की पुष्टि, VM करता है. इसके लिए, Android पर सेव की गई फ़ाइलों को गैर-भरोसेमंद फ़ाइल सर्वर के तौर पर इस्तेमाल किया जाता है. यह पुष्टि इस तरह की जाती है:
fs-verity
एल्गोरिदम का इस्तेमाल करके, इनपुट फ़ाइल के कॉन्टेंट का इस्तेमाल करने से पहले उसकी पुष्टि करना ज़रूरी है. किसी इनपुट फ़ाइल को VM में उपलब्ध कराने के लिए, उसका रूट हैश किसी ऐसे कंटेनर (APK) में दिया जाना चाहिए जो VM की DICE प्रोफ़ाइल में योगदान देता हो. भरोसेमंद रूट हैश की मदद से, हमलावर बिना पता लगाए इनपुट में बदलाव नहीं कर सकता.- VM में, आउटपुट फ़ाइल की पूरी सुरक्षा होनी चाहिए. भले ही, आउटपुट फ़ाइल Android पर सेव की गई हो, लेकिन जनरेट करने के दौरान,
fs-verity
ट्री फ़ॉर्मैट में ही पूरी सुरक्षा बनाए रखी जाती है. हालांकि, इसे डाइनैमिक तौर पर अपडेट किया जा सकता है. फ़ाइनल आउटपुट फ़ाइल की पहचान, रूट हैश से की जा सकती है. यह हैश, VM में अलग से मौजूद होता है. VM में मौजूद सेवा, हस्ताक्षर की मदद से आउटपुट फ़ाइलों को सुरक्षित रखती है.