adiantum चालू करना

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

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

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

कर्नेल में बदलाव

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 कर्नेल है, तो परफ़ॉर्मेंस को बेहतर बनाने के लिए NEON निर्देश चालू करें:

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

उपयोगकर्ता स्पेस में बदलाव

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

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 के काम करने के लिए यह ज़रूरी नहीं है. इस सेटिंग का इस्तेमाल करने के लिए, userdata पार्टीशन को डिस्क पर 4096 बाइट के अलाइन किए गए ऑफ़सेट से शुरू होना चाहिए.

fstab में, userdata सेट करने के लिए:

forceencrypt=footer

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

adb root
adb shell dmesg

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

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