অ্যান্ড্রয়েড 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
পতাকা।
-
আপনি যদি ইনলাইন এনক্রিপশন হার্ডওয়্যার ব্যবহার না করে থাকেন তবে বেশিরভাগ ডিভাইসের জন্য প্রস্তাবিত সেটিংটি হ'ল 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
বিদ্যমান তা পরীক্ষা করে দেখুন-
ro.crypto.type
file
-
অতিরিক্তভাবে, পরীক্ষকরা প্রাথমিক ব্যবহারকারীর উপর একটি লকস্ক্রিন সেট সহ একটি userdebug
উদাহরণ বুট করতে পারেন। তারপরে ডিভাইসে শেল adb
এবং শিকড় হয়ে উঠতে su
ব্যবহার করুন। নিশ্চিত করুন /data/data
এনক্রিপ্ট করা ফাইলের নাম রয়েছে; যদি তা না হয় তবে কিছু ভুল।
ডিভাইস নির্মাতারা তাদের ডিভাইস বা কার্নেলগুলিতে এফএসসিআরওয়াইপ্টের জন্য উজানের লিনাক্স পরীক্ষা চালানোর অন্বেষণ করতেও উত্সাহিত হয়। এই পরীক্ষাগুলি xfstests ফাইল সিস্টেম টেস্ট স্যুটের অংশ। তবে এই প্রবাহের পরীক্ষাগুলি অ্যান্ড্রয়েড দ্বারা অফিশিয়ালভাবে সমর্থিত নয়।
এওএসপি বাস্তবায়নের বিশদ
এই বিভাগটি এওএসপি বাস্তবায়নের বিশদ সরবরাহ করে এবং ফাইল-ভিত্তিক এনক্রিপশন কীভাবে কাজ করে তা বর্ণনা করে। ডিভাইস নির্মাতাদের তাদের ডিভাইসগুলিতে এফবিই এবং সরাসরি বুট ব্যবহার করতে এখানে কোনও পরিবর্তন করা প্রয়োজন হবে না।
fscrypt এনক্রিপশন
এওএসপি বাস্তবায়ন কার্নেলটিতে "এফএসসিআরওয়াইপিটি" এনক্রিপশন (এক্সট 4 এবং এফ 2 এফএস দ্বারা সমর্থিত) ব্যবহার করে এবং সাধারণত এটিতে কনফিগার করা হয়:
- এক্সটিএস মোডে AES-256 সহ ফাইল সামগ্রীগুলি এনক্রিপ্ট করুন
- সিবিসি-সিটিএস মোডে এইএস -256 সহ ফাইলের নামগুলি এনক্রিপ্ট করুন
অ্যাডিয়ান্টাম এনক্রিপশনও সমর্থিত। যখন অ্যাডিয়ান্টাম এনক্রিপশন সক্ষম করা থাকে, তখন ফাইলের সামগ্রী এবং ফাইলের নাম উভয়ই অ্যাডিয়ান্টামের সাথে এনক্রিপ্ট করা হয়।
এফএসসিআরআইপিটি এনক্রিপশন নীতিগুলির দুটি সংস্করণ সমর্থন করে: সংস্করণ 1 এবং সংস্করণ 2। সংস্করণ 1 অবমূল্যায়িত হয়েছে, এবং অ্যান্ড্রয়েড 11 এবং উচ্চতর দিয়ে প্রবর্তনকারী ডিভাইসগুলির জন্য সিডিডি প্রয়োজনীয়তাগুলি কেবলমাত্র সংস্করণ 2 এর সাথে সামঞ্জস্যপূর্ণ 2 সংস্করণ 2 এনক্রিপশন নীতিগুলি এইচকেডিএফ-SHA512 ব্যবহার করে HKDF-SHA512 আসলটি অর্জন করতে ইউজারস্পেস-সরবরাহিত কীগুলি থেকে এনক্রিপশন কীগুলি।
এফএসসিআরআইপিটি সম্পর্কে আরও তথ্যের জন্য, উজানের কার্নেল ডকুমেন্টেশন দেখুন।
স্টোরেজ ক্লাস
নিম্নলিখিত টেবিলটি এফবিই কীগুলি এবং তারা আরও বিশদে সুরক্ষিত ডিরেক্টরিগুলি তালিকাভুক্ত করে:
স্টোরেজ ক্লাস | বর্ণনা | ডিরেক্টরি |
---|---|---|
সিস্টেম ডি | ডিভাইস-এনক্রিপ্টড ডেটা কোনও নির্দিষ্ট ব্যবহারকারীর সাথে আবদ্ধ নয় | /data/system , /data/app এবং অন্যান্য বিভিন্ন উপ -ডিরেক্টরি /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
পুরানো এলএসকেএফের সাথে সিন্থেটিক পাসওয়ার্ডের বাঁধাইয়ের সাথে সম্পর্কিত সমস্ত তথ্য মুছে দেয়। ওয়েভার বা রোলব্যাক প্রতিরোধী কীস্টোর কীগুলি সমর্থন করে এমন ডিভাইসগুলিতে, এটি পুরানো বাঁধাইয়ের সুরক্ষিত মুছে ফেলার গ্যারান্টি দেয়। এই কারণে, এখানে বর্ণিত সুরক্ষাগুলি প্রয়োগ করা হয় এমনকি ব্যবহারকারীর এলএসকেএফ না থাকলেও।