অ্যাডিয়েন্টাম হলো একটি এনক্রিপশন পদ্ধতি, যা অ্যান্ড্রয়েড ৯ বা তার পরবর্তী সংস্করণের ডিভাইসগুলোর জন্য ডিজাইন করা হয়েছে, যাদের সিপিইউ-তে AES নির্দেশাবলী নেই। আপনি যদি ARMv8 ক্রিপ্টোগ্রাফি এক্সটেনশনসহ কোনো ARM-ভিত্তিক ডিভাইস অথবা AES-NIসহ কোনো x86-ভিত্তিক ডিভাইস সরবরাহ করেন, তবে আপনার অ্যাডিয়েন্টাম ব্যবহার করা উচিত নয় । ঐ প্ল্যাটফর্মগুলোতে AES দ্রুততর।
যেসব ডিভাইসে এই AES সিপিইউ নির্দেশাবলী নেই, সেগুলিতে Adiantum খুব সামান্য পারফরম্যান্স ওভারহেডের মাধ্যমে আপনার ডিভাইসে এনক্রিপশন প্রদান করে। বেঞ্চমার্কিং সংখ্যার জন্য, Adiantum পেপারটি দেখুন। আপনার হার্ডওয়্যারে চালানোর জন্য বেঞ্চমার্কিং সোর্সের জন্য, GitHub-এ Adiantum সোর্স দেখুন।
অ্যান্ড্রয়েড ৯ বা তার উচ্চতর সংস্করণে চালিত কোনো ডিভাইসে অ্যাডিয়েন্টাম সক্রিয় করতে হলে, আপনাকে কার্নেল এবং ইউজারস্পেসে পরিবর্তন আনতে হবে।
কার্নেল পরিবর্তন
অ্যান্ড্রয়েড কমন কার্নেলের ৪.৯ ও তার পরবর্তী সংস্করণগুলো অ্যাডিয়ান্টাম সমর্থন করে।
যদি আপনার ডিভাইসের কার্নেলে আগে থেকেই Adiantum সাপোর্ট না থাকে, তাহলে নিচে তালিকাভুক্ত পরিবর্তনগুলো চেরি-পিক করুন। চেরি-পিক করতে সমস্যা হলে, ফুল-ডিস্ক এনক্রিপশন (FDE) ব্যবহারকারী ডিভাইসগুলো fscrypt: প্যাচটি বাদ দিতে পারে।
| কার্নেল সংস্করণ | ক্রিপ্টো এবং fscrypt প্যাচ | dm-crypt প্যাচ |
|---|---|---|
| ৪.১৯ | ৪.১৯ কার্নেল | dm-crypt প্যাচ |
| ৪.১৪ | ৪.১৪ কার্নেল | dm-crypt প্যাচ |
| ৪.৯ | ৪.৯ কার্নেল | dm-crypt প্যাচ |
আপনার কার্নেলে Adiantum সক্রিয় করুন।
অ্যান্ড্রয়েড ১১ এবং উচ্চতর
আপনার ডিভাইসটি যদি অ্যান্ড্রয়েড ১১ বা তার উচ্চতর সংস্করণে চালু হয়, তাহলে আপনার ডিভাইসের কার্নেল কনফিগারেশনে নিম্নলিখিত সেটিংসগুলো সক্রিয় করুন:
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
আপনার ডিভাইসটি যদি ৩২-বিট ARM কার্নেল দ্বারা চালিত হয়, তাহলে পারফরম্যান্স উন্নত করার জন্য NEON নির্দেশাবলীও সক্রিয় করুন:
CONFIG_KERNEL_MODE_NEON=y CONFIG_CRYPTO_AES_ARM=y CONFIG_CRYPTO_CHACHA20_NEON=y CONFIG_CRYPTO_NHPOLY1305_NEON=y
অ্যান্ড্রয়েড ৯ এবং ১০
আপনার ডিভাইসটি যদি অ্যান্ড্রয়েড ৯ বা ১০ দিয়ে চালু হয়, তাহলে কিছুটা ভিন্ন কার্নেল কনফিগারেশন সেটিংস প্রয়োজন হবে। নিম্নলিখিত সেটিংসগুলো সক্রিয় করুন:
CONFIG_CRYPTO_ADIANTUM=y CONFIG_DM_CRYPT=y
আপনার ডিভাইস যদি ফাইল-ভিত্তিক এনক্রিপশন ব্যবহার করে, তাহলে এটিও চালু করুন:
CONFIG_F2FS_FS_ENCRYPTION=y
অবশেষে, যদি আপনার ডিভাইসটি একটি ৩২-বিট ARM কার্নেল দ্বারা চালিত হয়, তাহলে পারফরম্যান্স উন্নত করতে NEON নির্দেশাবলী সক্রিয় করুন:
CONFIG_KERNEL_MODE_NEON=y CONFIG_CRYPTO_AES_ARM=y CONFIG_CRYPTO_CHACHA20_NEON=y CONFIG_CRYPTO_NHPOLY1305_NEON=y
ব্যবহারকারী স্থানের পরিবর্তন
যেসব ডিভাইসে অ্যান্ড্রয়েড ১০ বা তার উচ্চতর সংস্করণ চলছে, সেগুলোতে অ্যাডিয়েন্টাম ইউজারস্পেসের পরিবর্তনগুলো ইতিমধ্যেই বিদ্যমান।
অ্যান্ড্রয়েড ৯ চালিত ডিভাইসগুলোর জন্য, নিম্নলিখিত পরিবর্তনগুলো বেছে নিন:
- cryptfs: Adiantum সমর্থন যোগ করুন
- cryptfs: dm-crypt সেক্টরের আকার নির্ধারণের অনুমতি দিন
- cryptfs: dm-crypt ডিভাইসের আকারকে ক্রিপ্টো সেক্টরের সীমানায় নামিয়ে আনা
- cryptfs: dm-crypt ডিভাইস তৈরির লগিং উন্নত করা
- libfscrypt: Adiantum সমর্থন যোগ করুন
- fs_mgr_fstab: Adiantum সমর্থন যোগ করুন
আপনার ডিভাইসে Adiantum সক্রিয় করুন
প্রথমে, নিশ্চিত করুন যে আপনার ডিভাইসে PRODUCT_SHIPPING_API_LEVEL সঠিকভাবে সেট করা আছে, যা ডিভাইসটি যে অ্যান্ড্রয়েড সংস্করণে চালু হচ্ছে তার সাথে মেলে। উদাহরণস্বরূপ, অ্যান্ড্রয়েড ১১ সহ একটি ডিভাইসে PRODUCT_SHIPPING_API_LEVEL := 30 থাকতে হবে। এটি গুরুত্বপূর্ণ কারণ কিছু এনক্রিপশন সেটিংসের ডিফল্ট মান বিভিন্ন লঞ্চ সংস্করণে ভিন্ন ভিন্ন হয়।
ফাইল-ভিত্তিক এনক্রিপশন সহ ডিভাইস
আপনার ডিভাইসের অভ্যন্তরীণ স্টোরেজে Adiantum ফাইল-ভিত্তিক এনক্রিপশন সক্রিয় করতে, ডিভাইসের fstab ফাইলের userdata পার্টিশনের সারির শেষ কলামে ( fs_mgr_flags কলামে) নিম্নলিখিত অপশনটি যোগ করুন:
fileencryption=adiantum
আপনার ডিভাইসটি যদি অ্যান্ড্রয়েড ১১ বা তার উচ্চতর সংস্করণে চালু হয়, তাহলে মেটাডেটা এনক্রিপশন চালু করাও আবশ্যক। ইন্টারনাল স্টোরেজে মেটাডেটা এনক্রিপশনের জন্য অ্যাডিয়েন্টাম ব্যবহার করতে হলে, userdata জন্য fs_mgr_flags- এ নিম্নলিখিত অপশনগুলোও অবশ্যই থাকতে হবে:
metadata_encryption=adiantum,keydirectory=/metadata/vold/metadata_encryption
এরপরে, অ্যাডপ্টেবল স্টোরেজে অ্যাডিয়েন্টাম এনক্রিপশন সক্রিয় করুন। এটি করার জন্য, PRODUCT_PROPERTY_OVERRIDES এ নিম্নলিখিত সিস্টেম প্রোপার্টিগুলো সেট করুন:
অ্যান্ড্রয়েড ১১ এবং তার পরবর্তী সংস্করণগুলোর জন্য:
ro.crypto.volume.options=adiantum ro.crypto.volume.metadata.encryption=adiantum
অ্যান্ড্রয়েড ৯ এবং ১০ এর জন্য:
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 rootadb shell dmesg
যদি Adiantum সঠিকভাবে সক্রিয় করা থাকে, তাহলে আপনি কার্নেল লগে এটি দেখতে পাবেন:
fscrypt: Adiantum using implementation "adiantum(xchacha12-neon,aes-arm,nhpoly1305-neon)"
আপনি যদি মেটাডেটা এনক্রিপশন চালু করে থাকেন, তাহলে Adiantum মেটাডেটা এনক্রিপশন সঠিকভাবে চালু হয়েছে কিনা তা যাচাই করতে নিম্নলিখিত কমান্ডটিও চালান:
adb rootadb shell dmctl table userdata
The third field of the output should be 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 এ, userdata সেটের জন্য:
forceencrypt=footer
আপনার বাস্তবায়নটি কাজ করেছে কিনা তা যাচাই করতে, একটি বাগ রিপোর্ট নিন অথবা চালান:
adb rootadb shell dmesg
যদি Adiantum সঠিকভাবে সক্রিয় করা থাকে, তাহলে আপনি কার্নেল লগে এটি দেখতে পাবেন:
device-mapper: crypt: adiantum(xchacha12,aes) using implementation "adiantum(xchacha12-neon,aes-arm,nhpoly1305-neon)"