Android 7.0 এবং উচ্চতর ফাইল-ভিত্তিক এনক্রিপশন (FBE) সমর্থন করে। ফাইল-ভিত্তিক এনক্রিপশন বিভিন্ন ফাইলকে বিভিন্ন কী দিয়ে এনক্রিপ্ট করার অনুমতি দেয় যা স্বাধীনভাবে আনলক করা যায়।
এই নিবন্ধটি বর্ণনা করে যে কীভাবে নতুন ডিভাইসে ফাইল-ভিত্তিক এনক্রিপশন সক্ষম করা যায় এবং কীভাবে সিস্টেম অ্যাপগুলি ডাইরেক্ট বুট এপিআই ব্যবহার করে ব্যবহারকারীদের সর্বোত্তম, সবচেয়ে নিরাপদ অভিজ্ঞতা প্রদান করতে পারে।
Android 10 এবং উচ্চতর সংস্করণের সাথে লঞ্চ হওয়া সমস্ত ডিভাইসের ফাইল-ভিত্তিক এনক্রিপশন ব্যবহার করতে হবে।
ডাইরেক্ট বুট
ফাইল-ভিত্তিক এনক্রিপশন অ্যান্ড্রয়েড 7.0-এ প্রবর্তিত একটি নতুন বৈশিষ্ট্যকে সক্ষম করে যাকে ডাইরেক্ট বুট বলা হয়। ডাইরেক্ট বুট এনক্রিপ্ট করা ডিভাইসগুলিকে সরাসরি লক স্ক্রিনে বুট করার অনুমতি দেয়। পূর্বে, ফুল-ডিস্ক এনক্রিপশন (FDE) ব্যবহার করে এনক্রিপ্ট করা ডিভাইসে, ব্যবহারকারীদের কোনো ডেটা অ্যাক্সেস করার আগে শংসাপত্র প্রদান করতে হতো, যা ফোনটিকে সবচেয়ে মৌলিক ক্রিয়াকলাপগুলি ছাড়া অন্য সমস্ত কাজ সম্পাদন করতে বাধা দেয়। উদাহরণস্বরূপ, অ্যালার্মগুলি কাজ করতে পারেনি, অ্যাক্সেসিবিলিটি পরিষেবাগুলি অনুপলব্ধ ছিল এবং ফোনগুলি কলগুলি গ্রহণ করতে পারে না তবে শুধুমাত্র প্রাথমিক জরুরি ডায়ালার অপারেশনগুলিতে সীমাবদ্ধ ছিল৷
অ্যাপগুলিকে এনক্রিপশন সম্পর্কে সচেতন করতে ফাইল-ভিত্তিক এনক্রিপশন (FBE) এবং নতুন API প্রবর্তনের সাথে, এই অ্যাপগুলির পক্ষে সীমিত প্রেক্ষাপটে কাজ করা সম্ভব। ব্যবহারকারীদের ব্যক্তিগত ব্যবহারকারীর তথ্য রক্ষা করার সময় ব্যবহারকারীরা তাদের শংসাপত্র প্রদান করার আগে এটি ঘটতে পারে।
একটি এফবিই-সক্ষম ডিভাইসে, ডিভাইসের প্রতিটি ব্যবহারকারীর দুটি স্টোরেজ অবস্থান অ্যাপের জন্য উপলব্ধ রয়েছে:
- শংসাপত্র এনক্রিপ্টেড (CE) স্টোরেজ, যা ডিফল্ট স্টোরেজ অবস্থান এবং ব্যবহারকারী ডিভাইসটি আনলক করার পরেই উপলব্ধ।
- ডিভাইস এনক্রিপ্টেড (DE) স্টোরেজ, যা ডাইরেক্ট বুট মোডের সময় এবং ব্যবহারকারী ডিভাইসটি আনলক করার পরে উভয় ক্ষেত্রেই উপলব্ধ একটি স্টোরেজ অবস্থান।
এই বিচ্ছেদটি কাজের প্রোফাইলগুলিকে আরও সুরক্ষিত করে তোলে কারণ এটি এক সময়ে একাধিক ব্যবহারকারীকে সুরক্ষিত করার অনুমতি দেয় কারণ এনক্রিপশন আর শুধুমাত্র বুট টাইম পাসওয়ার্ডের উপর ভিত্তি করে থাকে না।
ডাইরেক্ট বুট API এনক্রিপশন-সচেতন অ্যাপগুলিকে এই প্রতিটি ক্ষেত্রে অ্যাক্সেস করার অনুমতি দেয়। লক স্ক্রিনে প্রথম শংসাপত্র প্রবেশের প্রতিক্রিয়ায় বা কাজের চ্যালেঞ্জ প্রদানের ক্ষেত্রে কাজের প্রোফাইলের ক্ষেত্রে ব্যবহারকারীর CE স্টোরেজ আনলক করা হলে অ্যাপগুলিকে বিজ্ঞপ্তি দেওয়ার প্রয়োজনীয়তা মিটমাট করার জন্য অ্যাপের লাইফসাইকেলে পরিবর্তন রয়েছে। অ্যান্ড্রয়েড 7.0 চালিত ডিভাইসগুলিকে অবশ্যই এই নতুন API এবং লাইফসাইকেলগুলিকে সমর্থন করতে হবে তা নির্বিশেষে তারা FBE প্রয়োগ করুক বা না করুক। যদিও, FBE ছাড়া, DE এবং CE স্টোরেজ সবসময় আনলক অবস্থায় থাকে।
Ext4 এবং F2FS ফাইল সিস্টেমে ফাইল-ভিত্তিক এনক্রিপশনের একটি সম্পূর্ণ বাস্তবায়ন অ্যান্ড্রয়েড ওপেন সোর্স প্রজেক্ট (AOSP) এ সরবরাহ করা হয়েছে এবং শুধুমাত্র প্রয়োজনীয়তা পূরণ করে এমন ডিভাইসগুলিতে সক্ষম করা প্রয়োজন। FBE ব্যবহার করার জন্য নির্বাচিত নির্মাতারা সিস্টেম অন চিপ (SoC) এর উপর ভিত্তি করে বৈশিষ্ট্যটি অপ্টিমাইজ করার উপায়গুলি অন্বেষণ করতে পারেন।
AOSP-এর সমস্ত প্রয়োজনীয় প্যাকেজ সরাসরি-বুট সচেতন হওয়ার জন্য আপডেট করা হয়েছে। যাইহোক, যেখানে ডিভাইস নির্মাতারা এই অ্যাপগুলির কাস্টমাইজড সংস্করণগুলি ব্যবহার করে, সেখানে তারা ন্যূনতম নিশ্চিত করতে চায় যে নিম্নলিখিত পরিষেবাগুলি প্রদান করে সরাসরি বুট সচেতন প্যাকেজ রয়েছে:
- টেলিফোনি পরিষেবা এবং ডায়ালার
- লক স্ক্রিনে পাসওয়ার্ড প্রবেশের জন্য ইনপুট পদ্ধতি
উদাহরণ এবং উৎস
Android ফাইল-ভিত্তিক এনক্রিপশনের একটি রেফারেন্স বাস্তবায়ন প্রদান করে, যেখানে vold ( system/vold ) Android এ স্টোরেজ ডিভাইস এবং ভলিউম পরিচালনার জন্য কার্যকারিতা প্রদান করে। FBE এর সংযোজন একাধিক ব্যবহারকারীর CE এবং DE কীগুলির জন্য কী ব্যবস্থাপনাকে সমর্থন করার জন্য বেশ কয়েকটি নতুন কমান্ডের সাথে ভলড প্রদান করে। কার্নেলে ফাইল-ভিত্তিক এনক্রিপশন ক্ষমতা ব্যবহার করার জন্য মূল পরিবর্তনগুলি ছাড়াও, FBE এবং ডাইরেক্ট বুট বৈশিষ্ট্য সমর্থন করার জন্য লকস্ক্রিন এবং SystemUI সহ অনেক সিস্টেম প্যাকেজ পরিবর্তন করা হয়েছে। এর মধ্যে রয়েছে:
- AOSP ডায়ালার (প্যাকেজ/অ্যাপস/ডায়ালার)
- ডেস্ক ঘড়ি (প্যাকেজ/অ্যাপস/ডেস্কক্লক)
- ল্যাটিনআইএমই (প্যাকেজ/ইনপুট পদ্ধতি/ল্যাটিনআইএমই)*
- সেটিংস অ্যাপ (প্যাকেজ/অ্যাপস/সেটিংস)*
- সিস্টেমইউআই (ফ্রেমওয়ার্ক/বেস/প্যাকেজ/সিস্টেমইউআই)*
* সিস্টেম অ্যাপ যেগুলি defaultToDeviceProtectedStorage
স্টোরেজ ম্যানিফেস্ট অ্যাট্রিবিউট ব্যবহার করে
AOSP সোর্স ট্রির ফ্রেমওয়ার্ক বা প্যাকেজ ডিরেক্টরিতে mangrep directBootAware
কমান্ড চালানোর মাধ্যমে এনক্রিপশন সচেতন অ্যাপ এবং পরিষেবাগুলির আরও উদাহরণ পাওয়া যেতে পারে।
নির্ভরতা
FBE এর AOSP বাস্তবায়ন নিরাপদে ব্যবহার করতে, একটি ডিভাইসকে নিম্নলিখিত নির্ভরতা পূরণ করতে হবে:
- Ext4 এনক্রিপশন বা F2FS এনক্রিপশনের জন্য কার্নেল সমর্থন ।
- HAL সংস্করণ 1.0 বা উচ্চতর সহ কীমাস্টার সমর্থন । Keymaster 0.3 এর জন্য কোন সমর্থন নেই কারণ এটি প্রয়োজনীয় ক্ষমতা প্রদান করে না বা এনক্রিপশন কীগুলির জন্য পর্যাপ্ত সুরক্ষা নিশ্চিত করে না।
- কীমাস্টার/ কীস্টোর এবং গেটকিপারকে অবশ্যই একটি বিশ্বস্ত এক্সিকিউশন এনভায়রনমেন্টে (TEE) প্রয়োগ করতে হবে যাতে DE কীগুলির সুরক্ষা প্রদান করা যায় যাতে একটি অননুমোদিত OS (ডিভাইসে ফ্ল্যাশ করা কাস্টম OS) কেবল DE কীগুলির জন্য অনুরোধ করতে না পারে৷
- DE কীগুলি অননুমোদিত অপারেটিং সিস্টেম দ্বারা অ্যাক্সেসযোগ্য নয় তা নিশ্চিত করার জন্য ট্রাস্টের হার্ডওয়্যার রুট এবং কীমাস্টার ইনিশিয়ালাইজেশনে আবদ্ধ যাচাই করা বুট প্রয়োজন৷
বাস্তবায়ন
প্রথম এবং সর্বাগ্রে, অ্যালার্ম ঘড়ি, ফোন এবং অ্যাক্সেসিবিলিটি বৈশিষ্ট্যগুলির মতো অ্যাপগুলিকে সরাসরি বুট বিকাশকারী ডকুমেন্টেশন অনুসারে android:directBootAware তৈরি করা উচিত৷
কার্নেল সমর্থন
Ext4 এবং F2FS এনক্রিপশনের জন্য কার্নেল সমর্থন অ্যান্ড্রয়েড সাধারণ কার্নেল, 3.18 এবং উচ্চতর সংস্করণে উপলব্ধ। এটি একটি কার্নেলে সক্ষম করতে যা সংস্করণ 5.1 বা উচ্চতর, ব্যবহার করুন:
CONFIG_FS_ENCRYPTION=y
পুরানো কার্নেলের জন্য, CONFIG_EXT4_ENCRYPTION=y
ব্যবহার করুন যদি আপনার ডিভাইসের userdata
ফাইল সিস্টেম Ext4 হয়, অথবা CONFIG_F2FS_FS_ENCRYPTION=y
ব্যবহার করুন যদি আপনার ডিভাইসের userdata
ফাইল সিস্টেম F2FS হয়।
যদি আপনার ডিভাইস গ্রহণযোগ্য সঞ্চয়স্থান সমর্থন করে বা অভ্যন্তরীণ সঞ্চয়স্থানে মেটাডেটা এনক্রিপশন ব্যবহার করে, মেটাডেটা এনক্রিপশন ডকুমেন্টেশনে বর্ণিত মেটাডেটা এনক্রিপশনের জন্য প্রয়োজনীয় কার্নেল কনফিগারেশন বিকল্পগুলিও সক্ষম করুন।
Ext4 বা F2FS এনক্রিপশনের জন্য কার্যকরী সমর্থন ছাড়াও, ডিভাইস নির্মাতাদের ফাইল-ভিত্তিক এনক্রিপশনকে গতি বাড়ানো এবং ব্যবহারকারীর অভিজ্ঞতা উন্নত করতে ক্রিপ্টোগ্রাফিক ত্বরণ সক্ষম করা উচিত। উদাহরণস্বরূপ, ARM64-ভিত্তিক ডিভাইসগুলিতে, ARMv8 CE (ক্রিপ্টোগ্রাফি এক্সটেনশন) ত্বরণ নিম্নলিখিত কার্নেল কনফিগারেশন বিকল্পগুলি সেট করে সক্রিয় করা যেতে পারে:
CONFIG_CRYPTO_AES_ARM64_CE_BLK=y CONFIG_CRYPTO_SHA2_ARM64_CE=y
কর্মক্ষমতা আরও উন্নত করতে এবং পাওয়ার ব্যবহার কমাতে, ডিভাইস নির্মাতারা ইনলাইন এনক্রিপশন হার্ডওয়্যার প্রয়োগ করার কথাও বিবেচনা করতে পারে, যা স্টোরেজ ডিভাইসে/থেকে যাওয়ার পথে ডেটা এনক্রিপ্ট/ডিক্রিপ্ট করে। অ্যান্ড্রয়েড সাধারণ কার্নেলগুলিতে (সংস্করণ 4.14 এবং উচ্চতর) একটি কাঠামো রয়েছে যা হার্ডওয়্যার এবং বিক্রেতা ড্রাইভার সমর্থন উপলব্ধ থাকলে ইনলাইন এনক্রিপশন ব্যবহার করার অনুমতি দেয়। ইনলাইন এনক্রিপশন ফ্রেমওয়ার্ক নিম্নলিখিত কার্নেল কনফিগারেশন বিকল্পগুলি সেট করে সক্রিয় করা যেতে পারে:
CONFIG_BLK_INLINE_ENCRYPTION=y CONFIG_FS_ENCRYPTION=y CONFIG_FS_ENCRYPTION_INLINE_CRYPT=y
যদি আপনার ডিভাইস UFS-ভিত্তিক স্টোরেজ ব্যবহার করে, এছাড়াও সক্ষম করুন:
CONFIG_SCSI_UFS_CRYPTO=y
যদি আপনার ডিভাইস eMMC-ভিত্তিক স্টোরেজ ব্যবহার করে, এছাড়াও সক্ষম করুন:
CONFIG_MMC_CRYPTO=y
ফাইল-ভিত্তিক এনক্রিপশন সক্ষম করুন
একটি ডিভাইসে FBE সক্ষম করার জন্য এটি অভ্যন্তরীণ সঞ্চয়স্থানে সক্রিয় করা প্রয়োজন ( userdata
)। এটি স্বয়ংক্রিয়ভাবে গ্রহণযোগ্য সঞ্চয়স্থানে FBE সক্ষম করে; যাইহোক, প্রয়োজনে গ্রহণযোগ্য স্টোরেজের এনক্রিপশন বিন্যাস ওভাররাইড করা যেতে পারে।
অভ্যন্তরীণ স্টোরেজ
userdata
জন্য fstab
লাইনের fs_mgr_flags কলামে fileencryption=contents_encryption_mode[:filenames_encryption_mode[:flags]]
বিকল্পটি যোগ করে FBE সক্রিয় করা হয়েছে। এই বিকল্পটি অভ্যন্তরীণ সঞ্চয়স্থানে এনক্রিপশন বিন্যাস সংজ্ঞায়িত করে। এতে তিনটি পর্যন্ত কোলন-বিচ্ছিন্ন পরামিতি রয়েছে:
-
contents_encryption_mode
প্যারামিটার ফাইলের বিষয়বস্তু এনক্রিপ্ট করতে কোন ক্রিপ্টোগ্রাফিক অ্যালগরিদম ব্যবহার করা হয় তা নির্ধারণ করে। এটি হয়aes-256-xts
বাadiantum
হতে পারে। অ্যান্ড্রয়েড 11 থেকে এটি ডিফল্ট অ্যালগরিদম নির্দিষ্ট করতেও খালি রাখা যেতে পারে, যাaes-256-xts
। -
filenames_encryption_mode
প্যারামিটার সংজ্ঞায়িত করে কোন ক্রিপ্টোগ্রাফিক অ্যালগরিদম ফাইলের নাম এনক্রিপ্ট করতে ব্যবহৃত হয়। এটি হয়aes-256-cts
,aes-256-heh
,adiantum
, অথবাaes-256-hctr2
হতে পারে। নির্দিষ্ট করা না থাকলে,contents_encryption_mode
aes-256-cts
হলে এটি ডিফল্ট হয়aes-256-xts
cts, অথবা যদিcontents_encryption_mode
adiantum
হয়adiantum
-
flags
প্যারামিটার, Android 11-এ নতুন,+
অক্ষর দ্বারা পৃথক করা পতাকার একটি তালিকা। নিম্নলিখিত পতাকা সমর্থিত:-
v1
পতাকা সংস্করণ 1 এনক্রিপশন নীতি নির্বাচন করে;v2
পতাকা সংস্করণ 2 এনক্রিপশন নীতি নির্বাচন করে। সংস্করণ 2 এনক্রিপশন নীতিগুলি আরও নিরাপদ এবং নমনীয় কী ডেরিভেশন ফাংশন ব্যবহার করে। ডিভাইসটি Android 11 বা উচ্চতর সংস্করণে চালু হলে ডিফল্ট v2 (ro.product.first_api_level
এর দ্বারা নির্ধারিত), অথবা ডিভাইসটি Android 10 বা তার নিম্ন সংস্করণে চালু হলে v1। -
inlinecrypt_optimized
পতাকা একটি এনক্রিপশন বিন্যাস নির্বাচন করে যা ইনলাইন এনক্রিপশন হার্ডওয়্যারের জন্য অপ্টিমাইজ করা হয় যা দক্ষতার সাথে বড় সংখ্যক কী পরিচালনা করে না। এটি প্রতি ফাইলে একটির পরিবর্তে শুধুমাত্র একটি ফাইলের বিষয়বস্তু এনক্রিপশন কী প্রতি CE বা DE কী প্রাপ্ত করে এটি করে। IV-এর প্রজন্ম (ইনিশিয়ালাইজেশন ভেক্টর) সেই অনুযায়ী সামঞ্জস্য করা হয়। -
emmc_optimized
পতাকাinlinecrypt_optimized
এর অনুরূপ, তবে এটি একটি IV প্রজন্মের পদ্ধতিও নির্বাচন করে যা IV-কে 32 বিটের মধ্যে সীমাবদ্ধ করে। এই পতাকাটি শুধুমাত্র ইনলাইন এনক্রিপশন হার্ডওয়্যারে ব্যবহার করা উচিত যা JEDEC eMMC v5.2 স্পেসিফিকেশনের সাথে সঙ্গতিপূর্ণ এবং তাই শুধুমাত্র 32-বিট IV সমর্থন করে। অন্যান্য ইনলাইন এনক্রিপশন হার্ডওয়্যারে, পরিবর্তেinlinecrypt_optimized
ব্যবহার করুন। এই পতাকা UFS-ভিত্তিক স্টোরেজে ব্যবহার করা উচিত নয়; UFS স্পেসিফিকেশন 64-বিট IV ব্যবহার করার অনুমতি দেয়। - যে ডিভাইসগুলিতে হার্ডওয়্যার-র্যাপড কী সমর্থন করে,
wrappedkey_v0
পতাকা FBE-এর জন্য হার্ডওয়্যার-র্যাপড কী ব্যবহার করতে সক্ষম করে। এটি শুধুমাত্রinlinecrypt
মাউন্ট বিকল্পের সাথে এবং হয়inlinecrypt_optimized
বাemmc_optimized
পতাকার সাথে ব্যবহার করা যেতে পারে। - ফাইল সিস্টেম ব্লকের আকার 4096 বাইট না হলেও
dusize_4k
পতাকা এনক্রিপশন ডেটা ইউনিটের আকার 4096 বাইট হতে বাধ্য করে। এনক্রিপশন ডেটা ইউনিটের আকার হল ফাইল সামগ্রী এনক্রিপশনের গ্রানুলারিটি। এই পতাকাটি অ্যান্ড্রয়েড 15 থেকে উপলব্ধ। এই পতাকাটি শুধুমাত্র ইনলাইন এনক্রিপশন হার্ডওয়্যারের ব্যবহার সক্ষম করতে ব্যবহার করা উচিত যা 4096 বাইটের চেয়ে বড় ডেটা ইউনিট সমর্থন করে না, এমন একটি ডিভাইসে যা 4096 বাইটের চেয়ে বড় পৃষ্ঠার আকার ব্যবহার করে এবং f2fs ব্যবহার করে ফাইল সিস্টেম
-
আপনি যদি ইনলাইন এনক্রিপশন হার্ডওয়্যার ব্যবহার না করেন তবে বেশিরভাগ ডিভাইসের জন্য প্রস্তাবিত সেটিং হল fileencryption=aes-256-xts
। আপনি যদি ইনলাইন এনক্রিপশন হার্ডওয়্যার ব্যবহার করেন তবে বেশিরভাগ ডিভাইসের জন্য প্রস্তাবিত সেটিং হল fileencryption=aes-256-xts:aes-256-cts:inlinecrypt_optimized
(বা সমানভাবে fileencryption=::inlinecrypt_optimized
)। AES ত্বরণের কোনো প্রকার ছাড়াই ডিভাইসে, fileencryption=adiantum
সেট করে AES এর পরিবর্তে Adiantum ব্যবহার করা যেতে পারে।
Android 14 থেকে, AES-HCTR2 হল ত্বরিত ক্রিপ্টোগ্রাফি নির্দেশাবলী সহ ডিভাইসগুলির জন্য ফাইলের নাম এনক্রিপশনের পছন্দের মোড। যাইহোক, শুধুমাত্র নতুন Android কার্নেল AES-HCTR2 সমর্থন করে। ভবিষ্যতের অ্যান্ড্রয়েড রিলিজে, এটি ফাইলের নাম এনক্রিপশনের জন্য ডিফল্ট মোড হওয়ার পরিকল্পনা করা হয়েছে। যদি আপনার কার্নেলে AES-HCTR2 সমর্থন থাকে, তাহলে ফাইলের নাম এনক্রিপশনের জন্য filenames_encryption_mode
aes-256-hctr2
সেট করে এটি সক্রিয় করা যেতে পারে। সহজ ক্ষেত্রে এটি fileencryption=aes-256-xts:aes-256-hctr2
দিয়ে করা হবে।
যে ডিভাইসগুলি Android 10 বা তার কম সংস্করণের সাথে চালু হয়েছে, সেখানে FSCRYPT_MODE_PRIVATE
ফাইল সামগ্রী এনক্রিপশন মোডের ব্যবহার নির্দিষ্ট করার জন্য fileencryption=ice
ও গৃহীত হয়। এই মোডটি অ্যান্ড্রয়েড সাধারণ কার্নেল দ্বারা অবাস্তব, তবে এটি কাস্টম কার্নেল প্যাচ ব্যবহার করে বিক্রেতাদের দ্বারা প্রয়োগ করা যেতে পারে। এই মোড দ্বারা উত্পাদিত অন-ডিস্ক বিন্যাসটি বিক্রেতা-নির্দিষ্ট ছিল। Android 11 বা উচ্চতর সংস্করণের সাথে লঞ্চ হওয়া ডিভাইসগুলিতে, এই মোডটি আর অনুমোদিত নয় এবং এর পরিবর্তে একটি আদর্শ এনক্রিপশন বিন্যাস ব্যবহার করতে হবে।
ডিফল্টরূপে, লিনাক্স কার্নেলের ক্রিপ্টোগ্রাফি API ব্যবহার করে ফাইলের বিষয়বস্তু এনক্রিপশন করা হয়। আপনি যদি পরিবর্তে ইনলাইন এনক্রিপশন হার্ডওয়্যার ব্যবহার করতে চান তবে inlinecrypt
মাউন্ট বিকল্পটিও যোগ করুন। উদাহরণস্বরূপ, একটি সম্পূর্ণ fstab
লাইন এর মতো দেখতে পারে:
/dev/block/by-name/userdata /data f2fs nodev,noatime,nosuid,errors=panic,inlinecrypt wait,fileencryption=aes-256-xts:aes-256-cts:inlinecrypt_optimized
গ্রহণযোগ্য স্টোরেজ
Android 9 থেকে, FBE এবং গ্রহণযোগ্য স্টোরেজ একসাথে ব্যবহার করা যেতে পারে।
userdata
জন্য fileencryption
fstab বিকল্পটি নির্দিষ্ট করা স্বয়ংক্রিয়ভাবে FBE এবং মেটাডেটা এনক্রিপশন উভয়ই গ্রহণযোগ্য সঞ্চয়স্থানে সক্ষম করে। যাইহোক, আপনি PRODUCT_PROPERTY_OVERRIDES
এ বৈশিষ্ট্য সেট করে গ্রহণযোগ্য সঞ্চয়স্থানে FBE বা মেটাডেটা এনক্রিপশন ফর্ম্যাটগুলিকে ওভাররাইড করতে পারেন।
অ্যান্ড্রয়েড 11 বা উচ্চতর সংস্করণের সাথে চালু হওয়া ডিভাইসগুলিতে নিম্নলিখিত বৈশিষ্ট্যগুলি ব্যবহার করুন:
-
ro.crypto.volume.options
(Android 11-এ নতুন) গ্রহণযোগ্য সঞ্চয়স্থানে FBE এনক্রিপশন বিন্যাস নির্বাচন করে।fileencryption
fstab বিকল্পের আর্গুমেন্টের মতো এটিতে একই সিনট্যাক্স রয়েছে এবং এটি একই ডিফল্ট ব্যবহার করে। এখানে কী ব্যবহার করতে হবে তার জন্য উপরেfileencryption
জন্য সুপারিশগুলি দেখুন। -
ro.crypto.volume.metadata.encryption
গ্রহণযোগ্য সঞ্চয়স্থানে মেটাডেটা এনক্রিপশন বিন্যাস নির্বাচন করে। মেটাডেটা এনক্রিপশন ডকুমেন্টেশন দেখুন।
অ্যান্ড্রয়েড 10 বা তার কম সংস্করণের সাথে চালু হওয়া ডিভাইসগুলিতে নিম্নলিখিত বৈশিষ্ট্যগুলি ব্যবহার করুন:
-
ro.crypto.volume.contents_mode
বিষয়বস্তু এনক্রিপশন মোড নির্বাচন করে। এটিro.crypto.volume.options
এর প্রথম কোলন-বিচ্ছিন্ন ক্ষেত্রের সমতুল্য। -
ro.crypto.volume.filenames_mode
ফাইলের নাম এনক্রিপশন মোড নির্বাচন করে। এটিro.crypto.volume.options
এর দ্বিতীয় কোলন-বিচ্ছিন্ন ক্ষেত্রের সমতুল্য, ব্যতীত যে ডিভাইসগুলি Android 10 বা তার নিচের সাথে চালু হয়েছে তাদের ডিফল্ট হলaes-256-heh
। বেশিরভাগ ডিভাইসে, এটিকে স্পষ্টভাবেaes-256-cts
এ ওভাররাইড করতে হবে। -
ro.crypto.fde_algorithm
এবংro.crypto.fde_sector_size
গ্রহণযোগ্য সঞ্চয়স্থানে মেটাডেটা এনক্রিপশন বিন্যাস নির্বাচন করুন। মেটাডেটা এনক্রিপশন ডকুমেন্টেশন দেখুন।
কীমাস্টারের সাথে একীভূত করুন
early_hal
ক্লাসের অংশ হিসাবে কীমাস্টার HAL শুরু করা উচিত। এর কারণ হল FBE-এর প্রয়োজন যে Keymaster-এর post-fs-data
বুট পর্বের অনুরোধগুলি পরিচালনা করার জন্য প্রস্তুত থাকতে হবে, যখন vold
প্রাথমিক কীগুলি সেট আপ করে।
ডিরেক্টরি বাদ দিন
init
/data
র সমস্ত শীর্ষ-স্তরের ডিরেক্টরিতে সিস্টেম DE কী প্রয়োগ করে, এনক্রিপ্ট করা আবশ্যক ডিরেক্টরিগুলি ব্যতীত যেমন যে ডিরেক্টরিতে সিস্টেম DE কী রয়েছে এবং ব্যবহারকারীর CE বা DE ডিরেক্টরি রয়েছে এমন ডিরেক্টরিগুলি। এনক্রিপশন কীগুলি পুনরাবৃত্তিমূলকভাবে প্রযোজ্য এবং সাবডিরেক্টরি দ্বারা ওভাররাইড করা যায় না।
অ্যান্ড্রয়েড 11 এবং উচ্চতর ক্ষেত্রে, init
যে কী ডিরেক্টরিতে প্রযোজ্য তা init স্ক্রিপ্টে mkdir
কমান্ডের encryption=<action>
আর্গুমেন্ট দ্বারা নিয়ন্ত্রিত হতে পারে। <action>
এর সম্ভাব্য মানগুলি Android init ভাষার জন্য README- এ নথিভুক্ত করা হয়েছে।
অ্যান্ড্রয়েড 10-এ, init
এনক্রিপশন অ্যাকশনগুলি নিম্নলিখিত অবস্থানে হার্ডকোড করা হয়েছিল:
/system/extras/libfscrypt/fscrypt_init_extensions.cpp
অ্যান্ড্রয়েড 9 এবং তার আগে, অবস্থানটি ছিল:
/system/extras/ext4_utils/ext4_crypt_init_extensions.cpp
কিছু নির্দিষ্ট ডিরেক্টরিকে এনক্রিপ্ট করা থেকে বিরত রাখতে ব্যতিক্রম যোগ করা সম্ভব। যদি এই ধরণের পরিবর্তন করা হয় তবে ডিভাইস প্রস্তুতকারকের SELinux নীতিগুলি অন্তর্ভুক্ত করা উচিত যা শুধুমাত্র সেই অ্যাপগুলিতে অ্যাক্সেস দেয় যা এনক্রিপ্ট করা ডিরেক্টরি ব্যবহার করতে হবে। এটি সমস্ত অবিশ্বস্ত অ্যাপগুলিকে বাদ দেওয়া উচিত৷
এর জন্য একমাত্র পরিচিত গ্রহণযোগ্য ব্যবহারের ক্ষেত্রে উত্তরাধিকারী OTA ক্ষমতার সমর্থনে।
সিস্টেম অ্যাপে সরাসরি বুট সমর্থন করে
অ্যাপগুলিকে সরাসরি বুট সচেতন করুন
সিস্টেম অ্যাপ্লিকেশানগুলির দ্রুত স্থানান্তর করার সুবিধার্থে, দুটি নতুন বৈশিষ্ট্য রয়েছে যা অ্যাপ স্তরে সেট করা যেতে পারে৷ defaultToDeviceProtectedStorage
অ্যাট্রিবিউট শুধুমাত্র সিস্টেম অ্যাপে উপলব্ধ। directBootAware
বৈশিষ্ট্য সবার জন্য উপলব্ধ।
<application android:directBootAware="true" android:defaultToDeviceProtectedStorage="true">
অ্যাপ স্তরে directBootAware
অ্যাট্রিবিউট হল অ্যাপের সমস্ত উপাদানকে এনক্রিপশন সচেতন হিসাবে চিহ্নিত করার জন্য সংক্ষিপ্ত বিবরণ।
defaultToDeviceProtectedStorage
অ্যাট্রিবিউট ডিফল্ট অ্যাপ স্টোরেজ লোকেশনকে CE স্টোরেজের দিকে নির্দেশ করার পরিবর্তে DE স্টোরেজের দিকে নির্দেশ করে। এই পতাকা ব্যবহার করে সিস্টেম অ্যাপগুলিকে অবশ্যই ডিফল্ট অবস্থানে সঞ্চিত সমস্ত ডেটা সাবধানে অডিট করতে হবে এবং CE স্টোরেজ ব্যবহার করার জন্য সংবেদনশীল ডেটার পথ পরিবর্তন করতে হবে৷ এই বিকল্পটি ব্যবহার করে ডিভাইস প্রস্তুতকারকদের সতর্কতার সাথে তাদের সংরক্ষণ করা ডেটা পরিদর্শন করা উচিত যাতে এটিতে কোনও ব্যক্তিগত তথ্য নেই।
এই মোডে চলাকালীন, নিম্নলিখিত সিস্টেম APIগুলি প্রয়োজনের সময় CE স্টোরেজ দ্বারা সমর্থিত একটি প্রসঙ্গকে স্পষ্টভাবে পরিচালনা করার জন্য উপলব্ধ, যা তাদের ডিভাইস সুরক্ষিত প্রতিরূপের সমতুল্য।
-
Context.createCredentialProtectedStorageContext()
-
Context.isCredentialProtectedStorage()
একাধিক ব্যবহারকারী সমর্থন
একটি বহু-ব্যবহারকারী পরিবেশে প্রতিটি ব্যবহারকারী একটি পৃথক এনক্রিপশন কী পায়। প্রতিটি ব্যবহারকারী দুটি কী পায়: একটি DE এবং একটি CE কী৷ ব্যবহারকারী 0 কে প্রথমে ডিভাইসে লগ ইন করতে হবে কারণ এটি একটি বিশেষ ব্যবহারকারী। এটি ডিভাইস প্রশাসনের ব্যবহারের জন্য প্রাসঙ্গিক।
ক্রিপ্টো-সচেতন অ্যাপ্লিকেশানগুলি এই পদ্ধতিতে ব্যবহারকারীদের সাথে ইন্টারঅ্যাক্ট করে: INTERACT_ACROSS_USERS
এবং INTERACT_ACROSS_USERS_FULL
একটি অ্যাপকে ডিভাইসের সমস্ত ব্যবহারকারী জুড়ে কাজ করার অনুমতি দেয়৷ যাইহোক, এই অ্যাপগুলি ইতিমধ্যেই আনলক করা ব্যবহারকারীদের জন্য শুধুমাত্র CE-এনক্রিপ্ট করা ডিরেক্টরি অ্যাক্সেস করতে পারে।
একটি অ্যাপ DE এলাকা জুড়ে অবাধে ইন্টারঅ্যাক্ট করতে সক্ষম হতে পারে, কিন্তু একজন ব্যবহারকারী আনলক করার অর্থ এই নয় যে ডিভাইসের সমস্ত ব্যবহারকারী আনলক করা হয়েছে। এই এলাকায় অ্যাক্সেস করার চেষ্টা করার আগে অ্যাপটির এই স্থিতি পরীক্ষা করা উচিত।
প্রতিটি কাজের প্রোফাইল ব্যবহারকারী আইডি দুটি কী পায়: DE এবং CE৷ কাজের চ্যালেঞ্জ পূরণ হলে, প্রোফাইল ব্যবহারকারীকে আনলক করা হয় এবং কীমাস্টার (টিইই-তে) প্রোফাইলের টিইই কী প্রদান করতে পারেন।
আপডেট হ্যান্ডেল
রিকভারি পার্টিশন ইউজারডেটা পার্টিশনে ডি-সুরক্ষিত স্টোরেজ অ্যাক্সেস করতে অক্ষম। FBE বাস্তবায়নকারী ডিভাইসগুলিকে A/B সিস্টেম আপডেট ব্যবহার করে OTA সমর্থন করার জন্য দৃঢ়ভাবে সুপারিশ করা হয়। যেহেতু OTA স্বাভাবিক অপারেশনের সময় প্রয়োগ করা যেতে পারে এনক্রিপ্ট করা ড্রাইভে ডেটা অ্যাক্সেস করার জন্য পুনরুদ্ধারের প্রয়োজন নেই।
একটি লিগ্যাসি OTA সমাধান ব্যবহার করার সময়, যার জন্য userdata
পার্টিশনে OTA ফাইল অ্যাক্সেস করার জন্য পুনরুদ্ধারের প্রয়োজন হয়:
-
userdata
পার্টিশনে একটি শীর্ষ-স্তরের ডিরেক্টরি (উদাহরণস্বরূপmisc_ne
) তৈরি করুন। - এই শীর্ষ-স্তরের ডিরেক্টরিটিকে এনক্রিপ্ট না করার জন্য কনফিগার করুন ( ডিরেক্টরিগুলি বাদ দেওয়া দেখুন)।
- OTA প্যাকেজগুলি ধরে রাখতে শীর্ষ-স্তরের ডিরেক্টরির মধ্যে একটি ডিরেক্টরি তৈরি করুন।
- এই ডিরেক্টরি এবং এর বিষয়বস্তুতে অ্যাক্সেস নিয়ন্ত্রণ করতে একটি SELinux নিয়ম এবং ফাইলের প্রসঙ্গ যোগ করুন। শুধুমাত্র OTA আপডেট প্রাপ্ত প্রক্রিয়া বা অ্যাপগুলি এই ডিরেক্টরিতে পড়তে এবং লিখতে সক্ষম হবে। এই ডিরেক্টরিতে অন্য কোনো অ্যাপ বা প্রক্রিয়ার অ্যাক্সেস থাকা উচিত নয়।
বৈধতা
বৈশিষ্ট্যটির বাস্তবায়িত সংস্করণটি উদ্দেশ্য অনুযায়ী কাজ করে তা নিশ্চিত করতে, প্রথমে অনেকগুলি CTS এনক্রিপশন পরীক্ষা চালান, যেমন DirectBootHostTest এবং EncryptionTest ।
ডিভাইসটি যদি Android 11 বা উচ্চতর ভার্সন চালায়, তাহলে vts_kernel_encryption_test ও চালান:
atest vts_kernel_encryption_test
বা:
vts-tradefed run vts -m vts_kernel_encryption_test
উপরন্তু, ডিভাইস নির্মাতারা নিম্নলিখিত ম্যানুয়াল পরীক্ষা করতে পারেন। FBE সক্ষম একটি ডিভাইসে:
-
ro.crypto.state
আছে কিনা চেক করুন-
ro.crypto.state
এনক্রিপ্ট করা আছে তা নিশ্চিত করুন
-
-
ro.crypto.type
আছে কিনা চেক করুন- নিশ্চিত করুন
ro.crypto.type
file
সেট করা আছে
- নিশ্চিত করুন
অতিরিক্তভাবে, বুট হওয়ার পর প্রথমবার ডিভাইসটি আনলক হওয়ার আগে পরীক্ষকরা যাচাই করতে পারেন যে CE স্টোরেজ লক করা হয়েছে। এটি করার জন্য, একটি userdebug
বা eng
বিল্ড ব্যবহার করুন, একটি PIN, প্যাটার্ন, বা মূল ব্যবহারকারীর পাসওয়ার্ড সেট করুন এবং ডিভাইসটি পুনরায় বুট করুন৷ ডিভাইসটি আনলক করার আগে, প্রধান ব্যবহারকারীর সিই স্টোরেজ পরীক্ষা করতে নিম্নলিখিত কমান্ডটি চালান। যদি ডিভাইসটি হেডলেস সিস্টেম ইউজার মোড (অধিকাংশ স্বয়ংচালিত ডিভাইস) ব্যবহার করে, তবে প্রধান ব্যবহারকারী 10 ব্যবহারকারী, তাই চালান:
adb root; adb shell ls /data/user/10
অন্যান্য ডিভাইসে (অধিকাংশ অ-অটোমোটিভ ডিভাইস), প্রধান ব্যবহারকারী হল ব্যবহারকারী 0, তাই চালান:
adb root; adb shell ls /data/user/0
যাচাই করুন যে তালিকাভুক্ত ফাইলের নামগুলি Base64-এনকোডেড, ইঙ্গিত করে যে ফাইলের নামগুলি এনক্রিপ্ট করা হয়েছে এবং সেগুলিকে ডিক্রিপ্ট করার কী এখনও উপলব্ধ নেই৷ যদি ফাইলের নামগুলি প্লেইনটেক্সটে তালিকাভুক্ত করা হয় তবে কিছু ভুল আছে।
ডিভাইস নির্মাতারা তাদের ডিভাইস বা কার্নেলে fscrypt-এর জন্য আপস্ট্রিম লিনাক্স পরীক্ষা চালানোর জন্যও উত্সাহিত করা হয়। এই পরীক্ষাগুলি xfstests ফাইল সিস্টেম টেস্ট স্যুটের অংশ। যাইহোক, এই আপস্ট্রিম পরীক্ষাগুলি আনুষ্ঠানিকভাবে Android দ্বারা সমর্থিত নয়।
AOSP বাস্তবায়নের বিবরণ
এই বিভাগটি AOSP বাস্তবায়নের বিশদ প্রদান করে এবং কীভাবে ফাইল-ভিত্তিক এনক্রিপশন কাজ করে তা বর্ণনা করে। ডিভাইস নির্মাতাদের তাদের ডিভাইসে FBE এবং ডাইরেক্ট বুট ব্যবহার করার জন্য এখানে কোনো পরিবর্তন করার প্রয়োজন হবে না।
fscrypt এনক্রিপশন
AOSP বাস্তবায়ন কার্নেলে "fscrypt" এনক্রিপশন (ext4 এবং f2fs দ্বারা সমর্থিত) ব্যবহার করে এবং সাধারণত এতে কনফিগার করা হয়:
- XTS মোডে AES-256 দিয়ে ফাইলের বিষয়বস্তু এনক্রিপ্ট করুন
- CBC-CTS মোডে AES-256 দিয়ে ফাইলের নাম এনক্রিপ্ট করুন
অ্যাডিয়েন্টাম এনক্রিপশনও সমর্থিত। যখন Adiantum এনক্রিপশন সক্ষম করা হয়, তখন ফাইলের বিষয়বস্তু এবং ফাইলের নাম উভয় Adiantum এর সাথে এনক্রিপ্ট করা হয়।
fscrypt এনক্রিপশন নীতির দুটি সংস্করণ সমর্থন করে: সংস্করণ 1 এবং সংস্করণ 2। সংস্করণ 1 অবহেলিত হয়েছে, এবং Android 11 এবং উচ্চতর সংস্করণের সাথে চালু হওয়া ডিভাইসগুলির জন্য CDD প্রয়োজনীয়তাগুলি শুধুমাত্র সংস্করণ 2 এর সাথে সামঞ্জস্যপূর্ণ। সংস্করণ 2 এনক্রিপশন নীতিগুলি প্রকৃত প্রাপ্ত করতে HKDF-SHA512 ব্যবহার করে ইউজারস্পেস-সাপ্লাইড কী থেকে এনক্রিপশন কী।
fscrypt সম্পর্কে আরও তথ্যের জন্য, আপস্ট্রিম কার্নেল ডকুমেন্টেশন দেখুন।
স্টোরেজ ক্লাস
নিম্নলিখিত সারণী FBE কী এবং তারা যে ডিরেক্টরিগুলিকে আরও বিশদে সুরক্ষিত রাখে তা তালিকাভুক্ত করে:
স্টোরেজ ক্লাস | বর্ণনা | ডিরেক্টরি |
---|---|---|
এনক্রিপ্ট করা হয়নি | /data থাকা ডিরেক্টরিগুলি যেগুলি FBE দ্বারা সুরক্ষিত হতে পারে না বা প্রয়োজন নেই৷ মেটাডেটা এনক্রিপশন ব্যবহার করে এমন ডিভাইসগুলিতে, এই ডিরেক্টরিগুলি সত্যিই এনক্রিপ্ট করা হয় না বরং মেটাডেটা এনক্রিপশন কী দ্বারা সুরক্ষিত থাকে যা সিস্টেম DE-এর সমতুল্য। |
|
সিস্টেম DE | ডিভাইস-এনক্রিপ্ট করা ডেটা একটি নির্দিষ্ট ব্যবহারকারীর সাথে আবদ্ধ নয় |
|
প্রতি বুট | ক্ষণস্থায়ী সিস্টেম ফাইল যেগুলিকে রিবুট করার প্রয়োজন নেই | /data/per_boot |
ব্যবহারকারী সিই (অভ্যন্তরীণ) | অভ্যন্তরীণ সঞ্চয়স্থানে প্রতি-ব্যবহারকারীর শংসাপত্র-এনক্রিপ্ট করা ডেটা |
|
ব্যবহারকারী DE (অভ্যন্তরীণ) | অভ্যন্তরীণ সঞ্চয়স্থানে প্রতি ব্যবহারকারী ডিভাইস-এনক্রিপ্ট করা ডেটা |
|
ব্যবহারকারী সিই (গ্রহণযোগ্য) | গ্রহণযোগ্য সঞ্চয়স্থানে প্রতি-ব্যবহারকারীর শংসাপত্র-এনক্রিপ্ট করা ডেটা |
|
ব্যবহারকারী DE (গ্রহণযোগ্য) | গ্রহণযোগ্য সঞ্চয়স্থানে প্রতি-ব্যবহারকারী ডিভাইস-এনক্রিপ্ট করা ডেটা |
|
কী স্টোরেজ এবং সুরক্ষা
সমস্ত FBE কী vold
দ্বারা পরিচালিত হয় এবং এনক্রিপ্টেড অন-ডিস্কে সংরক্ষণ করা হয়, প্রতি-বুট কী ব্যতীত যা মোটেও সংরক্ষণ করা হয় না। নিম্নলিখিত সারণীতে বিভিন্ন FBE কী সংরক্ষণ করা হয় এমন অবস্থানগুলির তালিকা রয়েছে:
কী প্রকার | মূল অবস্থান | মূল অবস্থানের স্টোরেজ ক্লাস |
---|---|---|
সিস্টেম DE কী | /data/unencrypted | এনক্রিপ্ট করা হয়নি |
ব্যবহারকারী সিই (অভ্যন্তরীণ) কী | /data/misc/vold/user_keys/ce/${user_id} | সিস্টেম DE |
ব্যবহারকারী DE (অভ্যন্তরীণ) কী | /data/misc/vold/user_keys/de/${user_id} | সিস্টেম DE |
ব্যবহারকারী সিই (অধিগ্রহণযোগ্য) কী | /data/misc_ce/${user_id}/vold/volume_keys/${volume_uuid} | ব্যবহারকারী সিই (অভ্যন্তরীণ) |
ব্যবহারকারী DE (গ্রহণযোগ্য) কী | /data/misc_de/${user_id}/vold/volume_keys/${volume_uuid} | ব্যবহারকারী DE (অভ্যন্তরীণ) |
পূর্ববর্তী সারণীতে দেখানো হয়েছে, বেশিরভাগ FBE কী অন্য FBE কী দ্বারা এনক্রিপ্ট করা ডিরেক্টরিতে সংরক্ষণ করা হয়। কীগুলিকে আনলক করা যাবে না যতক্ষণ না স্টোরেজ ক্লাসে সেগুলি রয়েছে তা আনলক করা হয়েছে৷
vold
সমস্ত FBE কীগুলিতে এনক্রিপশনের একটি স্তর প্রয়োগ করে। অভ্যন্তরীণ স্টোরেজের জন্য CE কীগুলি ছাড়াও প্রতিটি কী AES-256-GCM এর সাথে এনক্রিপ্ট করা হয়েছে নিজস্ব কীস্টোর কী ব্যবহার করে যা TEE এর বাইরে প্রকাশ করা হয় না। এটি নিশ্চিত করে যে FBE কীগুলিকে আনলক করা যাবে না যদি না একটি বিশ্বস্ত অপারেটিং সিস্টেম বুট না হয়, যেমনটি Verified Boot দ্বারা প্রয়োগ করা হয়েছে। কীস্টোর কী-তেও রোলব্যাক প্রতিরোধের অনুরোধ করা হয়েছে, যা FBE কীগুলিকে নিরাপদে মুছে ফেলার অনুমতি দেয় ডিভাইসগুলিতে যেখানে কীমাস্টার রোলব্যাক প্রতিরোধকে সমর্থন করে। রোলব্যাক রেজিস্ট্যান্স অনুপলব্ধ হলে সর্বোত্তম প্রচেষ্টার ফলব্যাক হিসাবে, কী-এর পাশে সংরক্ষিত secdiscardable
ফাইলে সংরক্ষিত 16384 র্যান্ডম বাইটের SHA-512 হ্যাশ কীস্টোর কী-এর অ্যাপ আইডি ট্যাগ হিসাবে ব্যবহৃত হয়। একটি FBE কী পুনরুদ্ধার করতে এই সমস্ত বাইটগুলি পুনরুদ্ধার করতে হবে।
অভ্যন্তরীণ স্টোরেজের জন্য CE কীগুলি একটি শক্তিশালী স্তরের সুরক্ষা পায় যা নিশ্চিত করে যে ব্যবহারকারীর লক স্ক্রিন নলেজ ফ্যাক্টর (LSKF) (পিন, প্যাটার্ন, বা পাসওয়ার্ড), একটি নিরাপদ পাসকোড রিসেট টোকেন , বা উভয় ক্লায়েন্ট-সাইড না জেনেই সেগুলি আনলক করা যাবে না। এবং রিজুমে-অন-রিবুট অপারেশনের জন্য সার্ভার-সাইড কী। পাসকোড রিসেট টোকেনগুলি শুধুমাত্র কাজের প্রোফাইল এবং সম্পূর্ণরূপে পরিচালিত ডিভাইসগুলির জন্য তৈরি করার অনুমতি দেওয়া হয়৷
এটি অর্জন করতে, ব্যবহারকারীর সিন্থেটিক পাসওয়ার্ড থেকে প্রাপ্ত একটি AES-256-GCM কী ব্যবহার করে অভ্যন্তরীণ স্টোরেজের জন্য vold
প্রতিটি CE কী এনক্রিপ্ট করে। সিন্থেটিক পাসওয়ার্ড হল একটি অপরিবর্তনীয় হাই-এনট্রপি ক্রিপ্টোগ্রাফিক গোপন যা প্রতিটি ব্যবহারকারীর জন্য এলোমেলোভাবে তৈরি করা হয়। system_server
LockSettingsService
সিন্থেটিক পাসওয়ার্ড এবং এটি সুরক্ষিত করার উপায়গুলি পরিচালনা করে।
LSKF দিয়ে সিন্থেটিক পাসওয়ার্ড সুরক্ষিত করার জন্য, LockSettingsService
প্রথমে LSKF কে scrypt
মাধ্যমে প্রসারিত করে, প্রায় 25 ms সময় এবং প্রায় 2 MiB মেমরি ব্যবহার লক্ষ্য করে। যেহেতু LSKFগুলি সাধারণত সংক্ষিপ্ত হয়, এই পদক্ষেপটি সাধারণত খুব বেশি নিরাপত্তা প্রদান করে না। নিরাপত্তার প্রধান স্তর হল সিকিউর এলিমেন্ট (SE) বা TEE- প্রয়োগকৃত রেট লিমিটিং নীচে বর্ণিত।
যদি ডিভাইসটিতে একটি সিকিউর এলিমেন্ট (SE) থাকে, তাহলে LockSettingsService
প্রসারিত LSKF কে Weaver HAL ব্যবহার করে SE-তে সংরক্ষিত হাই-এনট্রপি র্যান্ডম সিক্রেটের সাথে ম্যাপ করে। LockSettingsService
তারপর সিন্থেটিক পাসওয়ার্ডটি দুবার এনক্রিপ্ট করে: প্রথমটি প্রসারিত LSKF এবং ওয়েভার সিক্রেট থেকে প্রাপ্ত একটি সফ্টওয়্যার কী দিয়ে, এবং দ্বিতীয়টি একটি নন-অথ-বাউন্ড কীস্টোর কী দিয়ে। এটি LSKF অনুমানের SE-প্রবর্তিত হার সীমাবদ্ধতা প্রদান করে।
যদি ডিভাইসে SE না থাকে, তাহলে LockSettingsService
পরিবর্তে প্রসারিত LSKF কে গেটকিপার পাসওয়ার্ড হিসেবে ব্যবহার করে। LockSettingsService
তারপর সিন্থেটিক পাসওয়ার্ডটি দুবার এনক্রিপ্ট করে: প্রথমটি প্রসারিত LSKF থেকে প্রাপ্ত একটি সফ্টওয়্যার কী এবং একটি সেকডিসকার্ডেবল ফাইলের হ্যাশ দিয়ে, এবং দ্বিতীয়টি একটি কীস্টোর কী দিয়ে যা গেটকিপার তালিকাভুক্তির জন্য প্রমাণীকৃত। এটি LSKF অনুমানের TEE-প্রয়োগকৃত রেট লিমিটিং প্রদান করে।
যখন LSKF পরিবর্তন করা হয়, LockSettingsService
পুরানো LSKF-এর সাথে সিন্থেটিক পাসওয়ার্ড বাঁধার সাথে যুক্ত সমস্ত তথ্য মুছে দেয়। ওয়েভার বা রোলব্যাক প্রতিরোধী কীস্টোর কী সমর্থন করে এমন ডিভাইসগুলিতে, এটি পুরানো বাইন্ডিংকে নিরাপদে মুছে ফেলার গ্যারান্টি দেয়। এই কারণে, ব্যবহারকারীর LSKF না থাকলেও এখানে বর্ণিত সুরক্ষাগুলি প্রয়োগ করা হয়৷
Android 7.0 এবং উচ্চতর ফাইল-ভিত্তিক এনক্রিপশন (FBE) সমর্থন করে। ফাইল-ভিত্তিক এনক্রিপশন বিভিন্ন ফাইলকে বিভিন্ন কী দিয়ে এনক্রিপ্ট করার অনুমতি দেয় যা স্বাধীনভাবে আনলক করা যায়।
এই নিবন্ধটি বর্ণনা করে যে কীভাবে নতুন ডিভাইসে ফাইল-ভিত্তিক এনক্রিপশন সক্ষম করা যায় এবং কীভাবে সিস্টেম অ্যাপগুলি ডাইরেক্ট বুট এপিআই ব্যবহার করে ব্যবহারকারীদের সর্বোত্তম, সবচেয়ে নিরাপদ অভিজ্ঞতা প্রদান করতে পারে।
Android 10 এবং উচ্চতর সংস্করণের সাথে লঞ্চ হওয়া সমস্ত ডিভাইসের ফাইল-ভিত্তিক এনক্রিপশন ব্যবহার করতে হবে।
ডাইরেক্ট বুট
ফাইল-ভিত্তিক এনক্রিপশন অ্যান্ড্রয়েড 7.0-এ প্রবর্তিত একটি নতুন বৈশিষ্ট্যকে সক্ষম করে যাকে ডাইরেক্ট বুট বলা হয়। ডাইরেক্ট বুট এনক্রিপ্ট করা ডিভাইসগুলিকে সরাসরি লক স্ক্রিনে বুট করার অনুমতি দেয়। পূর্বে, ফুল-ডিস্ক এনক্রিপশন (FDE) ব্যবহার করে এনক্রিপ্ট করা ডিভাইসে, ব্যবহারকারীদের কোনো ডেটা অ্যাক্সেস করার আগে শংসাপত্র প্রদান করতে হতো, যা ফোনটিকে সবচেয়ে মৌলিক ক্রিয়াকলাপগুলি ছাড়া অন্য সমস্ত কাজ সম্পাদন করতে বাধা দেয়। উদাহরণস্বরূপ, অ্যালার্মগুলি কাজ করতে পারেনি, অ্যাক্সেসিবিলিটি পরিষেবাগুলি অনুপলব্ধ ছিল এবং ফোনগুলি কলগুলি গ্রহণ করতে পারে না তবে শুধুমাত্র প্রাথমিক জরুরি ডায়ালার অপারেশনগুলিতে সীমাবদ্ধ ছিল৷
অ্যাপগুলিকে এনক্রিপশন সম্পর্কে সচেতন করতে ফাইল-ভিত্তিক এনক্রিপশন (FBE) এবং নতুন API প্রবর্তনের সাথে, এই অ্যাপগুলির পক্ষে সীমিত প্রেক্ষাপটে কাজ করা সম্ভব। ব্যবহারকারীদের ব্যক্তিগত ব্যবহারকারীর তথ্য রক্ষা করার সময় ব্যবহারকারীরা তাদের শংসাপত্র প্রদান করার আগে এটি ঘটতে পারে।
একটি এফবিই-সক্ষম ডিভাইসে, ডিভাইসের প্রতিটি ব্যবহারকারীর দুটি স্টোরেজ অবস্থান অ্যাপের জন্য উপলব্ধ রয়েছে:
- শংসাপত্র এনক্রিপ্টেড (CE) স্টোরেজ, যা ডিফল্ট স্টোরেজ অবস্থান এবং ব্যবহারকারী ডিভাইসটি আনলক করার পরেই উপলব্ধ।
- ডিভাইস এনক্রিপ্টেড (DE) স্টোরেজ, যা ডাইরেক্ট বুট মোডের সময় এবং ব্যবহারকারী ডিভাইসটি আনলক করার পরে উভয়ই পাওয়া যায় এমন একটি স্টোরেজ অবস্থান।
এই বিচ্ছেদটি কাজের প্রোফাইলগুলিকে আরও সুরক্ষিত করে তোলে কারণ এটি এক সময়ে একাধিক ব্যবহারকারীকে সুরক্ষিত করার অনুমতি দেয় কারণ এনক্রিপশন আর শুধুমাত্র বুট টাইম পাসওয়ার্ডের উপর ভিত্তি করে থাকে না।
ডাইরেক্ট বুট API এনক্রিপশন-সচেতন অ্যাপগুলিকে এই প্রতিটি ক্ষেত্রে অ্যাক্সেস করার অনুমতি দেয়। লক স্ক্রিনে প্রথম শংসাপত্র প্রবেশের প্রতিক্রিয়ায় বা কাজের চ্যালেঞ্জ প্রদানের ক্ষেত্রে কাজের প্রোফাইলের ক্ষেত্রে ব্যবহারকারীর CE স্টোরেজ আনলক করা হলে অ্যাপগুলিকে বিজ্ঞপ্তি দেওয়ার প্রয়োজনীয়তা মিটমাট করার জন্য অ্যাপের লাইফসাইকেলে পরিবর্তন রয়েছে। অ্যান্ড্রয়েড 7.0 চালিত ডিভাইসগুলিকে অবশ্যই এই নতুন API এবং লাইফসাইকেলগুলিকে সমর্থন করতে হবে তা নির্বিশেষে তারা FBE প্রয়োগ করুক বা না করুক। যদিও, FBE ছাড়া, DE এবং CE স্টোরেজ সবসময় আনলক অবস্থায় থাকে।
Ext4 এবং F2FS ফাইল সিস্টেমে ফাইল-ভিত্তিক এনক্রিপশনের একটি সম্পূর্ণ বাস্তবায়ন অ্যান্ড্রয়েড ওপেন সোর্স প্রজেক্ট (AOSP) এ সরবরাহ করা হয়েছে এবং শুধুমাত্র প্রয়োজনীয়তা পূরণ করে এমন ডিভাইসগুলিতে সক্ষম করা প্রয়োজন। FBE ব্যবহার করার জন্য নির্বাচিত নির্মাতারা সিস্টেম অন চিপ (SoC) এর উপর ভিত্তি করে বৈশিষ্ট্যটি অপ্টিমাইজ করার উপায়গুলি অন্বেষণ করতে পারেন।
AOSP-এর সমস্ত প্রয়োজনীয় প্যাকেজ সরাসরি-বুট সচেতন হওয়ার জন্য আপডেট করা হয়েছে। যাইহোক, যেখানে ডিভাইস নির্মাতারা এই অ্যাপগুলির কাস্টমাইজড সংস্করণগুলি ব্যবহার করে, সেখানে তারা ন্যূনতম নিশ্চিত করতে চায় যে নিম্নলিখিত পরিষেবাগুলি প্রদান করে সরাসরি বুট সচেতন প্যাকেজ রয়েছে:
- টেলিফোনি পরিষেবা এবং ডায়ালার
- লক স্ক্রিনে পাসওয়ার্ড প্রবেশের জন্য ইনপুট পদ্ধতি
উদাহরণ এবং উৎস
Android ফাইল-ভিত্তিক এনক্রিপশনের একটি রেফারেন্স বাস্তবায়ন প্রদান করে, যেখানে vold ( system/vold ) Android এ স্টোরেজ ডিভাইস এবং ভলিউম পরিচালনার জন্য কার্যকারিতা প্রদান করে। FBE এর সংযোজন একাধিক ব্যবহারকারীর CE এবং DE কীগুলির জন্য কী ব্যবস্থাপনাকে সমর্থন করার জন্য বেশ কয়েকটি নতুন কমান্ডের সাথে ভলড প্রদান করে। কার্নেলে ফাইল-ভিত্তিক এনক্রিপশন ক্ষমতা ব্যবহার করার জন্য মূল পরিবর্তনগুলি ছাড়াও, FBE এবং ডাইরেক্ট বুট বৈশিষ্ট্য সমর্থন করার জন্য লকস্ক্রিন এবং SystemUI সহ অনেক সিস্টেম প্যাকেজ পরিবর্তন করা হয়েছে। এর মধ্যে রয়েছে:
- AOSP ডায়ালার (প্যাকেজ/অ্যাপস/ডায়ালার)
- ডেস্ক ঘড়ি (প্যাকেজ/অ্যাপস/ডেস্কক্লক)
- ল্যাটিনআইএমই (প্যাকেজ/ইনপুট পদ্ধতি/ল্যাটিনআইএমই)*
- সেটিংস অ্যাপ (প্যাকেজ/অ্যাপস/সেটিংস)*
- সিস্টেমইউআই (ফ্রেমওয়ার্ক/বেস/প্যাকেজ/সিস্টেমইউআই)*
* সিস্টেম অ্যাপ যেগুলি defaultToDeviceProtectedStorage
স্টোরেজ ম্যানিফেস্ট অ্যাট্রিবিউট ব্যবহার করে
AOSP সোর্স ট্রির ফ্রেমওয়ার্ক বা প্যাকেজ ডিরেক্টরিতে mangrep directBootAware
কমান্ড চালানোর মাধ্যমে এনক্রিপশন সচেতন অ্যাপ এবং পরিষেবাগুলির আরও উদাহরণ পাওয়া যেতে পারে।
নির্ভরতা
FBE এর AOSP বাস্তবায়ন নিরাপদে ব্যবহার করতে, একটি ডিভাইসকে নিম্নলিখিত নির্ভরতা পূরণ করতে হবে:
- Ext4 এনক্রিপশন বা F2FS এনক্রিপশনের জন্য কার্নেল সমর্থন ।
- HAL সংস্করণ 1.0 বা উচ্চতর সহ কীমাস্টার সমর্থন । Keymaster 0.3 এর জন্য কোন সমর্থন নেই কারণ এটি প্রয়োজনীয় ক্ষমতা প্রদান করে না বা এনক্রিপশন কীগুলির জন্য পর্যাপ্ত সুরক্ষা নিশ্চিত করে না।
- কীমাস্টার/ কীস্টোর এবং গেটকিপারকে অবশ্যই একটি বিশ্বস্ত এক্সিকিউশন এনভায়রনমেন্টে (TEE) প্রয়োগ করতে হবে যাতে DE কীগুলির সুরক্ষা প্রদান করা যায় যাতে একটি অননুমোদিত OS (ডিভাইসে ফ্ল্যাশ করা কাস্টম OS) কেবল DE কীগুলির জন্য অনুরোধ করতে না পারে৷
- DE কীগুলি অননুমোদিত অপারেটিং সিস্টেম দ্বারা অ্যাক্সেসযোগ্য নয় তা নিশ্চিত করার জন্য ট্রাস্টের হার্ডওয়্যার রুট এবং কীমাস্টার ইনিশিয়ালাইজেশনে আবদ্ধ যাচাই করা বুট প্রয়োজন৷
বাস্তবায়ন
প্রথম এবং সর্বাগ্রে, অ্যালার্ম ক্লকস, ফোন এবং অ্যাক্সেসিবিলিটি বৈশিষ্ট্যগুলির মতো অ্যাপ্লিকেশনগুলি অ্যান্ড্রয়েড করা উচিত: ডাইরেক্ট বুট বিকাশকারী ডকুমেন্টেশন অনুসারে ডাইরেক্টবুটওয়্যার।
কার্নেল সমর্থন
এক্সট 4 এবং এফ 2 এফএস এনক্রিপশনের জন্য কার্নেল সমর্থন অ্যান্ড্রয়েড কমন কার্নেলস, সংস্করণ 3.18 এবং উচ্চতরগুলিতে উপলব্ধ। এটি 5.1 বা উচ্চতর সংস্করণ এমন একটি কার্নেলে সক্ষম করতে, ব্যবহার:
CONFIG_FS_ENCRYPTION=y
পুরানো কার্নেলগুলির জন্য, যদি আপনার ডিভাইসের userdata
ফাইল সিস্টেমটি ext4 হয় তবে CONFIG_EXT4_ENCRYPTION=y
ব্যবহার করুন বা আপনার ডিভাইসের userdata
ফাইল সিস্টেমটি এফ 2 এফএস হলে CONFIG_F2FS_FS_ENCRYPTION=y
ব্যবহার করুন।
যদি আপনার ডিভাইসটি গ্রহণযোগ্য স্টোরেজ সমর্থন করে বা অভ্যন্তরীণ স্টোরেজে মেটাডেটা এনক্রিপশন ব্যবহার করে তবে মেটাডেটা এনক্রিপশন ডকুমেন্টেশনে বর্ণিত হিসাবে মেটাডেটা এনক্রিপশনের জন্য প্রয়োজনীয় কার্নেল কনফিগারেশন বিকল্পগুলি সক্ষম করে।
EXT4 বা F2FS এনক্রিপশনের জন্য কার্যকরী সমর্থন ছাড়াও, ডিভাইস নির্মাতাদের ফাইল-ভিত্তিক এনক্রিপশন গতি বাড়ানোর জন্য এবং ব্যবহারকারীর অভিজ্ঞতা উন্নত করতে ক্রিপ্টোগ্রাফিক ত্বরণ সক্ষম করা উচিত। উদাহরণস্বরূপ, এআরএম 64-ভিত্তিক ডিভাইসগুলিতে, এআরএমভি 8 সিই (ক্রিপ্টোগ্রাফি এক্সটেনশনস) ত্বরণ নিম্নলিখিত কার্নেল কনফিগারেশন বিকল্পগুলি সেট করে সক্ষম করা যেতে পারে:
CONFIG_CRYPTO_AES_ARM64_CE_BLK=y CONFIG_CRYPTO_SHA2_ARM64_CE=y
কর্মক্ষমতা আরও উন্নত করতে এবং বিদ্যুতের ব্যবহার হ্রাস করতে, ডিভাইস নির্মাতারা ইনলাইন এনক্রিপশন হার্ডওয়্যার বাস্তবায়নের বিষয়টিও বিবেচনা করতে পারে, যা স্টোরেজ ডিভাইসে/যাওয়ার পথে ডেটা এনক্রিপ্ট করে/ডিক্রিপ্ট করে। অ্যান্ড্রয়েড কমন কার্নেলগুলিতে (সংস্করণ 4.14 এবং উচ্চতর) একটি ফ্রেমওয়ার্ক রয়েছে যা হার্ডওয়্যার এবং বিক্রেতা ড্রাইভার সমর্থন উপলব্ধ থাকাকালীন ইনলাইন এনক্রিপশন ব্যবহার করার অনুমতি দেয়। ইনলাইন এনক্রিপশন ফ্রেমওয়ার্কটি নিম্নলিখিত কার্নেল কনফিগারেশন বিকল্পগুলি সেট করে সক্ষম করা যেতে পারে:
CONFIG_BLK_INLINE_ENCRYPTION=y CONFIG_FS_ENCRYPTION=y CONFIG_FS_ENCRYPTION_INLINE_CRYPT=y
যদি আপনার ডিভাইসটি ইউএফএস-ভিত্তিক স্টোরেজ ব্যবহার করে তবে সক্ষম করুন:
CONFIG_SCSI_UFS_CRYPTO=y
যদি আপনার ডিভাইসটি EMMC- ভিত্তিক স্টোরেজ ব্যবহার করে তবে সক্ষম করুন:
CONFIG_MMC_CRYPTO=y
ফাইল-ভিত্তিক এনক্রিপশন সক্ষম করুন
কোনও ডিভাইসে এফবিই সক্ষম করার জন্য এটি অভ্যন্তরীণ স্টোরেজ ( userdata
) এ সক্ষম করার প্রয়োজন। এটি স্বয়ংক্রিয়ভাবে গ্রহণযোগ্য স্টোরেজে এফবিই সক্ষম করে; তবে, গ্রহণযোগ্য স্টোরেজে এনক্রিপশন ফর্ম্যাটটি প্রয়োজনে ওভাররাইড করা যেতে পারে।
অভ্যন্তরীণ স্টোরেজ
এফবিই বিকল্পটি fileencryption=contents_encryption_mode[:filenames_encryption_mode[:flags]]
userdata
জন্য fstab
লাইনের FS_MGR_FLAGS কলামে। এই বিকল্পটি অভ্যন্তরীণ স্টোরেজে এনক্রিপশন ফর্ম্যাটটি সংজ্ঞায়িত করে। এটিতে তিনটি পর্যন্ত কলোন-বিচ্ছিন্ন পরামিতি রয়েছে:
-
contents_encryption_mode
প্যারামিটারটি সংজ্ঞায়িত করে যে কোন ক্রিপ্টোগ্রাফিক অ্যালগরিদম ফাইলের বিষয়বস্তুগুলি এনক্রিপ্ট করতে ব্যবহৃত হয়। এটি হয়aes-256-xts
বাadiantum
হতে পারে। অ্যান্ড্রয়েড 11 যেহেতু এটি ডিফল্ট অ্যালগরিদম নির্দিষ্ট করতে খালি রেখে দেওয়া যেতে পারে, যাaes-256-xts
। -
filenames_encryption_mode
প্যারামিটারটি সংজ্ঞায়িত করে যে কোন ক্রিপ্টোগ্রাফিক অ্যালগরিদম ফাইলের নামগুলি এনক্রিপ্ট করতে ব্যবহৃত হয়। এটি হয়aes-256-cts
,aes-256-heh
,adiantum
, বাaes-256-hctr2
হতে পারে। যদি নির্দিষ্ট না করা হয় তবে এটিaes-256-cts
ডিফল্ট হয় যদিcontents_encryption_mode
aes-256-xts
হয়, বাadiantum
যদিcontents_encryption_mode
adiantum
হয়। - অ্যান্ড্রয়েড 11 -এ নতুন
flags
প্যারামিটারটি+
অক্ষর দ্বারা পৃথক করা পতাকাগুলির একটি তালিকা। নিম্নলিখিত পতাকাগুলি সমর্থিত:-
v1
পতাকা সংস্করণ 1 এনক্রিপশন নীতি নির্বাচন করে;v2
পতাকা সংস্করণ 2 এনক্রিপশন নীতি নির্বাচন করে। সংস্করণ 2 এনক্রিপশন নীতিগুলি আরও সুরক্ষিত এবং নমনীয় কী ডেরাইভেশন ফাংশন ব্যবহার করে। ডিফল্টটি ভি 2 হয় যদি ডিভাইসটি অ্যান্ড্রয়েড 11 বা উচ্চতর (ro.product.first_api_level
দ্বারা নির্ধারিত হয়), বা ভি 1 যদি ডিভাইসটি অ্যান্ড্রয়েড 10 বা তার চেয়ে কম চালু থাকে তবে ভি 1। -
inlinecrypt_optimized
ফ্ল্যাগ একটি এনক্রিপশন ফর্ম্যাট নির্বাচন করে যা ইনলাইন এনক্রিপশন হার্ডওয়্যারগুলির জন্য অনুকূলিত যা প্রচুর সংখ্যক কীগুলি দক্ষতার সাথে পরিচালনা করে না। এটি প্রতি ফাইলের একের পরিবর্তে কেবল একটি ফাইলের বিষয়বস্তু এনক্রিপশন কী অর্জন করে এটি করে। আইভিএস (প্রারম্ভিক ভেক্টর) এর প্রজন্ম সেই অনুযায়ী সামঞ্জস্য করা হয়। -
emmc_optimized
পতাকাটিinlinecrypt_optimized
অনুরূপ, তবে এটি একটি আইভি প্রজন্মের পদ্ধতিও নির্বাচন করে যা আইভিএসকে 32 বিট সীমাবদ্ধ করে। এই পতাকাটি কেবল ইনলাইন এনক্রিপশন হার্ডওয়্যারগুলিতে ব্যবহার করা উচিত যা জেডেক ইএমএমসি ভি 5.2 স্পেসিফিকেশন মেনে চলে এবং তাই কেবল 32-বিট আইভিএস সমর্থন করে। অন্যান্য ইনলাইন এনক্রিপশন হার্ডওয়্যারে, পরিবর্তেinlinecrypt_optimized
ব্যবহার করুন। এই পতাকাটি কখনই ইউএফএস-ভিত্তিক স্টোরেজে ব্যবহার করা উচিত নয়; ইউএফএস স্পেসিফিকেশন 64-বিট আইভি ব্যবহারের অনুমতি দেয়। - হার্ডওয়্যার-মোড়ানো কীগুলি সমর্থন করে এমন ডিভাইসগুলিতে,
wrappedkey_v0
পতাকা এফবিইর জন্য হার্ডওয়্যার-মোড়ানো কীগুলির ব্যবহার সক্ষম করে। এটি কেবলinlinecrypt
মাউন্ট বিকল্পের সাথে একত্রে ব্যবহার করা যেতে পারে এবং হয়inlinecrypt_optimized
বাemmc_optimized
পতাকা। -
dusize_4k
পতাকা এনক্রিপশন ডেটা ইউনিটের আকারকে 4096 বাইট হতে বাধ্য করে এমনকি যখন ফাইল সিস্টেম ব্লকের আকার 4096 বাইট না হয়। এনক্রিপশন ডেটা ইউনিটের আকার হ'ল ফাইল সামগ্রী এনক্রিপশনের গ্রানুলারিটি। এই পতাকাটি অ্যান্ড্রয়েড 15 সাল থেকে উপলভ্য This এই পতাকাটি কেবলমাত্র ইনলাইন এনক্রিপশন হার্ডওয়্যার ব্যবহার সক্ষম করতে ব্যবহার করা উচিত যা 4096 বাইটের চেয়ে 4096 বাইটের চেয়ে বড় ডেটা ইউনিটগুলিকে সমর্থন করে না 4096 বাইটের চেয়ে বড় ব্যবহার করে এবং এটি F2FS ব্যবহার করে ফাইল সিস্টেম
-
আপনি যদি ইনলাইন এনক্রিপশন হার্ডওয়্যার ব্যবহার না করে থাকেন তবে বেশিরভাগ ডিভাইসের জন্য প্রস্তাবিত সেটিংটি হ'ল fileencryption=aes-256-xts
। আপনি যদি ইনলাইন এনক্রিপশন হার্ডওয়্যার ব্যবহার করছেন তবে বেশিরভাগ ডিভাইসের জন্য প্রস্তাবিত সেটিংটি হ'ল fileencryption=aes-256-xts:aes-256-cts:inlinecrypt_optimized
(বা সমতুল্য fileencryption=::inlinecrypt_optimized
)। এইএস ত্বরণের কোনও ফর্ম ছাড়াই ডিভাইসগুলিতে, fileencryption=adiantum
সেট করে AES এর পরিবর্তে অ্যাডিয়ান্টাম ব্যবহার করা যেতে পারে।
অ্যান্ড্রয়েড 14 থেকে, এইএস-এইচসিটিআর 2 হ'ল ত্বরণযুক্ত ক্রিপ্টোগ্রাফি নির্দেশাবলী সহ ডিভাইসগুলির জন্য ফাইলের নামগুলি এনক্রিপশনের পছন্দসই মোড। তবে, কেবলমাত্র নতুন অ্যান্ড্রয়েড কার্নেলগুলি এইএস-এইচসিটিআর 2 সমর্থন করে। ভবিষ্যতের অ্যান্ড্রয়েড রিলিজে, এটি ফাইলের নাম এনক্রিপশনের জন্য ডিফল্ট মোডে পরিণত হওয়ার পরিকল্পনা করা হয়েছে। যদি আপনার কার্নেলের কাছে AES-HCTR2 সমর্থন থাকে তবে এটি ফাইলের নামগুলি এনক্রিপশনের জন্য সক্ষম করা যেতে পারে filenames_encryption_mode
aes-256-hctr2
এ সেট করে। সবচেয়ে সহজ ক্ষেত্রে এটি fileencryption=aes-256-xts:aes-256-hctr2
দিয়ে করা হবে।
অ্যান্ড্রয়েড 10 বা তার চেয়ে কম দিয়ে চালু হওয়া ডিভাইসগুলিতে fileencryption=ice
FSCRYPT_MODE_PRIVATE
ফাইল সামগ্রী এনক্রিপশন মোডের ব্যবহার নির্দিষ্ট করতেও গৃহীত হয়। এই মোডটি অ্যান্ড্রয়েড কমন কার্নেলগুলি দ্বারা অপ্রত্যাশিত, তবে এটি কাস্টম কার্নেল প্যাচগুলি ব্যবহার করে বিক্রেতাদের দ্বারা প্রয়োগ করা যেতে পারে। এই মোড দ্বারা উত্পাদিত অন-ডিস্ক ফর্ম্যাটটি ছিল বিক্রেতা-নির্দিষ্ট। অ্যান্ড্রয়েড 11 বা উচ্চতর দিয়ে চালু হওয়া ডিভাইসগুলিতে, এই মোডটি আর অনুমোদিত নয় এবং পরিবর্তে একটি স্ট্যান্ডার্ড এনক্রিপশন ফর্ম্যাট ব্যবহার করা উচিত।
ডিফল্টরূপে, লিনাক্স কার্নেলের ক্রিপ্টোগ্রাফি এপিআই ব্যবহার করে ফাইলের সামগ্রী এনক্রিপশন করা হয়। আপনি যদি পরিবর্তে ইনলাইন এনক্রিপশন হার্ডওয়্যার ব্যবহার করতে চান তবে inlinecrypt
মাউন্ট বিকল্পটিও যুক্ত করুন। উদাহরণস্বরূপ, একটি সম্পূর্ণ fstab
লাইনটি দেখতে দেখতে পারে:
/dev/block/by-name/userdata /data f2fs nodev,noatime,nosuid,errors=panic,inlinecrypt wait,fileencryption=aes-256-xts:aes-256-cts:inlinecrypt_optimized
গ্রহণযোগ্য স্টোরেজ
যেহেতু অ্যান্ড্রয়েড 9, এফবিই এবং গ্রহণযোগ্য স্টোরেজ একসাথে ব্যবহার করা যেতে পারে।
userdata
জন্য fileencryption
এফএসটিএবি বিকল্প নির্দিষ্ট করে স্বয়ংক্রিয়ভাবে গ্রহণযোগ্য স্টোরেজে এফবিই এবং মেটাডেটা এনক্রিপশন উভয়ই সক্ষম করে। তবে আপনি PRODUCT_PROPERTY_OVERRIDES
বৈশিষ্ট্য সেট করে গ্রহণযোগ্য স্টোরেজে এফবিই বা মেটাডেটা এনক্রিপশন ফর্ম্যাটগুলি ওভাররাইড করতে পারেন।
অ্যান্ড্রয়েড 11 বা উচ্চতর দিয়ে চালু হওয়া ডিভাইসগুলিতে নিম্নলিখিত বৈশিষ্ট্যগুলি ব্যবহার করুন:
-
ro.crypto.volume.options
(অ্যান্ড্রয়েড 11 এ নতুন) গ্রহণযোগ্য স্টোরেজে এফবিই এনক্রিপশন ফর্ম্যাটটি নির্বাচন করে। এটিfileencryption
এফএসটিএবি বিকল্পের আর্গুমেন্টের মতো একই সিনট্যাক্স রয়েছে এবং এটি একই ডিফল্ট ব্যবহার করে। এখানে কী ব্যবহার করতে হবে তার জন্য উপরেfileencryption
জন্য সুপারিশগুলি দেখুন। -
ro.crypto.volume.metadata.encryption
গ্রহণযোগ্য স্টোরেজে মেটাডেটা এনক্রিপশন ফর্ম্যাট নির্বাচন করে। মেটাডেটা এনক্রিপশন ডকুমেন্টেশন দেখুন।
অ্যান্ড্রয়েড 10 বা তার কম দিয়ে চালু হওয়া ডিভাইসগুলিতে নিম্নলিখিত বৈশিষ্ট্যগুলি ব্যবহার করুন:
-
ro.crypto.volume.contents_mode
সামগ্রী এনক্রিপশন মোড নির্বাচন করে। এটিro.crypto.volume.options
এর প্রথম কোলন-বিচ্ছিন্ন ক্ষেত্রের সমতুল্য। -
ro.crypto.volume.filenames_mode
ফাইলের নামগুলি এনক্রিপশন মোড নির্বাচন করে। এটিro.crypto.volume.options
এর দ্বিতীয় কোলন-বিচ্ছিন্ন ক্ষেত্রের সমতুল্য, অ্যান্ড্রয়েড 10 বা তার চেয়ে কম দিয়ে চালু হওয়া ডিভাইসগুলিতে ডিফল্টটিaes-256-heh
। বেশিরভাগ ডিভাইসে, এটি স্পষ্টভাবেaes-256-cts
ওভাররাইড করা দরকার। -
ro.crypto.fde_algorithm
এবংro.crypto.fde_sector_size
গ্রহণযোগ্য স্টোরেজে মেটাডেটা এনক্রিপশন ফর্ম্যাটটি নির্বাচন করুন। মেটাডেটা এনক্রিপশন ডকুমেন্টেশন দেখুন।
কিউমাস্টারের সাথে সংহত করুন
কেমাস্টার হালটি early_hal
শ্রেণীর অংশ হিসাবে শুরু করা উচিত। এটি কারণ এফবিইর প্রয়োজন যে কিমাস্টার post-fs-data
বুট পর্বের মাধ্যমে অনুরোধগুলি পরিচালনা করতে প্রস্তুত, এটি যখন vold
প্রাথমিক কীগুলি সেট আপ করে।
ডিরেক্টরি বাদ দিন
init
সিস্টেম ডি কীটি /data
সমস্ত শীর্ষ-স্তরের ডিরেক্টরিগুলির জন্য প্রয়োগ করে, ডিরেক্টরিগুলি ব্যতীত যেগুলি অবশ্যই ডিরেক্টরি রয়েছে যেমন সিস্টেম ডি কী নিজেই এবং ডিরেক্টরিগুলি রয়েছে যা ব্যবহারকারী সিই বা ডি ডিরেক্টরি ধারণ করে। এনক্রিপশন কীগুলি পুনরাবৃত্তভাবে প্রয়োগ করে এবং উপ -ডিরেক্টরিগুলি দ্বারা ওভাররাইড করা যায় না।
অ্যান্ড্রয়েড 11 এবং উচ্চতর ক্ষেত্রে, ডিরেক্টরিগুলির জন্য যে কীটি init
তা encryption=<action>
আর্গুমেন্ট দ্বারা mkdir
কমান্ডের কাছে ইনিশ স্ক্রিপ্টগুলিতে নিয়ন্ত্রণ করা যেতে পারে। <action>
এর সম্ভাব্য মানগুলি অ্যান্ড্রয়েড ইনিশ ভাষার জন্য রিডমে নথিভুক্ত করা হয়।
অ্যান্ড্রয়েড 10 -এ, init
এনক্রিপশন ক্রিয়াগুলি নিম্নলিখিত স্থানে হার্ডকোড করা হয়েছিল:
/system/extras/libfscrypt/fscrypt_init_extensions.cpp
অ্যান্ড্রয়েড 9 এবং এর আগে, অবস্থানটি ছিল:
/system/extras/ext4_utils/ext4_crypt_init_extensions.cpp
নির্দিষ্ট ডিরেক্টরিগুলি একেবারে এনক্রিপ্ট করা থেকে রোধ করতে ব্যতিক্রম যুক্ত করা সম্ভব। যদি এই ধরণের পরিবর্তনগুলি করা হয় তবে ডিভাইস প্রস্তুতকারকের মধ্যে সেলিনাক্স নীতিগুলি অন্তর্ভুক্ত করা উচিত যা কেবলমাত্র অ্যাপ্লিকেশনগুলিতে অ্যাক্সেস দেয় যা এনক্রিপ্টড ডিরেক্টরিটি ব্যবহার করতে হবে। এটি সমস্ত অবিশ্বস্ত অ্যাপ্লিকেশনগুলি বাদ দেওয়া উচিত।
এর জন্য একমাত্র পরিচিত গ্রহণযোগ্য ব্যবহারের কেসটি উত্তরাধিকার ওটিএ সক্ষমতার সমর্থনে।
সিস্টেম অ্যাপ্লিকেশনগুলিতে সরাসরি বুট সমর্থন করুন
অ্যাপ্লিকেশনগুলি সরাসরি বুটকে সচেতন করুন
সিস্টেম অ্যাপ্লিকেশনগুলির দ্রুত স্থানান্তরের সুবিধার্থে, দুটি নতুন বৈশিষ্ট্য রয়েছে যা অ্যাপ্লিকেশন স্তরে সেট করা যেতে পারে। defaultToDeviceProtectedStorage
বৈশিষ্ট্যটি কেবল সিস্টেম অ্যাপ্লিকেশনগুলিতে উপলব্ধ। directBootAware
অ্যাট্রিবিউট সবার জন্য উপলব্ধ।
<application android:directBootAware="true" android:defaultToDeviceProtectedStorage="true">
অ্যাপ্লিকেশন স্তরের directBootAware
বৈশিষ্ট্যটি অ্যাপের সমস্ত উপাদানগুলি এনক্রিপশন সচেতন হিসাবে চিহ্নিত করার জন্য সংক্ষিপ্ত।
defaultToDeviceProtectedStorage
অ্যাট্রিবিউট ডিফল্ট অ্যাপ স্টোরেজ অবস্থানটি সিই স্টোরেজের দিকে নির্দেশ করার পরিবর্তে ডি স্টোরেজে নির্দেশ করতে পুনঃনির্দেশ করে। এই পতাকাটি ব্যবহার করে সিস্টেম অ্যাপ্লিকেশনগুলি অবশ্যই ডিফল্ট স্থানে সঞ্চিত সমস্ত ডেটা সাবধানতার সাথে নিরীক্ষণ করতে হবে এবং সিই স্টোরেজ ব্যবহার করতে সংবেদনশীল ডেটার পথগুলি পরিবর্তন করতে হবে। ডিভাইস এই বিকল্পটি ব্যবহার করে উত্পাদন করে এমন কোনও ব্যক্তিগত তথ্য নেই তা নিশ্চিত করার জন্য তারা যে ডেটা সংরক্ষণ করছে তা সাবধানতার সাথে পরিদর্শন করা উচিত।
এই মোডে চলার সময়, নিম্নলিখিত সিস্টেম এপিআইগুলি যখন প্রয়োজন হয় তখন সিই স্টোরেজ দ্বারা সমর্থিত একটি প্রসঙ্গটি স্পষ্টভাবে পরিচালনা করার জন্য উপলব্ধ, যা তাদের ডিভাইস সুরক্ষিত অংশগুলির সমতুল্য।
-
Context.createCredentialProtectedStorageContext()
-
Context.isCredentialProtectedStorage()
একাধিক ব্যবহারকারীকে সমর্থন করুন
বহু-ব্যবহারকারী পরিবেশের প্রতিটি ব্যবহারকারী একটি পৃথক এনক্রিপশন কী পান। প্রতিটি ব্যবহারকারী দুটি কী পান: একটি ডিই এবং একটি সিই কী। ব্যবহারকারী 0 অবশ্যই ডিভাইসে প্রথমে লগ ইন করতে হবে কারণ এটি একটি বিশেষ ব্যবহারকারী। এটি ডিভাইস প্রশাসনের ব্যবহারের জন্য প্রাসঙ্গিক।
ক্রিপ্টো-সচেতন অ্যাপ্লিকেশনগুলি এই পদ্ধতিতে ব্যবহারকারীদের মধ্যে ইন্টারঅ্যাক্ট করে: INTERACT_ACROSS_USERS
এবং INTERACT_ACROSS_USERS_FULL
ডিভাইসের সমস্ত ব্যবহারকারী জুড়ে কোনও অ্যাপ্লিকেশনকে কাজ করার অনুমতি দেয়। যাইহোক, এই অ্যাপ্লিকেশনগুলি ইতিমধ্যে আনলক করা ব্যবহারকারীদের জন্য কেবল সিই-এনক্রিপ্টড ডিরেক্টরিগুলিতে অ্যাক্সেস করতে পারে।
একটি অ্যাপ্লিকেশন ডিই অঞ্চল জুড়ে অবাধে ইন্টারঅ্যাক্ট করতে সক্ষম হতে পারে তবে একজন ব্যবহারকারী আনলক করা এর অর্থ এই নয় যে ডিভাইসের সমস্ত ব্যবহারকারী আনলক করা আছে। এই অঞ্চলগুলি অ্যাক্সেস করার চেষ্টা করার আগে অ্যাপটির এই স্থিতিটি পরীক্ষা করা উচিত।
প্রতিটি কাজের প্রোফাইল ব্যবহারকারী আইডি দুটি কী পায়: ডি এবং সিই। যখন কাজের চ্যালেঞ্জটি পূরণ করা হয়, প্রোফাইল ব্যবহারকারী আনলক করা হয় এবং কিউমার (টিইতে) প্রোফাইলের টি কী সরবরাহ করতে পারে।
আপডেটগুলি হ্যান্ডেল করুন
পুনরুদ্ধার পার্টিশন ইউজারডাটা পার্টিশনে ডি-সুরক্ষিত স্টোরেজ অ্যাক্সেস করতে অক্ষম। এফবিই বাস্তবায়নকারী ডিভাইসগুলি এ/বি সিস্টেম আপডেটগুলি ব্যবহার করে ওটিএ সমর্থন করার জন্য দৃ strongly ়ভাবে সুপারিশ করা হয়। যেহেতু সাধারণ অপারেশনের সময় ওটিএ প্রয়োগ করা যেতে পারে এনক্রিপ্ট করা ড্রাইভে ডেটা অ্যাক্সেস করার জন্য পুনরুদ্ধারের কোনও প্রয়োজন নেই।
কোনও উত্তরাধিকার ওটিএ সমাধান ব্যবহার করার সময়, যা userdata
পার্টিশনে ওটিএ ফাইলটি অ্যাক্সেস করতে পুনরুদ্ধারের প্রয়োজন:
-
userdata
পার্টিশনে একটি শীর্ষ-স্তরের ডিরেক্টরি (উদাহরণস্বরূপmisc_ne
) তৈরি করুন। - এনক্রিপ্ট করা হতে এই শীর্ষ-স্তরের ডিরেক্টরিটি কনফিগার করুন ( ডিরেক্টরিগুলি বাদ দিয়ে দেখুন)।
- ওটিএ প্যাকেজগুলি ধরে রাখতে শীর্ষ-স্তরের ডিরেক্টরিগুলির মধ্যে একটি ডিরেক্টরি তৈরি করুন।
- এই ডিরেক্টরি এবং এটি সামগ্রীগুলিতে অ্যাক্সেস নিয়ন্ত্রণ করতে একটি সেলিনাক্স নিয়ম এবং ফাইল প্রসঙ্গ যুক্ত করুন। কেবলমাত্র ওটিএ আপডেট প্রাপ্ত প্রক্রিয়া বা অ্যাপ্লিকেশনগুলি এই ডিরেক্টরিতে পড়তে এবং লিখতে সক্ষম হওয়া উচিত। অন্য কোনও অ্যাপ্লিকেশন বা প্রক্রিয়াটির এই ডিরেক্টরিতে অ্যাক্সেস থাকা উচিত নয়।
বৈধতা
বৈশিষ্ট্যটির বাস্তবায়িত সংস্করণটি উদ্দেশ্য হিসাবে কাজ করে তা নিশ্চিত করার জন্য, প্রথমে ডাইরেক্টবুথস্টেস্ট এবং এনক্রিপশন টেস্টের মতো অনেকগুলি সিটিএস এনক্রিপশন পরীক্ষা চালান।
যদি ডিভাইসটি অ্যান্ড্রয়েড 11 বা উচ্চতর চলছে তবে ভিটিএস_কার্নেল_এনক্রিপশন_টেস্টও চালান:
atest vts_kernel_encryption_test
বা:
vts-tradefed run vts -m vts_kernel_encryption_test
এছাড়াও, ডিভাইস নির্মাতারা নিম্নলিখিত ম্যানুয়াল পরীক্ষাগুলি সম্পাদন করতে পারেন। এফবিই সক্ষম একটি ডিভাইসে সক্ষম:
-
ro.crypto.state
বিদ্যমান তা পরীক্ষা করে দেখুন- নিশ্চিত
ro.crypto.state
- নিশ্চিত
-
ro.crypto.type
বিদ্যমান তা পরীক্ষা করে দেখুন-
file
ro.crypto.type
-
অতিরিক্তভাবে, পরীক্ষকরা যাচাই করতে পারেন যে বুটের পর প্রথমবারের মতো ডিভাইসটি আনলক করার আগে সিই স্টোরেজটি লক করা আছে। এটি করতে, একটি userdebug
বা eng
বিল্ড ব্যবহার করুন, প্রধান ব্যবহারকারীর উপর একটি পিন, প্যাটার্ন বা পাসওয়ার্ড সেট করুন এবং ডিভাইসটি পুনরায় বুট করুন। ডিভাইসটি আনলক করার আগে, প্রধান ব্যবহারকারীর সিই স্টোরেজ পরীক্ষা করতে নিম্নলিখিত কমান্ডটি চালান। যদি ডিভাইসটি হেডলেস সিস্টেম ব্যবহারকারী মোড (বেশিরভাগ স্বয়ংচালিত ডিভাইস) ব্যবহার করে তবে প্রধান ব্যবহারকারী হ'ল ব্যবহারকারী 10, তাই চালান:
adb root; adb shell ls /data/user/10
অন্যান্য ডিভাইসে (বেশিরভাগ অ-স্বয়ংক্রিয় ডিভাইস), প্রধান ব্যবহারকারী হ'ল ব্যবহারকারী 0, সুতরাং চালান:
adb root; adb shell ls /data/user/0
তালিকাভুক্ত ফাইলের নামগুলি বেস 64-এনকোডযুক্ত কিনা তা যাচাই করুন, এটি ইঙ্গিত করে যে ফাইলের নামগুলি এনক্রিপ্ট করা হয়েছে এবং সেগুলি ডিক্রিপ্ট করার কীটি এখনও উপলভ্য নয়। যদি ফাইলের নামগুলি প্লেইনটেক্সটে তালিকাভুক্ত করা হয় তবে কিছু ভুল।
ডিভাইস নির্মাতারা তাদের ডিভাইস বা কার্নেলগুলিতে এফএসসিআরওয়াইপ্টের জন্য উজানের লিনাক্স পরীক্ষা চালানোর অন্বেষণ করতেও উত্সাহিত হয়। এই পরীক্ষাগুলি xfstests ফাইল সিস্টেম টেস্ট স্যুটের অংশ। তবে এই প্রবাহের পরীক্ষাগুলি অ্যান্ড্রয়েড দ্বারা অফিশিয়ালভাবে সমর্থিত নয়।
এওএসপি বাস্তবায়নের বিশদ
এই বিভাগটি এওএসপি বাস্তবায়নের বিশদ সরবরাহ করে এবং ফাইল-ভিত্তিক এনক্রিপশন কীভাবে কাজ করে তা বর্ণনা করে। ডিভাইস নির্মাতাদের তাদের ডিভাইসগুলিতে এফবিই এবং সরাসরি বুট ব্যবহার করতে এখানে কোনও পরিবর্তন করা প্রয়োজন হবে না।
fscrypt এনক্রিপশন
এওএসপি বাস্তবায়ন কার্নেলটিতে "এফএসসিআরওয়াইপিটি" এনক্রিপশন (এক্সট 4 এবং এফ 2 এফএস দ্বারা সমর্থিত) ব্যবহার করে এবং সাধারণত এটিতে কনফিগার করা হয়:
- এক্সটিএস মোডে AES-256 সহ ফাইল সামগ্রীগুলি এনক্রিপ্ট করুন
- সিবিসি-সিটিএস মোডে এইএস -256 সহ ফাইলের নামগুলি এনক্রিপ্ট করুন
অ্যাডিয়ান্টাম এনক্রিপশনও সমর্থিত। যখন অ্যাডিয়ান্টাম এনক্রিপশন সক্ষম করা থাকে, তখন ফাইলের সামগ্রী এবং ফাইলের নাম উভয়ই অ্যাডিয়ান্টামের সাথে এনক্রিপ্ট করা হয়।
এফএসসিআরআইপিটি এনক্রিপশন নীতিগুলির দুটি সংস্করণ সমর্থন করে: সংস্করণ 1 এবং সংস্করণ 2। সংস্করণ 1 অবমূল্যায়ন করা হয়েছে, এবং অ্যান্ড্রয়েড 11 এবং উচ্চতর দিয়ে প্রবর্তনকারী ডিভাইসগুলির জন্য সিডিডি প্রয়োজনীয়তাগুলি কেবলমাত্র সংস্করণ 2 এর সাথে সামঞ্জস্যপূর্ণ। সংস্করণ 2 এনক্রিপশন নীতিগুলি এইচকেডিএফ-এসএ 512 ব্যবহার করে প্রকৃতকে উত্সাহিত করতে ইউজারস্পেস-সরবরাহিত কীগুলি থেকে এনক্রিপশন কীগুলি।
এফএসসিআরআইপিটি সম্পর্কে আরও তথ্যের জন্য, উজানের কার্নেল ডকুমেন্টেশন দেখুন।
স্টোরেজ ক্লাস
নিম্নলিখিত টেবিলটি এফবিই কীগুলি এবং তারা আরও বিশদে সুরক্ষিত ডিরেক্টরিগুলি তালিকাভুক্ত করে:
স্টোরেজ ক্লাস | বর্ণনা | ডিরেক্টরি |
---|---|---|
এনক্রিপ্ট করা হয়নি | ডিরেক্টরিগুলিতে /data যা এফবিই দ্বারা সুরক্ষিত হওয়ার প্রয়োজন বা হতে পারে না। মেটাডেটা এনক্রিপশন ব্যবহার করে এমন ডিভাইসগুলিতে, এই ডিরেক্টরিগুলি সত্যই আনক্রিপ্ট করা হয় না বরং মেটাডেটা এনক্রিপশন কী দ্বারা সুরক্ষিত থাকে যা সিস্টেম ডি এর সমতুল্য। |
|
সিস্টেম ডি | ডিভাইস-এনক্রিপ্টড ডেটা কোনও নির্দিষ্ট ব্যবহারকারীর সাথে আবদ্ধ নয় |
|
প্রতি বুট | ইফেমেরাল সিস্টেম ফাইলগুলি যা পুনরায় বুট করার দরকার নেই | /data/per_boot |
ব্যবহারকারী সিই (অভ্যন্তরীণ) | অভ্যন্তরীণ স্টোরেজে প্রতি ব্যবহারকারী শংসাপত্র-এনক্রিপ্টড ডেটা |
|
ব্যবহারকারী ডি (অভ্যন্তরীণ) | অভ্যন্তরীণ স্টোরেজে প্রতি ব্যবহারকারী ডিভাইস-এনক্রিপ্টড ডেটা |
|
ব্যবহারকারী সিই (গ্রহণযোগ্য) | গ্রহণযোগ্য স্টোরেজে প্রতি ব্যবহারকারী শংসাপত্র-এনক্রিপ্টড ডেটা |
|
ব্যবহারকারী ডি (গ্রহণযোগ্য) | গ্রহণযোগ্য স্টোরেজে প্রতি ব্যবহারকারী ডিভাইস-এনক্রিপ্টড ডেটা |
|
মূল সঞ্চয় এবং সুরক্ষা
সমস্ত এফবিই কীগুলি vold
দ্বারা পরিচালিত হয় এবং প্রতি-বুট কী ব্যতীত এনক্রিপ্ট করা হয়, যা মোটেও সংরক্ষণ করা হয় না। নিম্নলিখিত টেবিলটিতে বিভিন্ন এফবিই কীগুলি সংরক্ষণ করা হয়েছে এমন জায়গাগুলি তালিকাভুক্ত করে:
কী প্রকার | মূল অবস্থান | মূল অবস্থানের স্টোরেজ ক্লাস |
---|---|---|
সিস্টেম ডি কী | /data/unencrypted | এনক্রিপ্ট করা হয়নি |
ব্যবহারকারী সিই (অভ্যন্তরীণ) কী | /data/misc/vold/user_keys/ce/${user_id} | সিস্টেম ডি |
ব্যবহারকারী ডি (অভ্যন্তরীণ) কী | /data/misc/vold/user_keys/de/${user_id} | সিস্টেম ডি |
ব্যবহারকারী সিই (গ্রহণযোগ্য) কী | /data/misc_ce/${user_id}/vold/volume_keys/${volume_uuid} | ব্যবহারকারী সিই (অভ্যন্তরীণ) |
ব্যবহারকারী ডি (গ্রহণযোগ্য) কী | /data/misc_de/${user_id}/vold/volume_keys/${volume_uuid} | ব্যবহারকারী ডি (অভ্যন্তরীণ) |
পূর্ববর্তী সারণীতে যেমন দেখানো হয়েছে, বেশিরভাগ এফবিই কীগুলি ডিরেক্টরিগুলিতে সংরক্ষণ করা হয় যা অন্য এফবিই কী দ্বারা এনক্রিপ্ট করা হয়। কীগুলি আনলক করা যায় না যতক্ষণ না সেগুলি স্টোরেজ ক্লাসটি আনলক করা থাকে।
vold
সমস্ত এফবিই কীগুলিতে এনক্রিপশনের একটি স্তরও প্রয়োগ করে। অভ্যন্তরীণ স্টোরেজের জন্য সিই কীগুলি ছাড়া প্রতিটি কী টি-এর বাইরে প্রকাশিত নয় এমন নিজস্ব কীস্টোর কী ব্যবহার করে এইএস -256-জিসিএম দিয়ে এনক্রিপ্ট করা হয়। এটি নিশ্চিত করে যে এফবিই কীগুলি আনলক করা যাবে না যদি না কোনও বিশ্বস্ত অপারেটিং সিস্টেমটি বুট না করে, যা যাচাই করা বুট দ্বারা প্রয়োগ করা হয়। রোলব্যাক প্রতিরোধের কীস্টোর কীতেও অনুরোধ করা হয়েছে, যা এফবিই কীগুলি ডিভাইসগুলিতে সুরক্ষিতভাবে মুছে ফেলার অনুমতি দেয় যেখানে কিমাস্টার রোলব্যাক প্রতিরোধের সমর্থন করে। যখন রোলব্যাক প্রতিরোধের অনুপলব্ধ থাকে তার জন্য সেরা-প্রচেষ্টা ফ্যালব্যাক হিসাবে, 16384 এর এসএএ -512 হ্যাশটি কীসের পাশাপাশি সঞ্চিত secdiscardable
ফাইলটিতে সঞ্চিত এলোমেলো বাইটগুলি কীস্টোর কীটির অ্যাপ আইডি ট্যাগ হিসাবে ব্যবহৃত হয়। একটি এফবিই কী পুনরুদ্ধার করতে এই সমস্ত বাইটগুলি পুনরুদ্ধার করা দরকার।
অভ্যন্তরীণ স্টোরেজের জন্য সিই কীগুলি একটি শক্তিশালী স্তরের সুরক্ষা পান যা নিশ্চিত করে যে তারা ব্যবহারকারীর লক স্ক্রিন নলেজ ফ্যাক্টর (এলএসকেএফ) (পিন, প্যাটার্ন, বা পাসওয়ার্ড), একটি সুরক্ষিত পাসকোড রিসেট টোকেন , বা উভয় ক্লায়েন্ট-সাইড না জেনে তারা আনলক করা যাবে না তা নিশ্চিত করে এবং পুনরায় শুরু-অন-রিবুট অপারেশনের জন্য সার্ভার-সাইড কীগুলি। পাসকোড রিসেট টোকেনগুলি কেবলমাত্র কাজের প্রোফাইল এবং সম্পূর্ণরূপে পরিচালিত ডিভাইসের জন্য তৈরি করার অনুমতি দেওয়া হয়।
এটি অর্জনের জন্য, vold
ব্যবহারকারীর সিন্থেটিক পাসওয়ার্ড থেকে প্রাপ্ত AES-256-GCM কী ব্যবহার করে অভ্যন্তরীণ স্টোরেজের জন্য প্রতিটি সিই কী এনক্রিপ্ট করে। সিন্থেটিক পাসওয়ার্ড একটি অপরিবর্তনীয় উচ্চ-এন্ট্রপি ক্রিপ্টোগ্রাফিক গোপনীয় যা প্রতিটি ব্যবহারকারীর জন্য এলোমেলোভাবে উত্পন্ন হয়। system_server
এ LockSettingsService
সিন্থেটিক পাসওয়ার্ড এবং যেভাবে এটি সুরক্ষিত রয়েছে তা পরিচালনা করে।
এলএসকেএফ দিয়ে সিন্থেটিক পাসওয়ার্ডটি সুরক্ষিত করতে, LockSettingsService
প্রথমে এলএসকেএফকে scrypt
মাধ্যমে পাস করে প্রায় 25 এমএসের একটি সময় এবং প্রায় 2 এমআইবি -র মেমরির ব্যবহারকে লক্ষ্য করে প্রসারিত করে। যেহেতু এলএসকেএফগুলি সাধারণত সংক্ষিপ্ত হয়, তাই এই পদক্ষেপটি সাধারণত খুব বেশি সুরক্ষা সরবরাহ করে না। সুরক্ষার মূল স্তরটি হ'ল নীচে বর্ণিত সুরক্ষিত উপাদান (এসই) বা টি-কার্যকর রেটলিমিটিং।
যদি ডিভাইসের একটি সুরক্ষিত উপাদান (এসই) থাকে তবে LockSettingsService
প্রসারিত এলএসকেএফকে ওয়েভার এইচএল ব্যবহার করে এসইতে সঞ্চিত একটি উচ্চ-এনট্রপি এলোমেলো গোপনে মানচিত্র করে। তারপরে LockSettingsService
সিন্থেটিক পাসওয়ার্ডটি দু'বার এনক্রিপ্ট করে: প্রথমে প্রসারিত এলএসকেএফ এবং ওয়েভার সিক্রেট থেকে প্রাপ্ত একটি সফ্টওয়্যার কী দিয়ে এবং দ্বিতীয়টি একটি নন-এথ-বাউন্ড কীস্টোর কী সহ দ্বিতীয়। এটি এলএসকেএফ অনুমানের এসই-কার্যকর রেটলিমিটিং সরবরাহ করে।
যদি ডিভাইসের কোনও এসই না থাকে তবে LockSettingsService
পরিবর্তে প্রসারিত এলএসকেএফকে গেটকিপার পাসওয়ার্ড হিসাবে ব্যবহার করে। তারপরে LockSettingsService
দু'বার সিন্থেটিক পাসওয়ার্ডটি এনক্রিপ্ট করে: প্রথমে প্রসারিত এলএসকেএফ এবং একটি সেকেন্ডিসার্ডেবল ফাইলের হ্যাশ থেকে প্রাপ্ত একটি সফ্টওয়্যার কী দিয়ে এবং দ্বিতীয়টি কীস্টোর কী দিয়ে দ্বিতীয়টি গেটকিপার তালিকাভুক্তির সাথে যুক্ত। এটি এলএসকেএফ অনুমানের টি-প্রয়োগ করা রেটলিমিটিং সরবরাহ করে।
যখন এলএসকেএফ পরিবর্তন করা হয়, LockSettingsService
পুরানো এলএসকেএফের সাথে সিন্থেটিক পাসওয়ার্ডের বাঁধাইয়ের সাথে সম্পর্কিত সমস্ত তথ্য মুছে দেয়। ওয়েভার বা রোলব্যাক প্রতিরোধী কীস্টোর কীগুলি সমর্থন করে এমন ডিভাইসগুলিতে, এটি পুরানো বাঁধাইয়ের সুরক্ষিত মুছে ফেলার গ্যারান্টি দেয়। এই কারণে, এখানে বর্ণিত সুরক্ষাগুলি প্রয়োগ করা হয় এমনকি ব্যবহারকারীর এলএসকেএফ না থাকলেও।
অ্যান্ড্রয়েড 7.0 এবং উচ্চতর ফাইল-ভিত্তিক এনক্রিপশন (এফবিই) সমর্থন করে। ফাইল-ভিত্তিক এনক্রিপশন বিভিন্ন ফাইলকে বিভিন্ন কী দিয়ে এনক্রিপ্ট করার অনুমতি দেয় যা স্বাধীনভাবে আনলক করা যায়।
এই নিবন্ধটি কীভাবে নতুন ডিভাইসে ফাইল-ভিত্তিক এনক্রিপশন সক্ষম করতে পারে এবং কীভাবে সিস্টেম অ্যাপ্লিকেশনগুলি সরাসরি বুট এপিআই ব্যবহার করতে পারে তা ব্যবহারকারীদের সর্বোত্তম, সবচেয়ে সুরক্ষিত অভিজ্ঞতা সম্ভব করার জন্য কীভাবে সরাসরি বুট এপিআই ব্যবহার করতে পারে তা বর্ণনা করে।
অ্যান্ড্রয়েড 10 এবং উচ্চতর দিয়ে চালু হওয়া সমস্ত ডিভাইসগুলি ফাইল-ভিত্তিক এনক্রিপশন ব্যবহার করতে হবে।
সরাসরি বুট
ফাইল-ভিত্তিক এনক্রিপশন অ্যান্ড্রয়েড 7.0 এ ডাইরেক্ট বুট নামে পরিচিত একটি নতুন বৈশিষ্ট্য সক্ষম করে। ডাইরেক্ট বুট এনক্রিপ্ট করা ডিভাইসগুলিকে সরাসরি লক স্ক্রিনে বুট করার অনুমতি দেয়। পূর্বে, ফুল-ডিস্ক এনক্রিপশন (এফডিই) ব্যবহার করে এনক্রিপ্ট করা ডিভাইসগুলিতে, ব্যবহারকারীদের কোনও ডেটা অ্যাক্সেস করার আগে শংসাপত্র সরবরাহ করা দরকার, ফোনটিকে অপারেশনগুলির সর্বাধিক প্রাথমিক ব্যতীত সমস্ত কিছু সম্পাদন করা থেকে বিরত রাখে। উদাহরণস্বরূপ, অ্যালার্মগুলি পরিচালনা করতে পারে না, অ্যাক্সেসযোগ্যতা পরিষেবাগুলি অনুপলব্ধ ছিল এবং ফোনগুলি কলগুলি গ্রহণ করতে পারে না তবে কেবল বেসিক জরুরী ডায়ালার অপারেশনের মধ্যে সীমাবদ্ধ ছিল।
অ্যাপ্লিকেশনগুলিকে এনক্রিপশন সম্পর্কে সচেতন করার জন্য ফাইল-ভিত্তিক এনক্রিপশন (এফবিই) এবং নতুন এপিআই প্রবর্তনের সাথে সাথে এই অ্যাপ্লিকেশনগুলির পক্ষে সীমিত প্রসঙ্গে কাজ করা সম্ভব। ব্যবহারকারীরা এখনও ব্যক্তিগত ব্যবহারকারীর তথ্য রক্ষা করার সময় তাদের শংসাপত্রগুলি সরবরাহ করার আগে এটি ঘটতে পারে।
একটি এফবিই-সক্ষম ডিভাইসে, ডিভাইসের প্রতিটি ব্যবহারকারীর অ্যাপ্লিকেশনগুলিতে দুটি স্টোরেজ অবস্থান রয়েছে:
- শংসাপত্র এনক্রিপ্টড (সিই) স্টোরেজ, যা ডিফল্ট স্টোরেজ অবস্থান এবং কেবল ব্যবহারকারী ডিভাইসটি আনলক করার পরে উপলব্ধ।
- ডিভাইস এনক্রিপ্টড (ডিই) স্টোরেজ, যা সরাসরি বুট মোডের সময় এবং ব্যবহারকারী ডিভাইসটি আনলক করার পরে উভয়ই স্টোরেজ অবস্থান।
এই বিচ্ছেদটি কাজের প্রোফাইলগুলিকে আরও সুরক্ষিত করে তোলে কারণ এটি একাধিক ব্যবহারকারীকে একবারে সুরক্ষিত রাখতে দেয় কারণ এনক্রিপশনটি কেবল বুট টাইম পাসওয়ার্ডের উপর ভিত্তি করে না।
ডাইরেক্ট বুট এপিআই এনক্রিপশন-সচেতন অ্যাপ্লিকেশনগুলিকে এই ক্ষেত্রগুলির প্রতিটি অ্যাক্সেস করার অনুমতি দেয়। লক স্ক্রিনে প্রথমে শংসাপত্রগুলিতে প্রবেশের প্রতিক্রিয়া হিসাবে বা কাজের প্রোফাইলের ক্ষেত্রে কোনও কাজের চ্যালেঞ্জ সরবরাহ করার ক্ষেত্রে যখন কোনও ব্যবহারকারীর সিই স্টোরেজ আনলক করা হয় তখন অ্যাপ্লিকেশনগুলিকে অবহিত করার প্রয়োজনীয়তার জন্য অ্যাপ্লিকেশন লাইফসাইকেলে পরিবর্তনগুলি রয়েছে। অ্যান্ড্রয়েড 7.0 চলমান ডিভাইসগুলি অবশ্যই এফবিই প্রয়োগ করে কিনা তা নির্বিশেষে এই নতুন এপিআই এবং লাইফসাইকেলগুলি সমর্থন করবে। যদিও, এফবিই ছাড়াই, ডিই এবং সিই স্টোরেজ সর্বদা আনলকড অবস্থায় থাকে।
ANDROID ওপেন সোর্স প্রজেক্টে (এওএসপি) ext4 এবং F2FS ফাইল সিস্টেমে ফাইল-ভিত্তিক এনক্রিপশনের একটি সম্পূর্ণ বাস্তবায়ন সরবরাহ করা হয়েছে এবং প্রয়োজনীয়তাগুলি পূরণ করে এমন ডিভাইসগুলিতে কেবল সক্ষম করা প্রয়োজন। এফবিই ব্যবহার করার জন্য নির্বাচিত নির্মাতারা ব্যবহৃত চিপ (এসওসি) এর উপর ভিত্তি করে বৈশিষ্ট্যটি অনুকূলকরণের উপায়গুলি অন্বেষণ করতে পারেন।
এওএসপি-র সমস্ত প্রয়োজনীয় প্যাকেজগুলি সরাসরি-বুট সচেতন হওয়ার জন্য আপডেট করা হয়েছে। যাইহোক, যেখানে ডিভাইস নির্মাতারা এই অ্যাপ্লিকেশনগুলির কাস্টমাইজড সংস্করণগুলি ব্যবহার করেন, তারা ন্যূনতমভাবে নিশ্চিত করতে চান যে নিম্নলিখিত পরিষেবাগুলি সরবরাহকারী সরাসরি-বুট সচেতন প্যাকেজ রয়েছে:
- টেলিফোনি পরিষেবা এবং ডায়ালার
- লক স্ক্রিনে পাসওয়ার্ড প্রবেশের জন্য ইনপুট পদ্ধতি
উদাহরণ এবং উত্স
অ্যান্ড্রয়েড ফাইল-ভিত্তিক এনক্রিপশনগুলির একটি রেফারেন্স বাস্তবায়ন সরবরাহ করে, যাতে ভোল্ড ( সিস্টেম/ভোল্ড ) অ্যান্ড্রয়েডে স্টোরেজ ডিভাইস এবং ভলিউম পরিচালনার জন্য কার্যকারিতা সরবরাহ করে। এফবিই এর সংযোজন একাধিক ব্যবহারকারীর সিই এবং ডি কীগুলির জন্য কী পরিচালনকে সমর্থন করার জন্য বেশ কয়েকটি নতুন কমান্ড সরবরাহ করে। কার্নেলে ফাইল-ভিত্তিক এনক্রিপশন ক্ষমতাগুলি ব্যবহার করার জন্য মূল পরিবর্তনগুলি ছাড়াও, এফবিই এবং সরাসরি বুট বৈশিষ্ট্যগুলি সমর্থন করার জন্য লকস্ক্রিন এবং সিস্টেমইউআই সহ অনেকগুলি সিস্টেম প্যাকেজগুলি সংশোধন করা হয়েছে। এর মধ্যে রয়েছে:
- এওএসপি ডায়ালার (প্যাকেজ/অ্যাপ্লিকেশন/ডায়ালার)
- ডেস্ক ক্লক (প্যাকেজ/অ্যাপ্লিকেশন/ডেস্কক্লক)
- ল্যাটিনিম (প্যাকেজ/ইনপুটমেথডস/ল্যাটিনিম)*
- সেটিংস অ্যাপ্লিকেশন (প্যাকেজ/অ্যাপ্লিকেশন/সেটিংস)*
- সিস্টেমুই (ফ্রেমওয়ার্ক/বেস/প্যাকেজ/সিস্টেমুই)**
* সিস্টেম অ্যাপ্লিকেশনগুলি যা defaultToDeviceProtectedStorage
ম্যানিফেস্ট অ্যাট্রিবিউট ব্যবহার করে
এনক্রিপশন সচেতন অ্যাপ্লিকেশন এবং পরিষেবাদির আরও উদাহরণ এওএসপি উত্স গাছের ফ্রেমওয়ার্ক বা প্যাকেজ ডিরেক্টরিতে কমান্ড mangrep directBootAware
চালিয়ে পাওয়া যাবে।
নির্ভরতা
নিরাপদে এফবিই এর এওএসপি বাস্তবায়ন ব্যবহার করতে, একটি ডিভাইসকে নিম্নলিখিত নির্ভরতাগুলি পূরণ করতে হবে:
- এক্সট 4 এনক্রিপশন বা এফ 2 এফএস এনক্রিপশনের জন্য কার্নেল সমর্থন ।
- HAL সংস্করণ 1.0 বা তার বেশি সহ কিমাস্টার সমর্থন । কিউমার 0.3 এর পক্ষে কোনও সমর্থন নেই কারণ এটি প্রয়োজনীয় ক্ষমতা সরবরাহ করে না বা এনক্রিপশন কীগুলির জন্য পর্যাপ্ত সুরক্ষা নিশ্চিত করে না।
- ডি কীগুলির জন্য সুরক্ষা সরবরাহের জন্য কিমাস্টার/ কীস্টোর এবং গেটকিপারকে অবশ্যই একটি বিশ্বস্ত এক্সিকিউশন এনভায়রনমেন্টে (টিইই) প্রয়োগ করতে হবে যাতে কোনও অননুমোদিত ওএস (কাস্টম ওএস ডিভাইসে ফ্ল্যাশ করা) কেবল ডি কীগুলির জন্য অনুরোধ করতে পারে না।
- বিশ্বাসের হার্ডওয়্যার রুট এবং কিমাস্টার ইনিশিয়ালাইজেশনের সাথে আবদ্ধ যাচাই করা বুটটি অননুমোদিত অপারেটিং সিস্টেমের মাধ্যমে ডি কীগুলি অ্যাক্সেসযোগ্য নয় তা নিশ্চিত করার জন্য প্রয়োজন।
বাস্তবায়ন
প্রথম এবং সর্বাগ্রে, অ্যালার্ম ক্লকস, ফোন এবং অ্যাক্সেসিবিলিটি বৈশিষ্ট্যগুলির মতো অ্যাপ্লিকেশনগুলি অ্যান্ড্রয়েড করা উচিত: ডাইরেক্ট বুট বিকাশকারী ডকুমেন্টেশন অনুসারে ডাইরেক্টবুটওয়্যার।
কার্নেল সমর্থন
এক্সট 4 এবং এফ 2 এফএস এনক্রিপশনের জন্য কার্নেল সমর্থন অ্যান্ড্রয়েড কমন কার্নেলস, সংস্করণ 3.18 এবং উচ্চতরগুলিতে উপলব্ধ। এটি 5.1 বা উচ্চতর সংস্করণ এমন একটি কার্নেলে সক্ষম করতে, ব্যবহার:
CONFIG_FS_ENCRYPTION=y
পুরানো কার্নেলগুলির জন্য, যদি আপনার ডিভাইসের userdata
ফাইল সিস্টেমটি ext4 হয় তবে CONFIG_EXT4_ENCRYPTION=y
ব্যবহার করুন বা আপনার ডিভাইসের userdata
ফাইল সিস্টেমটি এফ 2 এফএস হলে CONFIG_F2FS_FS_ENCRYPTION=y
ব্যবহার করুন।
যদি আপনার ডিভাইসটি গ্রহণযোগ্য স্টোরেজ সমর্থন করে বা অভ্যন্তরীণ স্টোরেজে মেটাডেটা এনক্রিপশন ব্যবহার করে তবে মেটাডেটা এনক্রিপশন ডকুমেন্টেশনে বর্ণিত হিসাবে মেটাডেটা এনক্রিপশনের জন্য প্রয়োজনীয় কার্নেল কনফিগারেশন বিকল্পগুলি সক্ষম করে।
EXT4 বা F2FS এনক্রিপশনের জন্য কার্যকরী সমর্থন ছাড়াও, ডিভাইস নির্মাতাদের ফাইল-ভিত্তিক এনক্রিপশন গতি বাড়ানোর জন্য এবং ব্যবহারকারীর অভিজ্ঞতা উন্নত করতে ক্রিপ্টোগ্রাফিক ত্বরণ সক্ষম করা উচিত। উদাহরণস্বরূপ, এআরএম 64-ভিত্তিক ডিভাইসগুলিতে, এআরএমভি 8 সিই (ক্রিপ্টোগ্রাফি এক্সটেনশনস) ত্বরণ নিম্নলিখিত কার্নেল কনফিগারেশন বিকল্পগুলি সেট করে সক্ষম করা যেতে পারে:
CONFIG_CRYPTO_AES_ARM64_CE_BLK=y CONFIG_CRYPTO_SHA2_ARM64_CE=y
কর্মক্ষমতা আরও উন্নত করতে এবং বিদ্যুতের ব্যবহার হ্রাস করতে, ডিভাইস নির্মাতারা ইনলাইন এনক্রিপশন হার্ডওয়্যার বাস্তবায়নের বিষয়টিও বিবেচনা করতে পারে, যা স্টোরেজ ডিভাইসে/যাওয়ার পথে ডেটা এনক্রিপ্ট করে/ডিক্রিপ্ট করে। অ্যান্ড্রয়েড কমন কার্নেলগুলিতে (সংস্করণ 4.14 এবং উচ্চতর) একটি ফ্রেমওয়ার্ক রয়েছে যা হার্ডওয়্যার এবং বিক্রেতা ড্রাইভার সমর্থন উপলব্ধ থাকাকালীন ইনলাইন এনক্রিপশন ব্যবহার করার অনুমতি দেয়। ইনলাইন এনক্রিপশন ফ্রেমওয়ার্কটি নিম্নলিখিত কার্নেল কনফিগারেশন বিকল্পগুলি সেট করে সক্ষম করা যেতে পারে:
CONFIG_BLK_INLINE_ENCRYPTION=y CONFIG_FS_ENCRYPTION=y CONFIG_FS_ENCRYPTION_INLINE_CRYPT=y
যদি আপনার ডিভাইসটি ইউএফএস-ভিত্তিক স্টোরেজ ব্যবহার করে তবে সক্ষম করুন:
CONFIG_SCSI_UFS_CRYPTO=y
যদি আপনার ডিভাইসটি EMMC- ভিত্তিক স্টোরেজ ব্যবহার করে তবে সক্ষম করুন:
CONFIG_MMC_CRYPTO=y
ফাইল-ভিত্তিক এনক্রিপশন সক্ষম করুন
কোনও ডিভাইসে এফবিই সক্ষম করার জন্য এটি অভ্যন্তরীণ স্টোরেজ ( userdata
) এ সক্ষম করার প্রয়োজন। এটি স্বয়ংক্রিয়ভাবে গ্রহণযোগ্য স্টোরেজে এফবিই সক্ষম করে; তবে, গ্রহণযোগ্য স্টোরেজে এনক্রিপশন ফর্ম্যাটটি প্রয়োজনে ওভাররাইড করা যেতে পারে।
অভ্যন্তরীণ স্টোরেজ
এফবিই বিকল্পটি fileencryption=contents_encryption_mode[:filenames_encryption_mode[:flags]]
userdata
জন্য fstab
লাইনের FS_MGR_FLAGS কলামে। এই বিকল্পটি অভ্যন্তরীণ স্টোরেজে এনক্রিপশন ফর্ম্যাটটি সংজ্ঞায়িত করে। এটিতে তিনটি পর্যন্ত কলোন-বিচ্ছিন্ন পরামিতি রয়েছে:
-
contents_encryption_mode
প্যারামিটারটি সংজ্ঞায়িত করে যে কোন ক্রিপ্টোগ্রাফিক অ্যালগরিদম ফাইলের বিষয়বস্তুগুলি এনক্রিপ্ট করতে ব্যবহৃত হয়। এটি হয়aes-256-xts
বাadiantum
হতে পারে। অ্যান্ড্রয়েড 11 যেহেতু এটি ডিফল্ট অ্যালগরিদম নির্দিষ্ট করতে খালি রেখে দেওয়া যেতে পারে, যাaes-256-xts
। -
filenames_encryption_mode
প্যারামিটারটি সংজ্ঞায়িত করে যে কোন ক্রিপ্টোগ্রাফিক অ্যালগরিদম ফাইলের নামগুলি এনক্রিপ্ট করতে ব্যবহৃত হয়। এটি হয়aes-256-cts
,aes-256-heh
,adiantum
, বাaes-256-hctr2
হতে পারে। যদি নির্দিষ্ট না করা হয় তবে এটিaes-256-cts
ডিফল্ট হয় যদিcontents_encryption_mode
aes-256-xts
হয়, বাadiantum
যদিcontents_encryption_mode
adiantum
হয়। - অ্যান্ড্রয়েড 11 -এ নতুন
flags
প্যারামিটারটি+
অক্ষর দ্বারা পৃথক করা পতাকাগুলির একটি তালিকা। নিম্নলিখিত পতাকাগুলি সমর্থিত:-
v1
পতাকা সংস্করণ 1 এনক্রিপশন নীতি নির্বাচন করে;v2
পতাকা সংস্করণ 2 এনক্রিপশন নীতি নির্বাচন করে। সংস্করণ 2 এনক্রিপশন নীতিগুলি আরও সুরক্ষিত এবং নমনীয় কী ডেরাইভেশন ফাংশন ব্যবহার করে। ডিফল্টটি ভি 2 হয় যদি ডিভাইসটি অ্যান্ড্রয়েড 11 বা উচ্চতর (ro.product.first_api_level
দ্বারা নির্ধারিত হয়), বা ভি 1 যদি ডিভাইসটি অ্যান্ড্রয়েড 10 বা তার চেয়ে কম চালু থাকে তবে ভি 1। -
inlinecrypt_optimized
ফ্ল্যাগ একটি এনক্রিপশন ফর্ম্যাট নির্বাচন করে যা ইনলাইন এনক্রিপশন হার্ডওয়্যারগুলির জন্য অনুকূলিত যা প্রচুর সংখ্যক কীগুলি দক্ষতার সাথে পরিচালনা করে না। এটি প্রতি ফাইলের একের পরিবর্তে কেবল একটি ফাইলের বিষয়বস্তু এনক্রিপশন কী অর্জন করে এটি করে। আইভিএস (প্রারম্ভিক ভেক্টর) এর প্রজন্ম সেই অনুযায়ী সামঞ্জস্য করা হয়। -
emmc_optimized
পতাকাটিinlinecrypt_optimized
অনুরূপ, তবে এটি একটি আইভি প্রজন্মের পদ্ধতিও নির্বাচন করে যা আইভিএসকে 32 বিট সীমাবদ্ধ করে। এই পতাকাটি কেবল ইনলাইন এনক্রিপশন হার্ডওয়্যারগুলিতে ব্যবহার করা উচিত যা জেডেক ইএমএমসি ভি 5.2 স্পেসিফিকেশন মেনে চলে এবং তাই কেবল 32-বিট আইভিএস সমর্থন করে। অন্যান্য ইনলাইন এনক্রিপশন হার্ডওয়্যারে, পরিবর্তেinlinecrypt_optimized
ব্যবহার করুন। এই পতাকাটি কখনই ইউএফএস-ভিত্তিক স্টোরেজে ব্যবহার করা উচিত নয়; ইউএফএস স্পেসিফিকেশন 64-বিট আইভি ব্যবহারের অনুমতি দেয়। - হার্ডওয়্যার-মোড়ানো কীগুলি সমর্থন করে এমন ডিভাইসগুলিতে,
wrappedkey_v0
পতাকা এফবিইর জন্য হার্ডওয়্যার-মোড়ানো কীগুলির ব্যবহার সক্ষম করে। এটি কেবলinlinecrypt
মাউন্ট বিকল্পের সাথে একত্রে ব্যবহার করা যেতে পারে এবং হয়inlinecrypt_optimized
বাemmc_optimized
পতাকা। -
dusize_4k
পতাকা এনক্রিপশন ডেটা ইউনিটের আকারকে 4096 বাইট হতে বাধ্য করে এমনকি যখন ফাইল সিস্টেম ব্লকের আকার 4096 বাইট না হয়। এনক্রিপশন ডেটা ইউনিটের আকার হ'ল ফাইল সামগ্রী এনক্রিপশনের গ্রানুলারিটি। এই পতাকাটি অ্যান্ড্রয়েড 15 সাল থেকে উপলভ্য This এই পতাকাটি কেবলমাত্র ইনলাইন এনক্রিপশন হার্ডওয়্যার ব্যবহার সক্ষম করতে ব্যবহার করা উচিত যা 4096 বাইটের চেয়ে 4096 বাইটের চেয়ে বড় ডেটা ইউনিটগুলিকে সমর্থন করে না 4096 বাইটের চেয়ে বড় ব্যবহার করে এবং এটি F2FS ব্যবহার করে ফাইল সিস্টেম
-
আপনি যদি ইনলাইন এনক্রিপশন হার্ডওয়্যার ব্যবহার না করে থাকেন তবে বেশিরভাগ ডিভাইসের জন্য প্রস্তাবিত সেটিংটি হ'ল fileencryption=aes-256-xts
। আপনি যদি ইনলাইন এনক্রিপশন হার্ডওয়্যার ব্যবহার করছেন তবে বেশিরভাগ ডিভাইসের জন্য প্রস্তাবিত সেটিংটি হ'ল fileencryption=aes-256-xts:aes-256-cts:inlinecrypt_optimized
(বা সমতুল্য fileencryption=::inlinecrypt_optimized
)। On devices without any form of AES acceleration, Adiantum can be used instead of AES by setting fileencryption=adiantum
.
Since Android 14, AES-HCTR2 is the preferred mode of filenames encryption for devices with accelerated cryptography instructions. However, only newer Android kernels support AES-HCTR2. In a future Android release, it is planned to become the default mode for filenames encryption. If your kernel has AES-HCTR2 support, it can be enabled for filenames encryption by setting filenames_encryption_mode
to aes-256-hctr2
. In the simplest case this would be done with fileencryption=aes-256-xts:aes-256-hctr2
.
On devices that launched with Android 10 or lower, fileencryption=ice
is also accepted to specify the use of the FSCRYPT_MODE_PRIVATE
file contents encryption mode. This mode is unimplemented by the Android common kernels, but it could be implemented by vendors using custom kernel patches. The on-disk format produced by this mode was vendor-specific. On devices launching with Android 11 or higher, this mode is no longer allowed and a standard encryption format must be used instead.
By default, file contents encryption is done using the Linux kernel's cryptography API. If you want to use inline encryption hardware instead, also add the inlinecrypt
mount option. For example, a full fstab
line might look like:
/dev/block/by-name/userdata /data f2fs nodev,noatime,nosuid,errors=panic,inlinecrypt wait,fileencryption=aes-256-xts:aes-256-cts:inlinecrypt_optimized
Adoptable storage
Since Android 9, FBE and adoptable storage can be used together.
Specifying the fileencryption
fstab option for userdata
also automatically enables both FBE and metadata encryption on adoptable storage. However, you can override the FBE or metadata encryption formats on adoptable storage by setting properties in PRODUCT_PROPERTY_OVERRIDES
.
On devices that launched with Android 11 or higher, use the following properties:
-
ro.crypto.volume.options
(new in Android 11) selects the FBE encryption format on adoptable storage. It has the same syntax as the argument to thefileencryption
fstab option, and it uses the same defaults. See the recommendations forfileencryption
above for what to use here. -
ro.crypto.volume.metadata.encryption
selects the metadata encryption format on adoptable storage. See the metadata encryption documentation .
On devices that launched with Android 10 or lower, use the following properties:
-
ro.crypto.volume.contents_mode
selects the contents encryption mode. This is equivalent to the first colon-separated field ofro.crypto.volume.options
. -
ro.crypto.volume.filenames_mode
selects the filenames encryption mode. This is equivalent to the second colon-separated field ofro.crypto.volume.options
, except that the default on devices that launched with Android 10 or lower isaes-256-heh
. On most devices, this needs to be explicitly overridden toaes-256-cts
. -
ro.crypto.fde_algorithm
andro.crypto.fde_sector_size
select the metadata encryption format on adoptable storage. See the metadata encryption documentation .
Integrate with Keymaster
The Keymaster HAL should be started as part of the early_hal
class. This is because FBE requires that Keymaster be ready to handle requests by the post-fs-data
boot phase, which is when vold
sets up the initial keys.
ডিরেক্টরি বাদ দিন
init
applies the system DE key to all top-level directories of /data
, except for directories that must be unencrypted such as the directory that contains the system DE key itself and directories that contain user CE or DE directories. Encryption keys apply recursively and cannot be overridden by subdirectories.
In Android 11 and higher, the key that init
applies to directories can be controlled by the encryption=<action>
argument to the mkdir
command in init scripts. The possible values of <action>
are documented in the README for the Android init language .
In Android 10, the init
encryption actions were hardcoded into the following location:
/system/extras/libfscrypt/fscrypt_init_extensions.cpp
In Android 9 and earlier, the location was:
/system/extras/ext4_utils/ext4_crypt_init_extensions.cpp
It is possible to add exceptions to prevent certain directories from being encrypted at all. If modifications of this sort are made then the device manufacturer should include SELinux policies that only grant access to the apps that need to use the unencrypted directory. This should exclude all untrusted apps.
The only known acceptable use case for this is in support of legacy OTA capabilities.
Support Direct Boot in system apps
Make apps Direct Boot aware
To facilitate rapid migration of system apps, there are two new attributes that can be set at the app level. The defaultToDeviceProtectedStorage
attribute is available only to system apps. The directBootAware
attribute is available to all.
<application android:directBootAware="true" android:defaultToDeviceProtectedStorage="true">
The directBootAware
attribute at the app level is shorthand for marking all components in the app as being encryption aware.
The defaultToDeviceProtectedStorage
attribute redirects the default app storage location to point at DE storage instead of pointing at CE storage. System apps using this flag must carefully audit all data stored in the default location, and change the paths of sensitive data to use CE storage. Device manufactures using this option should carefully inspect the data that they are storing to ensure that it contains no personal information.
When running in this mode, the following System APIs are available to explicitly manage a Context backed by CE storage when needed, which are equivalent to their Device Protected counterparts.
-
Context.createCredentialProtectedStorageContext()
-
Context.isCredentialProtectedStorage()
Support multiple users
Each user in a multi-user environment gets a separate encryption key. Every user gets two keys: a DE and a CE key. User 0 must log into the device first as it is a special user. This is pertinent for Device Administration uses.
Crypto-aware apps interact across users in this manner: INTERACT_ACROSS_USERS
and INTERACT_ACROSS_USERS_FULL
allow an app to act across all the users on the device. However, those apps can access only CE-encrypted directories for users that are already unlocked.
An app might be able to interact freely across the DE areas, but one user unlocked does not mean that all the users on the device are unlocked. The app should check this status before trying to access these areas.
Each work profile user ID also gets two keys: DE and CE. When the work challenge is met, the profile user is unlocked and the Keymaster (in TEE) can provide the profile's TEE key.
Handle updates
The recovery partition is unable to access the DE-protected storage on the userdata partition. Devices implementing FBE are strongly recommended to support OTA using A/B system updates . As the OTA can be applied during normal operation there is no need for recovery to access data on the encrypted drive.
When using a legacy OTA solution, which requires recovery to access the OTA file on the userdata
partition:
- Create a top-level directory (for example
misc_ne
) in theuserdata
partition. - Configure this top-level directory to be unencrypted (see Excluding directories ).
- Create a directory within the top-level directory to hold OTA packages.
- Add an SELinux rule and file contexts to control access to this directory and it contents. Only the process or apps receiving OTA updates should be able to read and write to this directory. No other app or process should have access to this directory.
বৈধতা
To ensure the implemented version of the feature works as intended, first run the many CTS encryption tests, such as DirectBootHostTest and EncryptionTest .
If the device is running Android 11 or higher, also run vts_kernel_encryption_test :
atest vts_kernel_encryption_test
বা:
vts-tradefed run vts -m vts_kernel_encryption_test
In addition, device manufacturers can perform the following manual tests. On a device with FBE enabled:
- Check that
ro.crypto.state
exists- Ensure
ro.crypto.state
is encrypted
- Ensure
- Check that
ro.crypto.type
exists- Ensure
ro.crypto.type
is set tofile
- Ensure
Additionally, testers can verify that CE storage is locked before the device has been unlocked for the first time since boot. To do this, use a userdebug
or eng
build, set a PIN, pattern, or password on the main user, and reboot the device. Before unlocking the device, run the following command to check the CE storage of the main user. If the device uses Headless System User Mode (most Automotive devices), the main user is user 10, so run:
adb root; adb shell ls /data/user/10
On other devices (most non-Automotive devices), the main user is user 0, so run:
adb root; adb shell ls /data/user/0
Verify that the listed filenames are Base64-encoded, indicating that the filenames are encrypted and the key to decrypt them is not yet available. If the filenames are listed in plaintext, something is wrong.
Device manufacturers are also encouraged to explore running the upstream Linux tests for fscrypt on their devices or kernels. These tests are part of the xfstests filesystem test suite. However, these upstream tests are not offically supported by Android.
AOSP implementation details
This section provides details on the AOSP implementation and describes how file-based encryption works. It should not be necessary for device manufacturers to make any changes here to use FBE and Direct Boot on their devices.
fscrypt encryption
The AOSP implementation uses "fscrypt" encryption (supported by ext4 and f2fs) in the kernel and normally is configured to:
- Encrypt file contents with AES-256 in XTS mode
- Encrypt file names with AES-256 in CBC-CTS mode
Adiantum encryption is also supported. When Adiantum encryption is enabled, both file contents and file names are encrypted with Adiantum.
fscrypt supports two versions of encryption policies: version 1 and version 2. Version 1 is deprecated, and the CDD requirements for devices launching with Android 11 and higher are only compatible with version 2. Version 2 encryption policies use HKDF-SHA512 to derive the actual encryption keys from the userspace-supplied keys.
For more information about fscrypt, see the upstream kernel documentation .
স্টোরেজ ক্লাস
The following table lists the FBE keys and the directories they protect in more detail:
স্টোরেজ ক্লাস | বর্ণনা | ডিরেক্টরি |
---|---|---|
এনক্রিপ্ট করা হয়নি | Directories in /data that can't be or don't need to be protected by FBE. On devices that use metadata encryption , these directories aren't truly unencrypted but rather are protected by the metadata encryption key which is equivalent to System DE. |
|
System DE | Device-encrypted data not tied to a particular user |
|
Per-boot | Ephemeral system files that don't need to survive a reboot | /data/per_boot |
User CE (internal) | Per-user credential-encrypted data on internal storage |
|
User DE (internal) | Per-user device-encrypted data on internal storage |
|
User CE (adoptable) | Per-user credential-encrypted data on adoptable storage |
|
User DE (adoptable) | Per-user device-encrypted data on adoptable storage |
|
Key storage and protection
All FBE keys are managed by vold
and are stored encrypted on-disk, except for the per-boot key which is not stored at all. The following table lists the locations in which the various FBE keys are stored:
কী প্রকার | Key location | Storage class of key location |
---|---|---|
System DE key | /data/unencrypted | এনক্রিপ্ট করা হয়নি |
User CE (internal) keys | /data/misc/vold/user_keys/ce/${user_id} | System DE |
User DE (internal) keys | /data/misc/vold/user_keys/de/${user_id} | System DE |
User CE (adoptable) keys | /data/misc_ce/${user_id}/vold/volume_keys/${volume_uuid} | User CE (internal) |
User DE (adoptable) keys | /data/misc_de/${user_id}/vold/volume_keys/${volume_uuid} | User DE (internal) |
As shown in the preceding table, most FBE keys are stored in directories that are encrypted by another FBE key. Keys cannot be unlocked until the storage class that contains them has been unlocked.
vold
also applies a layer of encryption to all FBE keys. Every key besides CE keys for internal storage is encrypted with AES-256-GCM using its own Keystore key that is not exposed outside the TEE. This ensures that FBE keys cannot be unlocked unless a trusted operating system has booted, as enforced by Verified Boot . Rollback resistance is also requested on the Keystore key, which allows FBE keys to be securely deleted on devices where Keymaster supports rollback resistance. As a best-effort fallback for when rollback resistance is unavailable, the SHA-512 hash of 16384 random bytes stored in the secdiscardable
file stored alongside the key is used as the app ID tag of the Keystore key. All these bytes need to be recovered to recover an FBE key.
CE keys for internal storage receive a stronger level of protection that ensures they cannot be unlocked without knowing either the user's Lock Screen Knowledge Factor (LSKF) (PIN, pattern, or password), a secure passcode reset token , or both the client-side and server-side keys for a Resume-on-Reboot operation. Passcode reset tokens are only allowed to be created for work profiles and fully managed devices .
To achieve this, vold
encrypts each CE key for internal storage using an AES-256-GCM key derived from the user's synthetic password . The synthetic password is an immutable high-entropy cryptographic secret that is randomly generated for each user. LockSettingsService
in system_server
manages the synthetic password and the ways in which it is protected.
To protect the synthetic password with the LSKF, LockSettingsService
first stretches the LSKF by passing it through scrypt
, targeting a time of about 25 ms and a memory usage of about 2 MiB. Since LSKFs are usually short, this step usually does not provide much security. The main layer of security is the Secure Element (SE) or TEE-enforced ratelimiting described below.
If the device has a Secure Element (SE), then LockSettingsService
maps the stretched LSKF to a high-entropy random secret stored in the SE using the Weaver HAL . LockSettingsService
then encrypts the synthetic password twice: first with a software key derived from the stretched LSKF and the Weaver secret, and second with a non-auth-bound Keystore key. This provides SE-enforced ratelimiting of LSKF guesses.
If the device doesn't have a SE, then LockSettingsService
instead uses the stretched LSKF as a Gatekeeper password. LockSettingsService
then encrypts the synthetic password twice: first with a software key derived from the stretched LSKF and the hash of a secdiscardable file, and second with a Keystore key that is auth-bound to the Gatekeeper enrollment. This provides TEE-enforced ratelimiting of LSKF guesses.
When the LSKF is changed, LockSettingsService
deletes all information associated with the binding of the synthetic password to the old LSKF. On devices that support Weaver or rollback resistant Keystore keys, this guarantees secure deletion of the old binding. For this reason, the protections described here are applied even when the user does not have an LSKF.