APK স্বাক্ষর স্কিম v3.1

ওভারভিউ

Android 13 APK স্বাক্ষর স্কিম v3.1 সমর্থন করে, বিদ্যমান APK স্বাক্ষর স্কিম v3 এর একটি উন্নতি। v3.1 স্কিমটি ঘূর্ণন সম্পর্কিত APK স্বাক্ষর স্কিম v3 এর সাথে পরিচিত কিছু সমস্যার সমাধান করে। বিশেষ করে, v3.1 স্বাক্ষর স্কিমটি SDK সংস্করণ টার্গেটিং সমর্থন করে, যা রোটেশনকে প্ল্যাটফর্মের পরবর্তী প্রকাশকে লক্ষ্য করার অনুমতি দেয়।

v3.1 স্বাক্ষর স্কিমটি একটি ব্লক আইডি ব্যবহার করে যা Android 12 বা তার নিচের সংস্করণে স্বীকৃত নয়। অতএব, প্ল্যাটফর্ম নিম্নলিখিত স্বাক্ষরকারী আচরণ প্রয়োগ করে:

  • যে ডিভাইসগুলি Android 13 বা উচ্চতর চালায় সেগুলি v3.1 ব্লকে ঘোরানো স্বাক্ষর ব্যবহার করে৷
  • যে ডিভাইসগুলি Android এর পুরানো সংস্করণগুলি চালায় সেগুলি ঘোরানো স্বাক্ষরকারীকে উপেক্ষা করে এবং পরিবর্তে v3 ব্লকে আসল স্বাক্ষরকারী ব্যবহার করে৷

যে অ্যাপগুলি এখনও তাদের সাইনিং কী ঘোরায়নি তাদের কোনো অতিরিক্ত পদক্ষেপের প্রয়োজন নেই৷ যখনই এই অ্যাপগুলি ঘোরানো বেছে নেয়, সিস্টেমটি ডিফল্টরূপে v3.1 স্বাক্ষর স্কিম প্রয়োগ করে৷

v3.1 সাইনিং ব্লক

v3.1 সাইনিং ব্লকে v3 সাইনিং ব্লকের মতোই বিষয়বস্তু থাকবে, কিন্তু নতুন ব্লক আইডির সাহায্যে এই স্বাক্ষরগুলি শুধুমাত্র Android 13 এবং তার পরে চলমান ডিভাইসগুলিতে স্বীকৃত হবে। এটি অ্যাপগুলিকে মাল্টি-টার্গেট APK নিয়ে চিন্তা না করে তাদের সাইনিং কীগুলিকে নিরাপদে ঘোরানোর অনুমতি দেয় কারণ আসল স্বাক্ষরকারীকে v3 সাইনিং ব্লকে APK সাইন করতে এবং v3.1 সাইনিং ব্লকে ঘোরানো স্বাক্ষরকারী ব্যবহার করা যেতে পারে৷ এটি প্ল্যাটফর্মটিকে একটি v3.1 স্বাক্ষর যাচাই করার সময় v3 সাইনিং ব্লকের জন্য বিদ্যমান সমস্ত যাচাইকরণ কোড পুনরায় ব্যবহার করার অনুমতি দেয়।

ডিফল্টরূপে, apksig লাইব্রেরি v3.1 সাইনিং ব্লক ব্যবহার করবে যখনই সাইনিং কনফিগারে একটি ঘূর্ণিত কী এবং বংশ প্রদান করা হয়। যদি একটি অ্যাপের minSdkVersion Android 13-এর চেয়ে কম হয় এবং একটি ঘূর্ণিত কী ব্যবহার করা হচ্ছে, তাহলে মূল স্বাক্ষর কীটিও নির্দিষ্ট করতে হবে যাতে এটি v3 সাইনিং ব্লকে APK সাইন করতে ব্যবহার করা যেতে পারে। এটি বর্তমান আচরণের অনুরূপ যেখানে APK যদি Android 9 এর আগের সংস্করণকে লক্ষ্য করে তাহলে আসল স্বাক্ষরকারীর প্রয়োজন হয়৷

