एडियंटम को सक्षम करना

एडियंटम एक एन्क्रिप्शन विधि है जिसे एंड्रॉइड 9 और उच्चतर चलाने वाले उपकरणों के लिए डिज़ाइन किया गया है जिनके सीपीयू में एईएस निर्देशों की कमी है। यदि आप ARMv8 क्रिप्टोग्राफी एक्सटेंशन के साथ ARM-आधारित डिवाइस या AES-NI के साथ x86-आधारित डिवाइस शिपिंग कर रहे हैं, तो आपको Adiantum का उपयोग नहीं करना चाहिए। उन प्लेटफार्मों पर एईएस तेज है।

इन एईएस सीपीयू निर्देशों की कमी वाले उपकरणों के लिए, एडियंटम आपके डिवाइस पर बहुत कम प्रदर्शन ओवरहेड के साथ एन्क्रिप्शन प्रदान करता है। बेंचमार्किंग नंबरों के लिए, एडियंटम पेपर देखें। बेंचमार्किंग स्रोत को अपने हार्डवेयर पर चलाने के लिए, GitHub पर Adiantum स्रोत देखें।

एंड्रॉइड 9 या उच्चतर चलाने वाले डिवाइस पर एडियंटम को सक्षम करने के लिए, आपको कर्नेल परिवर्तन और उपयोगकर्ता स्थान परिवर्तन करने की आवश्यकता है।

कर्नेल परिवर्तन

एडियंटम Android सामान्य कर्नेल, संस्करण 4.9 और उच्चतर द्वारा समर्थित है।

यदि आपके उपकरण के कर्नेल में पहले से एडियंटम समर्थन नहीं है, तो नीचे सूचीबद्ध परिवर्तनों को चेरी-चुनें। यदि आपको चेरी-पिकिंग में समस्या हो रही है, तो फ़ुल-डिस्क एन्क्रिप्शन (FDE) का उपयोग करने वाले fscrypt: पैच को बाहर कर सकते हैं।

कर्नेल संस्करण क्रिप्टो और fscrypt पैच dm-crypt पैच
4.19 4.19 कर्नेल dm-crypt पैच
4.14 4.14 कर्नेल dm-crypt पैच
4.9 4.9 कर्नेल dm-crypt पैच

अपने कर्नेल में एडियंटम सक्षम करें

एंड्रॉइड 11 और उच्चतर

यदि आपका डिवाइस Android 11 या उच्चतर के साथ लॉन्च हो रहा है, तो अपने डिवाइस के कर्नेल कॉन्फ़िगरेशन में निम्न सेटिंग्स को सक्षम करें:

CONFIG_CRYPTO_ADIANTUM=y
CONFIG_FS_ENCRYPTION=y
CONFIG_BLK_INLINE_ENCRYPTION=y
CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK=y
CONFIG_FS_ENCRYPTION_INLINE_CRYPT=y
CONFIG_DM_DEFAULT_KEY=y

यदि आपका डिवाइस 32-बिट एआरएम कर्नेल चला रहा है, तो प्रदर्शन को बेहतर बनाने के लिए नीयन निर्देश भी सक्षम करें:

CONFIG_KERNEL_MODE_NEON=y
CONFIG_CRYPTO_AES_ARM=y
CONFIG_CRYPTO_CHACHA20_NEON=y
CONFIG_CRYPTO_NHPOLY1305_NEON=y

एंड्रॉइड 9 और 10

यदि आपका डिवाइस एंड्रॉइड 9 या 10 के साथ लॉन्च हो रहा है, तो थोड़ा अलग कर्नेल कॉन्फ़िगरेशन सेटिंग्स की आवश्यकता है। निम्नलिखित सेटिंग्स सक्षम करें:

CONFIG_CRYPTO_ADIANTUM=y
CONFIG_DM_CRYPT=y

यदि आपका उपकरण फ़ाइल-आधारित एन्क्रिप्शन का उपयोग करता है, तो यह भी सक्षम करें:

CONFIG_F2FS_FS_ENCRYPTION=y

अंत में, यदि आपका डिवाइस 32-बिट एआरएम कर्नेल चलाता है, तो प्रदर्शन को बेहतर बनाने के लिए नीयन निर्देशों को सक्षम करें:

CONFIG_KERNEL_MODE_NEON=y
CONFIG_CRYPTO_AES_ARM=y
CONFIG_CRYPTO_CHACHA20_NEON=y
CONFIG_CRYPTO_NHPOLY1305_NEON=y

उपयोगकर्ता स्थान परिवर्तन

Android 10 या उच्चतर चलाने वाले उपकरणों के लिए, एडियंटम उपयोगकर्ता स्थान परिवर्तन पहले से मौजूद हैं।

Android 9 चलाने वाले उपकरणों के लिए, चेरी-निम्न परिवर्तन चुनें:

अपने डिवाइस में एडियंटम सक्षम करें

