অ্যান্ড্রয়েড এইচএলওএস সিডিআই হস্তান্তর

যখন অ্যান্ড্রয়েড এইচএলওএস পূর্ববর্তী পর্যায় থেকে তার অ্যান্ড্রয়েড এইচএলওএস সিডিআই মান এবং সার্টিফিকেটগুলি গ্রহণ করে, তখন এটি সেগুলি পড়ে এবং তারপরে এসডিভি সার্ভিস ডিসকভারির জন্য প্রয়োজনীয় গোপনীয় তথ্য—যেমন পাবলিক ও প্রাইভেট কী পেয়ার এবং পরবর্তী সিডিআই পর্যায়গুলি—ডিরাইভ ও ওয়াইপ করে।

এই প্রক্রিয়াটি বুটফ্লোতে যত তাড়াতাড়ি সম্ভব, দ্বিতীয় ধাপের init- এর early-init পর্যায়ে সম্পন্ন হয়। এর ফলে নিশ্চিত করা হয় যে, কোনো থার্ড-পার্টি কোড কার্যকর হওয়ার আগেই অ্যান্ড্রয়েড HLOS, CDI ভ্যালুগুলো গ্রহণ ও মুছে ফেলে।

অ্যান্ড্রয়েড বুটলোডার (অথবা হাইপারভাইজরের গেস্ট লোডার, যদি কোনো অ্যান্ড্রয়েড বুটলোডার না থাকে) নিম্নলিখিত মানগুলি SDV-এর লিনাক্স কার্নেলের মাধ্যমে অ্যান্ড্রয়েড ইউজার-স্পেসের second stage init এ প্রেরণ করে:

  • অ্যান্ড্রয়েড HLOS লেয়ারের অ্যাটেস্টেশন CDI মান।
  • অ্যান্ড্রয়েড HLOS লেয়ারের CDI মান সিল করা।
  • Android HLOS স্তর পর্যন্ত CBOR-এনকোডেড DICE চেইন।

এই মানগুলি SdvDiceHandover ফরম্যাট ব্যবহার করে। SdvDiceHandover হলো একটি CBOR-এনকোডেড ম্যাপ, যা এই CDDL ফ্র্যাগমেন্ট দ্বারা বর্ণিত:

SdvDiceHandover = {
   1 : bstr .size 32, ; CDI_Attest
   2 : bstr .size 32, ; CDI_Seal
   3 : DiceCertChain, ; Android SDV DICE chain
}

IRemotelyProvisionedComponent HAL DiceCertChain DiceCertChain এর ফরম্যাট নির্দিষ্ট করে। SdvDiceHandover জন্য আপনার ডিটারমিনিস্টিকভাবে এনকোড করা CBOR-এর প্রয়োজন নেই, যদিও এটি অত্যন্ত সুপারিশ করা হয় কারণ এটি আরও বিস্তৃত পরিসরের DICE পলিসি সমর্থন করে।

SdvDiceHandover ফরম্যাটটি নিম্নলিখিতটির সাথে খুবই সাদৃশ্যপূর্ণ:

  • Open Profile for DICE রেফারেন্স ইমপ্লিমেন্টেশন দ্বারা সংজ্ঞায়িত AndroidDiceHandover ফরম্যাট,

  • PvmfwDiceHandover ফরম্যাট যা pvmfw একটি pVM-এর কাছে DICE চেইন হস্তান্তর করতে ব্যবহার করে। উদাহরণস্বরূপ, মাইক্রোড্রয়েড।

AndroidDiceHandover বিপরীতে এবং PvmfwDiceHandover ফরম্যাটের মতোই, DiceCertChain আবশ্যক, ঐচ্ছিক নয়।

DICE কার্নেল ড্রাইভারের জন্য প্রোফাইল খুলুন

অ্যান্ড্রয়েড বুটলোডার (অথবা হাইপারভাইজরের গেস্ট লোডার, যদি কোনো বুটলোডার না থাকে) থেকে অ্যান্ড্রয়েড HLOS-এ অ্যান্ড্রয়েড HLOS CDI-এর DICE হস্তান্তর Open Profile for DICE কার্নেল ড্রাইভারের উপর নির্ভর করে। অ্যান্ড্রয়েড বুটলোডার গেস্টের মেমরির এমন একটি অঞ্চলে DICE চেইন এন্ট্রিটি লিখে রাখে, যা ডিভাইস ট্রি (DT) দ্বারা অবশ্যই নির্দিষ্ট করা থাকতে হবে।

ড্রাইভারটি ডিভাইস ট্রি (DT) দ্বারা নির্দিষ্ট করা এই মেমরি অঞ্চলটি পড়ে এবং এটিকে ইউজার স্পেসে একটি /dev/open-dice0 ডিভাইস হিসেবে প্রকাশ করে। ড্রাইভারটি এই মেমরি অঞ্চলটি পড়া এবং মুছে ফেলার অনুমতি দেয়। ওপেন প্রোফাইল ফর ডাইস (Open Profile for DICE) ড্রাইভারটি শুধুমাত্র arm64 আর্কিটেকচারে বিদ্যমান, কারণ ডিভাইস ট্রি একটি arm64-এর নিজস্ব ধারণা।

compatible প্রপার্টিতে "google,open-dice" উল্লেখ করে, ড্রাইভারের জন্য ট্যাগ করা DT-তে একটি reserved-memory নোড ব্যবহার করে Open Profile for DICE ড্রাইভার যে মেমরি অঞ্চলটি উন্মুক্ত করে, তা নির্দিষ্ট করুন। উদাহরণস্বরূপ:

reserved-memory {
  // The number of u32 cells to represent the address of a memory region
  #address-cells = <2>;
  // The number of u32 cells to represent the size of a memory region
  #size-cells = <2>;
  ranges;
  // The unit address (after the @) must match the address in the reg property
  dice@D1C30000 {
    compatible = "google,open-dice";
    no-map;
    // The address and the size of the memory region that is passed to the Open
    // Profile for DICE driver. The address must be page-aligned, and the size a
    // multiple of the page size. The first two hex numbers (cells) represent
    // the address of the memory region, the last two represent its size.
    reg = <0x0 0xD1C30000 0x0 0x1000>;
  };
};