একটি নির্দিষ্ট SDK সংস্করণ থেকে শুরু করে লক্ষ্যবস্তু কী ঘূর্ণন সমর্থন করার জন্য, apksig লাইব্রেরি নতুন APIs প্রকাশ করবে যা ঘূর্ণনের জন্য একটি ন্যূনতম SDK সংস্করণ সেট করার অনুমতি দেবে যদি Android 13-এর চেয়ে কম একটি SDK সংস্করণ ঘূর্ণন সমর্থনের জন্য সর্বনিম্ন সংস্করণ হিসাবে নির্দিষ্ট করা হয় তবে আসল v3 ব্লক ব্যবহার করা হবে। v3.1 সাইনিং ব্লক শুধুমাত্র ঘূর্ণনের উপস্থিতিতে ব্যবহৃত হয় যেখানে রোটেশনের জন্য ন্যূনতম SDK সংস্করণটি Android 13 এবং পরবর্তীতে সেট করা হয়। v3 সাইনিং ব্লকে ঘূর্ণন ন্যূনতম SDK সংস্করণ স্ট্রিপিং সুরক্ষার জন্য একটি নতুন বৈশিষ্ট্য থাকবে৷

এপিকে বংশবৃদ্ধি অন্তর্ভুক্ত রোটেশন-মিন-এসডিকে-সংস্করণের মান v3 সাইনিং ব্লক v3.1 সাইনিং ব্লক
না ডিফল্ট বা যেকোনো মান (নীচে x দ্বারা উপস্থাপিত) মূল স্বাক্ষরকারীর সাথে স্বাক্ষরিত, Android 9 এবং পরবর্তীতে লক্ষ্য করে উপস্থিত নেই
হ্যাঁ ডিফল্ট Android 9 থেকে 12L পর্যন্ত লক্ষ্য করে আসল স্বাক্ষরকারীর সাথে স্বাক্ষর করা হয়েছে অ্যান্ড্রয়েড 13 এবং পরবর্তীতে টার্গেট করে ঘোরানো স্বাক্ষরকারীর সাথে স্বাক্ষর করা হয়েছে
হ্যাঁ x < 33 (Android 13) আবর্তিত স্বাক্ষরকারীর সাথে স্বাক্ষরিত, Android 9 এবং পরবর্তীতে লক্ষ্য করে উপস্থিত নেই
হ্যাঁ x >= 33 (Android 13) Android 9 - ( x -1) লক্ষ্য করে মূল স্বাক্ষরকারীর সাথে স্বাক্ষরিত x+ টার্গেট করে ঘোরানো স্বাক্ষরকারীর সাথে স্বাক্ষরিত

ঘূর্ণন-সম্পর্কিত সমস্যা

প্ল্যাটফর্মে নিম্নলিখিত ঘূর্ণন-সম্পর্কিত সমস্যাগুলি সমাধান করা হয়েছে:

অ্যান্ড্রয়েড 12 ফিক্স

  • প্ল্যাটফর্মটি শুধুমাত্র একটি অনুরোধকারী অ্যাপকে স্বাক্ষর করার অনুমতি দেবে যদি হয় অ্যাপের বর্তমান স্বাক্ষরকারী সাইনিং বংশের মধ্যে থাকে বা অন্য অ্যাপের বর্তমান স্বাক্ষরকারী হয়; এটি একটি অনুরোধকারী অ্যাপকে একটি স্বাক্ষরের অনুমতি প্রদানে বাধা দেয় যদি দুটি অ্যাপ স্বাক্ষর করার সেরা অনুশীলনগুলি অনুসরণ করে এবং বিভিন্ন সাইনিং কীগুলিতে ঘোরে।
  • প্ল্যাটফর্মের APK রোলব্যাক বৈশিষ্ট্যটি এমন একটি APK কে রোলব্যাক করতে পারে না যেটির সাইনিং কী ঘোরানো হয়েছে যদি না সাইনিং বংশের পূর্ববর্তী কীটির রোলব্যাক ক্ষমতা থাকে তবে এই ক্ষমতাটি ঘূর্ণনের উদ্দেশ্যকে হারায় কারণ এটি একটি নতুন প্যাকেজ আপডেট স্বাক্ষর করার অনুমতি দেয়৷ পূর্ববর্তী সাইনিং কী এবং ঘোরানো কীটি ফিরিয়ে আনা।
  • একটি APK শুধুমাত্র ঘোরানো কী দিয়ে স্বাক্ষর করা হয়েছে এবং পরে আসল কী দিয়ে স্বাক্ষর করা একটি APK দিয়ে আপডেট করা হয়েছে এবং বংশের ঘূর্ণিত কী শুধুমাত্র Android 11 এবং তার আগের ডিভাইসে চলমান ডিভাইসে বংশের ঘূর্ণিত কী দেখাবে।

