ভার্সন বাইন্ডিং

ডিভাইসের জন্য সব KeyMint কী অবশ্যই রুট অফ ট্রাস্টের সাথে বাউন্ড হতে হবে। 'রুট অফ ট্রাস্ট' হল একটি বিটস্ট্রিং যা বুট ইমেজের স্বাক্ষর যাচাই করার জন্য ব্যবহৃত সর্বজনীন কী থেকে এবং বুটলোডার লক স্টেট থেকে পাওয়া যায়।

KeyMint কী অবশ্যই ডিভাইসের অপারেটিং সিস্টেমের ভার্সন এবং প্যাচ লেভেলের সাথেও বাউন্ড হতে হবে। Treble-এর মডিউলার স্ট্রাকচারকে সাপোর্ট করতে, এই ভার্সন বাইন্ডিংয়ে প্রতিটি পার্টিশনের জন্য আলাদা প্যাচ লেভেল অন্তর্ভুক্ত থাকে (boot, system এবং vendor)। এটি প্রতিটি পার্টিশনকে আলাদাভাবে আপডেট করার অনুমতি দেয়, পাশাপাশি রোলব্যাক সুরক্ষা প্রদান করে।

এই ভার্সন বাইন্ডিং প্রয়োগ করতে, KeyMint বিশ্বস্ত অ্যাপের (TA) এমন একটি উপায় প্রয়োজন যার মাধ্যমে বর্তমান OS ভার্সন ও প্যাচ লেভেল নিরাপদে পাওয়া যায় এবং এটি যে তথ্য পায় তা যেন রানিং সিস্টেমের সব তথ্যের সাথে ম্যাচ করে তা নিশ্চিত করা যায়।

  • Android যাচাই করা বুট (AVB) সহ ডিভাইস:
    • প্যাচ লেভেল ও OS ভার্সন অন্তর্ভুক্ত করা যেতে পারে vbmeta.img-এ, যাতে বুটলোডার সেগুলি KeyMint-কে প্রদান করতে পারে।
    • চেন করা পার্টিশনের জন্য, পার্টিশনের ভার্সন সংক্রান্ত তথ্য চেন করা VBMeta-তে থাকে।
    • সাধারণত, ভার্সন সংক্রান্ত তথ্য VBMeta struct-এ থাকা উচিত যেখানে নির্দিষ্ট পার্টিশনের জন্য যাচাইকরণের ডেটা (হ্যাশ বা হ্যাশট্রি) থাকে।
  • AVB ছাড়া ডিভাইস:
    • যাচাই করা বুট প্রয়োগ করার জন্য বুটলোডারে ভার্সন মেটাডেটার হ্যাশ প্রদান করতে হবে, যাতে বুটলোডার KeyMint-এ হ্যাশ প্রদান করতে পারে।
    • boot.img, হেডারে প্যাচ লেভেল সেভ করা চালিয়ে যেতে পারে।
    • system.img, প্যাচ লেভেল ও OS ভার্সন শুধুমাত্র-পড়ার-উপযোগী প্রপার্টিতে সেভ করা চালিয়ে যেতে পারবে।
    • vendor.img, ro.vendor.build.version.security_patch-এর কেবল পঠনযোগ্য প্রপার্টিতে প্যাচ লেভেল স্টোর করে।
    • বুটলোডার, KeyMint-এ যাচাই করা বুটের মাধ্যমে যাচাই করা সমস্ত ডেটার হ্যাশ প্রদান করতে পারে।

নিম্নলিখিত ট্যাগগুলি প্রাসঙ্গিক পার্টিশনের জন্য ভার্সন সংক্রান্ত তথ্য বর্ণনা করে:

KeyMint প্রয়োগের ক্ষেত্রে সব প্যাচ লেভেলকে স্বতন্ত্রভাবে বিবেচনা করা উচিত। সব ভার্সনের তথ্য কোনও 'কী'-এর সাথে যুক্ত ভ্যালুর সাথে মিললে, 'কী' ব্যবহার করা যাবে। ডিভাইসের বর্তমান ভার্সন যদি 'কী'-এর সাথে যুক্ত যেকোনও ভ্যালুর চেয়ে বেশি সাম্প্রতিক হয়, তাহলে 'কী' ব্যবহার করার যেকোনও প্রচেষ্টায় KeyMint KEY_REQUIRES_UPGRADE সমস্যা দেখায়। Keystore তারপর IKeyMintDevice::upgradeKey সম্পাদন করে যাতে বর্তমান প্যাচ লেভেলের সাথে আবদ্ধ একটি নতুন keyblob তৈরি করা যায় (এবং Keystore পরবর্তীতে IKeyMintDevice::deleteKey-এ কল করে আগের keyblob মুছে দেয়)।