सबसे पहले, सुनिश्चित करें कि आपके डिवाइस में PRODUCT_SHIPPING_API_LEVEL उस Android संस्करण से मेल खाने के लिए सही ढंग से सेट है जिसके साथ वह लॉन्च हो रहा है। उदाहरण के लिए, Android 11 के साथ लॉन्च होने वाले डिवाइस में PRODUCT_SHIPPING_API_LEVEL := 30 होना चाहिए। यह महत्वपूर्ण है क्योंकि कुछ एन्क्रिप्शन सेटिंग्स में अलग-अलग लॉन्च संस्करणों पर अलग-अलग डिफ़ॉल्ट होते हैं।

फ़ाइल-आधारित एन्क्रिप्शन वाले उपकरण

अपने डिवाइस के आंतरिक संग्रहण पर एडियंटम फ़ाइल-आधारित एन्क्रिप्शन को सक्षम करने के लिए, डिवाइस की fstab फ़ाइल में उपयोगकर्ता userdata विभाजन के लिए पंक्ति के अंतिम कॉलम ( fs_mgr_flags कॉलम) में निम्न विकल्प जोड़ें:

fileencryption=adiantum

यदि आपका डिवाइस Android 11 या उच्चतर के साथ लॉन्च हो रहा है, तो मेटाडेटा एन्क्रिप्शन को सक्षम करना भी आवश्यक है। आंतरिक भंडारण पर मेटाडेटा एन्क्रिप्शन के लिए एडियंटम का उपयोग करने के लिए, उपयोगकर्ता डेटा के लिए userdata में निम्नलिखित विकल्प भी होने चाहिए:

metadata_encryption=adiantum,keydirectory=/metadata/vold/metadata_encryption

इसके बाद, एडॉप्टेबल स्टोरेज पर एडियंटम एन्क्रिप्शन सक्षम करें। ऐसा करने के लिए, PRODUCT_PROPERTY_OVERRIDES में निम्न सिस्टम गुण सेट करें:

Android 11 और उच्चतर के लिए:

ro.crypto.volume.options=adiantum
ro.crypto.volume.metadata.encryption=adiantum

एंड्रॉइड 9 और 10 के लिए:

ro.crypto.volume.contents_mode=adiantum
ro.crypto.volume.filenames_mode=adiantum
ro.crypto.fde_algorithm=adiantum
ro.crypto.fde_sector_size=4096

अंत में, कर्नेल कमांड लाइन में वैकल्पिक रूप blk-crypto-fallback.num_keyslots=1 जोड़ें। जब एडियंटम मेटाडेटा एन्क्रिप्शन का उपयोग किया जाता है तो यह स्मृति उपयोग को थोड़ा कम कर देगा। ऐसा करने से पहले, सत्यापित करें कि inlinecrypt माउंट विकल्प fstab में निर्दिष्ट नहीं है। यदि यह निर्दिष्ट है, तो इसे हटा दें, क्योंकि एडियंटम एन्क्रिप्शन के लिए इसकी आवश्यकता नहीं है, और यह blk-crypto-fallback.num_keyslots=1 के संयोजन में उपयोग किए जाने पर प्रदर्शन समस्याओं का कारण बनता है।

यह सत्यापित करने के लिए कि आपके कार्यान्वयन ने काम किया है, एक बग रिपोर्ट लें या चलाएं:

adb root
adb shell dmesg

यदि एडियंटम सही ढंग से सक्षम है, तो आपको इसे कर्नेल लॉग में देखना चाहिए:

fscrypt: Adiantum using implementation "adiantum(xchacha12-neon,aes-arm,nhpoly1305-neon)"

यदि आपने मेटाडेटा एन्क्रिप्शन को सक्षम किया है, तो यह सत्यापित करने के लिए कि एडियंटम मेटाडेटा एन्क्रिप्शन सही तरीके से सक्षम है, निम्नलिखित को भी चलाएँ:

adb root
adb shell dmctl table userdata

आउटपुट का तीसरा क्षेत्र xchacha12,aes-adiantum-plain64 होना चाहिए।

पूर्ण-डिस्क एन्क्रिप्शन वाले उपकरण

एडियंटम को सक्षम करने और इसके प्रदर्शन को बेहतर बनाने के लिए, इन गुणों को PRODUCT_PROPERTY_OVERRIDES में सेट करें:

ro.crypto.fde_algorithm=adiantum
ro.crypto.fde_sector_size=4096

fde_sector_size को 4096 पर सेट करने से प्रदर्शन में सुधार होता है, लेकिन एडियंटम के काम करने के लिए यह आवश्यक नहीं है। इस सेटिंग का उपयोग करने के लिए, उपयोगकर्ता डेटा विभाजन 4096-बाइट संरेखित ऑफ़सेट ऑन-डिस्क पर प्रारंभ होना चाहिए।

fstab में, उपयोगकर्ताडेटा सेट के लिए:

forceencrypt=footer

यह सत्यापित करने के लिए कि आपके कार्यान्वयन ने काम किया है, एक बग रिपोर्ट लें या चलाएं:

adb root
adb shell dmesg

यदि एडियंटम सही ढंग से सक्षम है, तो आपको इसे कर्नेल लॉग में देखना चाहिए:

device-mapper: crypt: adiantum(xchacha12,aes) using implementation "adiantum(xchacha12-neon,aes-arm,nhpoly1305-neon)"