অ্যান্ড্রয়েড 11 ফিক্স

  • PackageManager#checkSignatures দুটি প্যাকেজের আসল সাইনিং কী চেক করার জন্য সঠিকভাবে আপডেট করা হয়নি। এটি আসল সাইনিং কী ব্যবহার করে ইন্সট্রুমেন্টেশন APK সহ একটি ঘোরানো সাইনিং কী ব্যবহার করে অ্যাপগুলির জন্য ইন্সট্রুমেন্টেশন ভেঙে দিয়েছে।
  • একটি sharedUserId অধীনে প্যাকেজগুলি তাদের স্বাক্ষরের বংশ ভাগ করে। যখনই একটি sharedUiserId একটি আপডেট করা সাইনিং লাইনেজ সহ একটি অ্যাপ ইনস্টল বা আপডেট করা হয় তখনই সেই অ্যাপের বংশ sharedUserId এর জন্য শেয়ার করা বংশকে প্রতিস্থাপন করে (অর্থাৎ, যদি একটি অ্যাপের সাইনিং বংশ A -> B হয়, এবং একটি অ্যাপ sharedUserId আপডেট করা হয়। বংশের সাথে B -> C, তারপর sharedUserId বংশ B -> C দিয়ে প্রতিস্থাপিত হবে)। অনুরূপভাবে বংশের পূর্ববর্তী স্বাক্ষরকারীর ক্ষমতা আপডেট করা যাবে না যদি না স্বাক্ষরকারী বংশ পরিবর্তন করা হয়।

v4 ইন্টিগ্রেশন

v4 স্বাক্ষর স্কিম apksigner-কে প্রদত্ত সাইনিং কনফিগ ব্যবহার করে; ঘূর্ণনের জন্য প্রদত্ত একাধিক সাইনিং কনফিগারের ক্ষেত্রে, সর্বশেষ ঘূর্ণিত সাইনিং কনফিগ ব্যবহার করা হয়। v3.1 প্রবর্তনের আগে, v3 শুধুমাত্র এই সর্বশেষ ঘূর্ণিত সাইনিং কনফিগারেশনকে অন্তর্ভুক্ত করেছিল, তাই v4 এই কনফিগটি যেমন আছে তেমন ব্যবহার করতে সক্ষম হয়েছিল; এটির সাথে v4 স্বাক্ষর স্কিমটি ঘূর্ণন সমর্থন করতে সক্ষম হয়েছিল যেহেতু এটি সাইনিংইনফোতে ঘোরানো স্বাক্ষর কী ব্যবহার করেছিল। যদিও v4 SigningInfo-এ সম্পূর্ণ স্বাক্ষরের বংশ অন্তর্ভুক্ত করা হয় না, এটি v3 সাইনিং ব্লক থেকে টেনে আনতে সক্ষম হয় যাতে প্ল্যাটফর্মকে যেকোনো স্বাক্ষর প্রশ্নের জন্য বংশে প্রবেশের অনুমতি দেওয়া হয়। প্রদত্ত ঘূর্ণন-min-sdk-সংস্করণের জন্য ঘূর্ণন লক্ষ্য করার জন্য v3.1 ব্যবহার করা হলে, জেনেরিক v3 কনফিগারে মূল সাইনিং কনফিগারের পাশাপাশি সর্বশেষ ঘূর্ণিত সাইনিং কনফিগ উভয়ই অন্তর্ভুক্ত থাকবে। v4 স্বাক্ষর স্কিমের একটি এক্সটেনশন তৈরি করা হয়েছে যাতে v3.1 ব্লকের প্রতিটি সাইনিং কনফিগারেশনের জন্য অতিরিক্ত সাইনিং ইনফো ব্লক রয়েছে।

বৈধতা

আপনার v3.1 বাস্তবায়ন পরীক্ষা করতে, cts/hostsidetests/appsecurity/src/android/appsecurity/cts/ PkgInstallSignatureVerificationTest.java CTS পরীক্ষা চালান।

পরীক্ষা সম্পর্কে আরও তথ্যের জন্য, v3-এ যাচাইকরণ বিভাগটি দেখুন।