Adiantum चालू करें

Adiantum, एन्क्रिप्शन (सुरक्षित) करने का एक तरीका है. इसे Android 9 और इसके बाद के वर्शन पर चलने वाले उन डिवाइसों के लिए डिज़ाइन किया गया है जिनके सीपीयू में AES निर्देश नहीं होते. अगर ARMv8 क्रिप्टोग्राफ़ी एक्सटेंशन वाले ARM-आधारित डिवाइस या AES-NI वाले x86-आधारित डिवाइस को शिप किया जा रहा है, तो आपको Adiantum का इस्तेमाल नहीं करना चाहिए. AES उन प्लैटफ़ॉर्म पर तेज़ी से काम करता है.

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

Android 9 या उसके बाद के वर्शन वाले डिवाइस पर Adiantum को चालू करने के लिए, आपको कर्नेल और यूज़रस्पेस में बदलाव करने होंगे.

Kernel में हुए बदलाव

Adiantum, Android के सामान्य कर्नेल के 4.9 और इसके बाद के वर्शन पर काम करता है.

अगर आपके डिवाइस के कर्नेल में Adiantum की सुविधा पहले से उपलब्ध नहीं है, तो इन बदलावों को चुनें. अगर आपको चेरी चुनने में समस्या आ रही है, तो फ़ुल-डिस्क एन्क्रिप्शन (एफ़डीई) का इस्तेमाल करने वाले डिवाइसों में fscrypt: पैच शामिल नहीं किया जा सकता.

कर्नेल वर्ज़न क्रिप्टो और fscrypt पैच dm-crypt पैच
4.19 4.19 कर्नेल dm-crypt पैच
4.14 4.14 कर्नेल dm-crypt पैच
4.9 4.9 कर्नेल dm-crypt पैच

अपने कर्नेल में Adiantum चालू करें

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

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

Android 9 और 10

अगर आपके डिवाइस को Android 9 या 10 के साथ लॉन्च किया जा रहा है, तो कर्नेल कॉन्फ़िगरेशन से जुड़ी कुछ अलग सेटिंग की ज़रूरत होती है. ये सेटिंग चालू करें:

CONFIG_CRYPTO_ADIANTUM=y
CONFIG_DM_CRYPT=y

अगर आपके डिवाइस में फ़ाइल-आधारित एन्क्रिप्शन (सुरक्षित करने) का तरीका इस्तेमाल किया जाता है, तो ये भी चालू करें:

CONFIG_F2FS_FS_ENCRYPTION=y

आखिर में, अगर आपके डिवाइस में 32-बिट ARM kernel है, तो परफ़ॉर्मेंस को बेहतर बनाने के लिए NEON निर्देश चालू करें:

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

यूज़रस्पेस में बदलाव

Android 10 या उसके बाद के वर्शन वाले डिवाइसों में, Adiantum यूज़रस्पेस बदलाव पहले से मौजूद हैं.

Android 9 वर्शन वाले डिवाइसों के लिए, इनमें से बदलाव चुनें:

अपने डिवाइस पर Adiantum चालू करें

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

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

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

fileencryption=adiantum

अगर आपका डिवाइस Android 11 या इसके बाद के वर्शन के साथ लॉन्च हो रहा है, तो मेटाडेटा एन्क्रिप्शन की सुविधा चालू करना भी ज़रूरी है. डिवाइस के स्टोरेज पर मेटाडेटा एन्क्रिप्ट करने के लिए Adiantum का इस्तेमाल करने के लिए, userdata के लिए fs_mgr_flags में ये विकल्प भी होने चाहिए:

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

इसके बाद, डिवाइस के स्टोरेज पर Adiantum एन्क्रिप्शन चालू करें. ऐसा करने के लिए, PRODUCT_PROPERTY_OVERRIDES में ये सिस्टम प्रॉपर्टी सेट करें:

Android 11 और उसके बाद के वर्शन के लिए:

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

Android 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 को कर्नेल कमांड लाइन में जोड़ें. इससे, Adiantum के ज़रिए मेटाडेटा को एन्क्रिप्ट करने पर, मेमोरी का इस्तेमाल थोड़ा कम होता है. ऐसा करने से पहले, पुष्टि करें कि fstab में, माउंट करने का inlinecrypt तरीका तय नहीं किया गया है. अगर यह एट्रिब्यूट मौजूद है, तो इसे हटा दें. ऐसा इसलिए, क्योंकि Adiantum एन्क्रिप्शन के लिए इसकी ज़रूरत नहीं होती. साथ ही, blk-crypto-fallback.num_keyslots=1 के साथ इस्तेमाल करने पर, इसकी वजह से परफ़ॉर्मेंस से जुड़ी समस्याएं आती हैं.

यह पुष्टि करने के लिए कि आपका तरीका काम कर रहा है या नहीं, गड़बड़ी की रिपोर्ट लें या चलाएं:

adb root
adb shell dmesg

अगर Adiantum सही तरीके से चालू है, तो आपको इसे कर्नेल लॉग में देखना चाहिए:

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

अगर आपने मेटाडेटा एन्क्रिप्शन की सुविधा चालू की है, तो इस बात की पुष्टि करने के लिए ये भी चलाएं कि Adiantum मेटाडेटा एन्क्रिप्शन की सुविधा सही तरीके से चालू है या नहीं:

adb root
adb shell dmctl table userdata

आउटपुट का तीसरा फ़ील्ड xchacha12,aes-adiantum-plain64 होना चाहिए.

पूरी ड्राइव को एन्क्रिप्ट (सुरक्षित) करने की सुविधा वाले डिवाइस

Adiantum को चालू करने और उसकी परफ़ॉर्मेंस को बेहतर बनाने के लिए, PRODUCT_PROPERTY_OVERRIDES में ये प्रॉपर्टी सेट करें:

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

fde_sector_size को 4096 पर सेट करने से परफ़ॉर्मेंस बेहतर होती है. हालांकि, Adiantum के काम करने के लिए यह ज़रूरी नहीं है. इस सेटिंग का इस्तेमाल करने के लिए, उपयोगकर्ता डेटा का पार्टीशन, डिस्क पर 4096-बाइट के अलाइन किए गए ऑफ़सेट से शुरू होना चाहिए.

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

forceencrypt=footer

यह पुष्टि करने के लिए कि आपका तरीका काम कर रहा है या नहीं, गड़बड़ी की रिपोर्ट लें या चलाएं:

adb root
adb shell dmesg

अगर Adiantum सही तरीके से चालू है, तो आपको यह जानकारी कर्नेल लॉग में दिखेगी:

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