एडिएंटम एक एन्क्रिप्शन विधि है जो एंड्रॉइड 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 चलाने वाले उपकरणों के लिए, निम्नलिखित परिवर्तनों को चेरी-पिक करें:
- क्रिप्टफ़्स: एडियंटम समर्थन जोड़ें
- क्रिप्टफ़्स: डीएम-क्रिप्ट सेक्टर आकार सेट करने की अनुमति दें
- क्रिप्टफ़्स: डीएम-क्रिप्ट डिवाइस आकार को क्रिप्टो सेक्टर सीमा तक पूर्णांकित करें
- क्रिप्टएफएस: डीएम-क्रिप्ट डिवाइस निर्माण की लॉगिंग में सुधार करें
- libfscrypt: एडियंटम समर्थन जोड़ें
- fs_mgr_fstab: एडियंटम समर्थन जोड़ें
अपने डिवाइस में एडियंटम सक्षम करें
सबसे पहले, सुनिश्चित करें कि आपके डिवाइस में लॉन्च होने वाले एंड्रॉइड संस्करण से मेल खाने के लिए 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)"