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

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

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

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

कर्नेल बदलता है

एडिएंटम एंड्रॉइड कॉमन कर्नेल, संस्करण 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 और उच्चतर

यदि आपका डिवाइस एंड्रॉइड 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-बिट ARM कर्नेल चला रहा है, तो प्रदर्शन में सुधार के लिए NEON निर्देश भी सक्षम करें:

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-बिट एआरएम कर्नेल चलाता है, तो प्रदर्शन में सुधार के लिए NEON निर्देश सक्षम करें:

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

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

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

एंड्रॉइड 9 चलाने वाले उपकरणों के लिए, निम्नलिखित परिवर्तनों को चेरी-पिक करें:

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

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

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

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

fileencryption=adiantum

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

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)"