ডিভাইস আইডেন্টিফায়ার কম্পোজিশন ইঞ্জিন (DICE)-এর জন্য SDV প্রোফাইলটি হলো DICE-এর জন্য অ্যান্ড্রয়েড প্রোফাইলের একটি বর্ধিত রূপ। SDV-তে, একটি VM দুটি সমান্তরাল DICE চেইন ব্যবহার করে:
- নিরাপদ বিশ্ব ডাইস চেইন
- অ্যান্ড্রয়েড এসডিভি ডাইস চেইন
DICE-এর জন্য অ্যান্ড্রয়েড প্রোফাইলের কনফিগারেশন ডেসক্রিপ্টরের এই ফিল্ডগুলি নিম্নলিখিত প্রতিটি চেইনের জন্য প্রাসঙ্গিক:
| নাম | চাবি | প্রকার | বর্ণনা |
|---|---|---|---|
| উপাদানের নাম | -70002 | tstr | প্রতিটি CDI লেয়ারে ব্যবহারের জন্য প্রস্তাবিত । কম্পোনেন্টের নামটি একটি যানবাহন বা যানবাহন প্ল্যাটফর্মে Android SDV VM চালনাকারী হার্ডওয়্যারের সমস্ত DICE চেইনের মধ্যে পর্যায়টিকে দ্ব্যর্থহীনভাবে শনাক্ত করে। |
| নিরাপত্তা সংস্করণ | -70005 | uint | প্রতিটি CDI পর্যায়ে আবশ্যক। এটি এমন একটি DICE পলিসি নির্ধারণ করতে সক্ষম করে যা অসুরক্ষিত রিমোট VM সংস্করণগুলিকে SDV সুরক্ষিত মেশে যোগদান করা থেকে বিরত রাখে। |
| কম্পোনেন্ট ইনস্ট্যান্সের নাম | -70007 | tstr | প্রথম VM-নির্দিষ্ট CDI লেয়ারে এটি আবশ্যক। উদাহরণস্বরূপ, হাইপারভাইজরের পরে, Android SDV DICE চেইনের জন্য। SDV ইনস্ট্যান্সের নাম। যদি একাধিক CDI লেয়ারে কম্পোনেন্ট ইনস্ট্যান্সের নামটি থাকে, তবে প্রতিটি লেয়ারের মান অবশ্যই একই হতে হবে। |
নিরাপদ বিশ্ব ডাইস চেইন
সিকিউর ওয়ার্ল্ড ডাইস চেইনটি সেই একই চেইন যা অ্যান্ড্রয়েডের রিমোট কী প্রভিশনিং (RKP) সার্ভার অ্যান্ড্রয়েড ডিভাইসগুলো থেকে গ্রহণ করে। IRemotelyProvisionedComponent HAL-এর generateCertificateRequestV2() এই ডাইস চেইনটিকে অ্যান্ড্রয়েডের কাছে প্রকাশ করে।
এই সারণিতে একটি নমুনা সিকিওর ওয়ার্ল্ড ডাইস চেইন দেখানো হয়েছে:
| বুট পর্যায় | ডাইস সিডিআই স্তর | ইস্যুকারী |
|---|---|---|
| প্রাথমিক বুটলোডার | CDI[0] | ইউডিএস |
| সেকেন্ডারি বুটলোডার | CDI[1] | প্রাথমিক বুটলোডার |
| টি বুট | CDI[2] | সেকেন্ডারি বুটলোডার |
| KeyMint TA বুট | CDI[3] (পাতা) | টিইই |
KeyMint বিশ্বস্ত অ্যাপ্লিকেশন (TA) প্রয়োগ করতে, এই বিকল্পগুলির মধ্যে একটি ব্যবহার করুন:
- সকল SDV VM-এর জন্য একটিমাত্র KeyMint ইনস্ট্যান্স: আপনাকে অবশ্যই সকল VM-এর জন্য একটিমাত্র CDI নির্ধারণ করতে হবে।
অথবা,
- প্রতিটি SDV VM-এর জন্য একটি KeyMint ইনস্ট্যান্স: আপনাকে অবশ্যই প্রতিটি VM-এর জন্য একটি ভিন্ন CDI ভ্যালু নির্ধারণ করতে হবে। প্রতিটি CDI ভ্যালুতে অবশ্যই একটি কম্পোনেন্ট ইনস্ট্যান্স নেম থাকতে হবে যা VM-এর কম্পোনেন্ট ইনস্ট্যান্স নেমের সাথে মেলে।
অ্যান্ড্রয়েড এসডিভি ডাইস চেইন
অ্যান্ড্রয়েড এসডিভি ডাইস চেইন, হাইপারভাইজরের মধ্য দিয়ে এসডিভি ভিএম-এ চলমান অ্যান্ড্রয়েড হাই-লেভেল অপারেটিং সিস্টেম (এইচএলওএস)-এ পৌঁছানো বুট পাথে চলমান সফটওয়্যারকে প্রত্যয়িত করে।
এই সারণিতে একটি নমুনা অ্যান্ড্রয়েড SDV DICE চেইন দেখানো হয়েছে:
| বুট পর্যায় | ডাইস সিডিআই স্তর | ইস্যুকারী |
|---|---|---|
| প্রাথমিক বুটলোডার | CDI[0] | ইউডিএস |
| সেকেন্ডারি বুটলোডার | CDI[1] | প্রাথমিক বুটলোডার |
| হাইপারভাইজর | CDI[2] | সেকেন্ডারি বুটলোডার |
| অ্যান্ড্রয়েড এইচএলওএস | CDI[3] (পাতা) | হাইপারভাইজর ১- এর অ্যান্ড্রয়েড লোডার |
১ হাইপারভাইজর গেস্ট-এ অ্যান্ড্রয়েড বুটলোডারকে একটি লেয়ার হিসেবে প্রত্যয়িত করে। অ্যান্ড্রয়েড বুটলোডার অ্যান্ড্রয়েড HLOS-কে প্রত্যয়িত করে।
অ্যান্ড্রয়েড এইচএলওএস সিডিআই সার্টিফিকেট
অ্যান্ড্রয়েড বুটলোডার (অথবা হাইপারভাইজর, যদি কোনো অ্যান্ড্রয়েড বুটলোডার না থাকে কিন্তু হাইপারভাইজরের মধ্যে ভিএম লোড করার জন্য শুধু একটি অ্যান্ড্রয়েড "লোডার" প্রোগ্রাম থাকে) অ্যান্ড্রয়েড এইচএলওএস সিডিআই সার্টিফিকেটে স্বাক্ষর করে এবং অ্যান্ড্রয়েড এইচএলওএস-কে কভার করে। উদাহরণস্বরূপ, এটি সেই সমস্ত কোডকে কভার করে যা অ্যান্ড্রয়েড বুটলোডার অ্যান্ড্রয়েড ভেরিফাইড বুট (এভিবি) অনুযায়ী যাচাই করে।
অ্যান্ড্রয়েড HLOS CDI সার্টিফিকেটে অবশ্যই অ্যান্ড্রয়েড ওএস-এর SDV-নির্দিষ্ট এমন কিছু ভ্যালু থাকতে হবে যা নিরাপত্তা ঝুঁকি প্রশমিত করে। উদাহরণস্বরূপ, পরিচিত দুর্বলতাযুক্ত VM-গুলোকে SDV সিকিউর মেশ থেকে নিষিদ্ধ করার মাধ্যমে সম্ভাব্য গোপনীয় তথ্য ফাঁস হওয়া প্রতিরোধ করা হয়। AVB ভেরিফিকেশন এই ভ্যালুগুলোর বেশিরভাগই সরবরাহ করে থাকে।
এগুলো TEE-তে থাকা KeyMint-এর কাছেও হস্তান্তর করা হয়, যেখানে SecureWorld DICE চেইনের লিফ CDI দ্বারা সার্টিফিকেটটিতে স্বাক্ষর করা হয় এবং কোর অ্যান্ড্রয়েডে কী ও আইডি অ্যাটেস্টেশনের মতো ফিচারগুলো সক্রিয় করার জন্য DeviceInfo-এর মাধ্যমে অ্যান্ড্রয়েডে পাঠানো হয়।
কোড ইনপুট এবং কোডহ্যাশ সার্টিফিকেট ক্ষেত্র
VBMeta ডাইজেস্ট (যা AVB যাচাইকরণের জন্য অ্যান্ড্রয়েড বুটলোডার দ্বারা উৎপাদিত একটি আউটপুট) অ্যান্ড্রয়েড HLOS-এর সফটওয়্যারকে অন্তর্ভুক্ত করে। তাই, এটি CDI সিক্রেটগুলো আহরণের জন্য android-dice-input-values হিসেবে কাজ করে এবং CDI সার্টিফিকেটের dice-cert-fields ফিল্ডে যুক্ত হয়।
AVB-এর জন্য প্রস্তাবিত হ্যাশ অ্যালগরিদম হলো SHA-256, যার ফলে একটি ৩২ বাইট দীর্ঘ VBMeta ডাইজেস্ট তৈরি হয়। Open Profile for DICE-এর বিপরীতে, Android Profile for DICE, DICE ফ্লো-এর জন্য ৩২ বাইট দীর্ঘ android-dice-input-values ব্যবহার করে android-dice-hash-algos অনুমোদন করে এবং সেইসাথে DICE সার্টিফিকেটে codeHash হিসেবে একই ৩২ বাইট দীর্ঘ ভ্যালুটি স্থাপন করে।
কনফিগারেশন বর্ণনাকারী: DICE-এর জন্য অ্যান্ড্রয়েড প্রোফাইলের ফিল্ডসমূহ
সমস্ত CDI লেয়ারের জন্য বর্ণিত বিষয়গুলো ছাড়াও, DICE-এর জন্য Android প্রোফাইলের কনফিগারেশন ডেসক্রিপ্টর ফিল্ডগুলোর ক্ষেত্রে নিম্নলিখিত নির্দিষ্ট বিষয়গুলো প্রযোজ্য:
| নাম | চাবি | প্রকার | বর্ণনা |
|---|---|---|---|
| উপাদান সংস্করণ | -70003 | int | AVB version-info-avb থেকে প্রাপ্ত সিস্টেম OS ভার্সন। এটি android.os.Build.VERSION.release এর সমান। |
| নিরাপত্তা সংস্করণ | -70005 | uint | system পার্টিশনের নিরাপত্তা প্যাচ লেভেল YYYYMMDD ফরম্যাটে। |
| আরকেপি ভিএম মার্কার | -70006 | null | RKP VM মার্কারটি ‘রিমোট কী প্রভিশনিং’-কে Android SDV DICE চেইনের জন্য সার্টিফিকেট ইস্যু করা থেকে বিরত রাখে। |
অ্যান্ড্রয়েড এসডিভি ডাইস চেইনের প্রথম সিডিআই সার্টিফিকেটে RKP VM মার্কারটি অবশ্যই থাকতে হবে, যেটি সিকিউর ওয়ার্ল্ড ডাইস চেইনের সাথে অভিন্ন নয়। এছাড়াও, পরবর্তী কোনো সিডিআই সার্টিফিকেটে এটি থাকা যাবে না , যাতে RKP সার্ভার rkp-avf-support ডাইস চেইনটিকে কোনো RKP VM থেকে আগত বলে বিবেচনা না করে।
কনফিগারেশন বর্ণনাকারী: নতুন ক্ষেত্রসমূহ
অ্যান্ড্রয়েড HLOS CDI সার্টিফিকেটের কনফিগারেশন ডেসক্রিপ্টরে অবশ্যই অ্যান্ড্রয়েড প্রোফাইল ফর ডাইস (Android Profile for DICE) দ্বারা বর্ণিত মানগুলোর বাইরেও এসডিভি (SDV) নির্দিষ্ট মান থাকতে হবে। এসডিভি প্রোফাইল ফর ডাইস (SDV Profile for DICE) এই উদ্দেশ্যে [-71000, -71999] কী-ভ্যালু পরিসরটি সংরক্ষিত রাখে। আপনি সংরক্ষিত পরিসরের বাইরের কী-ভ্যালু ব্যবহার করে ইমপ্লিমেন্টেশন-নির্দিষ্ট ফিল্ড যোগ করতে পারেন। এসডিভি নির্দিষ্ট মানগুলো হলো:
| নাম | চাবি | প্রকার | বর্ণনা |
|---|---|---|---|
| যাচাইকৃত বুট অবস্থা | -71000 | tstr | হয় green , yellow অথবা orange । |
| আঙুলের ছাপ তৈরি করুন | -71001 | tstr | এটি একটি পাঠযোগ্য স্ট্রিং যা এই বিল্ডটিকে অনন্যভাবে শনাক্ত করে, যা ro.build.fingerprint এর অনুরূপ। অ্যান্ড্রয়েড সিডিডি, ৩.২.২ বিল্ড প্যারামিটার, cdd-3-2-2 এটি সংজ্ঞায়িত করে। VBMeta এটিকে com.android.build.system.fingerprint নামক প্রপার্টি হিসেবে সংরক্ষণ করে। |
system_ext নিরাপত্তা প্যাচ স্তর | -71002 | uint | system_ext পার্টিশনের নিরাপত্তা প্যাচ লেভেল YYYYMMDD ফরম্যাটে। |
product নিরাপত্তা প্যাচ স্তর | -71003 | uint | product পার্টিশনের সিকিউরিটি প্যাচ লেভেল YYYYMMDD ফরম্যাটে। |
vendor নিরাপত্তা প্যাচ স্তর | -71004 | uint | vendor পার্টিশনের সিকিউরিটি প্যাচ লেভেল YYYYMMDD ফরম্যাটে। |
boot নিরাপত্তা প্যাচ স্তর | -71005 | uint | boot পার্টিশনের (যেটিতে লিনাক্স কার্নেল থাকে) সিকিউরিটি প্যাচ লেভেল YYYYMMDD ফরম্যাটে। |
| এসডিভি বুট মোড | -71006 | tstr | locked বা unlocked । আরও জানতে, মেশ স্ট্যাটাস এবং প্রভিশনিং দেখুন। |
অ্যান্ড্রয়েড HLOS CDI-এর মোড ইনপুট মান নির্বাচন
অ্যান্ড্রয়েড HLOS CDI সার্টিফিকেটের android-dice-mode নিম্নলিখিত সংজ্ঞা ব্যবহার করে:
| AVB আনলক করা হয়েছে | এভিবি লক করা হয়েছে | |
|---|---|---|
| এসডিভি বুট মোড আনলক করা হয়েছে | ডিবাগ | ডিবাগ |
| SDV বুট মোড লক করা আছে | কনফিগার করা হয়নি (অবৈধ) | স্বাভাবিক |
মূল ব্যুৎপত্তি ফাংশন
অ্যান্ড্রয়েড HLOS CDI-এর জন্য CDI_Attest সিক্রেট থেকে পাবলিক ও প্রাইভেট কী পেয়ার তৈরি করে এমন android-dice-kdf অবশ্যই HKDF হতে হবে এবং এর হ্যাশ ফাংশন হিসেবে SHA512 ব্যবহৃত হতে হবে।