एडिअंटम, एन्क्रिप्शन (सुरक्षित) करने का एक तरीका है. इसे 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 kernel है, तो परफ़ॉर्मेंस को बेहतर बनाने के लिए 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
Userspace में हुए बदलाव
Android 10 या उसके बाद के वर्शन वाले डिवाइसों के लिए, Adiantum के यूज़रस्पेस में हुए बदलाव पहले से मौजूद हैं.
Android 9 वाले डिवाइसों के लिए, इन बदलावों में से अपनी पसंद के मुताबिक बदलाव चुनें:
- cryptfs: Adiantum के साथ काम करने की सुविधा जोड़ना
- cryptfs: dm-crypt सेक्टर का साइज़ सेट करने की अनुमति दें
- cryptfs: dm-crypt डिवाइस के साइज़ को क्रिप्टो सेक्टर की सीमा तक राउंड डाउन करें
- cryptfs: dm-crypt डिवाइस बनाने के लिए लॉगिंग को बेहतर बनाना
- libfscrypt: Adiantum के साथ काम करने की सुविधा जोड़ी गई
- fs_mgr_fstab: Adiantum के साथ काम करने की सुविधा जोड़ना
अपने डिवाइस में 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 के ज़रिए मेटाडेटा को एन्क्रिप्ट करने पर, मेमोरी का इस्तेमाल थोड़ा कम होता है. ऐसा करने से पहले, पुष्टि करें कि inlinecrypt
में fstab
में माउंट करने का विकल्प न दिया गया हो.
अगर यह एट्रिब्यूट मौजूद है, तो इसे हटा दें. ऐसा इसलिए, क्योंकि 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 partition को डिस्क पर 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)"