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