APK স্বাক্ষর প্রকল্প v3

অ্যান্ড্রয়েড 9 সমর্থন চাবি ঘূর্ণন APK , কোন কোন অ্যাপ একটি APK আপডেটের অংশ হিসেবে তাদের স্বাক্ষর কী পরিবর্তন করার ক্ষমতা দেয়। ঘূর্ণনকে ব্যবহারিক করতে, APK গুলিকে অবশ্যই নতুন এবং পুরনো স্বাক্ষর কী -এর মধ্যে আস্থার মাত্রা নির্দেশ করতে হবে। কী ঘূর্ণন সমর্থন করার জন্য, আমরা আপডেট করা APK স্বাক্ষর প্রকল্প v2 থেকে v3 এর নতুন এবং পুরানো চাবি ব্যবহার করা অনুমতি দেয়। V3 সমর্থিত SDK সংস্করণ সম্পর্কে তথ্য যোগ করে এবং APK স্বাক্ষর ব্লকে প্রুফ-অফ-রোটেশন স্ট্রাক্ট যোগ করে।

APK সাইন ইন ব্লক

V1 APK ফরম্যাটের সাথে পশ্চাদপদ-সামঞ্জস্য বজায় রাখতে, v2 এবং v3 APK স্বাক্ষর জিপ সেন্ট্রাল ডাইরেক্টরির ঠিক আগে অবস্থিত একটি APK সাইনিং ব্লকের ভিতরে সংরক্ষণ করা হয়।

V3 এর করা APK ব্লক বিন্যাস সাইন ইন হয় v2 হিসাবে একই । APK এর v3 স্বাক্ষর আইডি 0xf05368c0 এর সাথে একটি ID- মান জোড়া হিসাবে সংরক্ষণ করা হয়।

APK সিগনেচার স্কিম v3 ব্লক

V3 এর পরিকল্পনা খুব অনুরূপ ডিজাইন করা হয়েছে v2 স্কিম । এটা একই সাধারণ বিন্যাস একই এবং সমর্থন স্বাক্ষর অ্যালগোরিদম ID- র , কী মাপ, এবং ইসি রেখাচিত্র।

যাইহোক, v3 স্কিম সমর্থিত SDK সংস্করণ এবং প্রমাণ-ঘূর্ণন কাঠামো সম্পর্কে তথ্য যোগ করে।

বিন্যাস

করা APK স্বাক্ষর স্কিম v3 এর ব্লক করা APK আইডি অধীনে ব্লক সাইন ইন ভিতরে সংরক্ষিত হয় 0xf05368c0

APK স্বাক্ষর স্কিম v3 ব্লকের ফর্ম্যাটটি v2 এর অনুসরণ করে:

  • দৈর্ঘ্য-পূর্বে সমাধান দৈর্ঘ্য-পূর্বে সমাধান ক্রম signer :
    • দৈর্ঘ্য-পূর্বে সমাধান signed data :
      • দৈর্ঘ্য-পূর্বে সমাধান দৈর্ঘ্য-পূর্বে সমাধান ক্রম digests :
        • signature algorithm ID (4 বাইটস)
        • digest (দৈর্ঘ্য-পূর্বে সমাধান)
      • X.509 দৈর্ঘ্য-পূর্বে সমাধান ক্রম certificates :
        • দৈর্ঘ্য-পূর্বে সমাধান X.509 certificate (ASN.1 DER ফর্ম)
      • minSDK (uint32) - প্ল্যাটফর্ম সংস্করণ এই সংখ্যা নিচে এই স্বাক্ষরকারী উপেক্ষা করা উচিত নয়।
      • maxSDK (uint32) - প্ল্যাটফর্ম সংস্করণ এই সংখ্যা ঊর্ধ্বে যদি এই স্বাক্ষরকারী উপেক্ষা করা উচিত নয়।
      • দৈর্ঘ্য-পূর্বে সমাধান দৈর্ঘ্য-পূর্বে সমাধান ক্রম additional attributes :
        • ID (uint32)
        • value (পরিবর্তনশীল দৈর্ঘ্যের: অতিরিক্ত অ্যাট্রিবিউট দৈর্ঘ্য - 4 বাইট)
        • ID - 0x3ba06f8c
        • value - প্রুফ অফ ঘূর্ণন struct হয়
    • minSDK (uint32) - স্বাক্ষরিত তথ্য বিভাগে minSDK মূল্যের ডুপ্লিকেট - এই স্বাক্ষর যাচাই এড়িয়ে যেতে বর্তমান প্ল্যাটফর্ম সীমার মধ্যে নয় ব্যবহৃত। স্বাক্ষরিত ডেটা মানের সাথে মেলে।
    • maxSDK (uint32) - এই স্বাক্ষর যাচাই এড়িয়ে যেতে বর্তমান প্ল্যাটফর্ম সীমার মধ্যে নয় ব্যবহৃত - স্বাক্ষরিত তথ্য বিভাগে maxSDK মূল্যের ডুপ্লিকেট। স্বাক্ষরিত ডেটা মানের সাথে মেলে।
    • দৈর্ঘ্য-পূর্বে সমাধান দৈর্ঘ্য-পূর্বে সমাধান ক্রম signatures :
      • signature algorithm ID (uint32)
      • দৈর্ঘ্য-পূর্বে সমাধান signature উপর signed data
    • দৈর্ঘ্য-পূর্বে সমাধান public key (SubjectPublicKeyInfo, ASN.1 DER ফর্ম)

প্রুফ-অফ-রোটেশন এবং সেলফ-ট্রাস্টেড-ওল্ড-সার্টস স্ট্রাক্ট

প্রুফ-রোটেশন স্ট্রাক্ট অ্যাপ্লিকেশনগুলিকে তাদের স্বাক্ষর শংসাপত্রটি অন্য অ্যাপ্লিকেশনগুলিতে ব্লক না করে ঘোরানোর অনুমতি দেয় যার সাথে তারা যোগাযোগ করে। এটি সম্পন্ন করার জন্য, অ্যাপ স্বাক্ষরে দুটি নতুন তথ্য উপাত্ত রয়েছে:

  • তৃতীয় পক্ষের জন্য দাবি যে অ্যাপের স্বাক্ষর সনদ বিশ্বাসযোগ্য হতে পারে যেখানেই তার পূর্বসূরিদের বিশ্বাস করা হয়
  • অ্যাপের পুরোনো স্বাক্ষর শংসাপত্র যা অ্যাপ নিজেই এখনও বিশ্বাস করে

স্বাক্ষরিত-ডেটা বিভাগে প্রুফ-অফ-রোটেশন অ্যাট্রিবিউট একটি একক লিঙ্কযুক্ত তালিকা নিয়ে গঠিত, প্রতিটি নোডের সাথে একটি স্বাক্ষর সনদ রয়েছে যা অ্যাপের পূর্ববর্তী সংস্করণগুলিতে স্বাক্ষর করার জন্য ব্যবহৃত হয়। এই বৈশিষ্ট্যটি ধারণাগত প্রমাণ-ঘূর্ণন এবং স্ব-বিশ্বাসযোগ্য-পুরাতন-সার্ট ডেটা স্ট্রাকচার ধারণ করার জন্য। তালিকাটি রুট নোডের সাথে সম্পর্কিত প্রাচীনতম স্বাক্ষর সনদ সহ সংস্করণ দ্বারা আদেশ করা হয়। প্রুফ-অফ-রোটেশন ডেটা স্ট্রাকচারটি প্রতিটি নোডে সার্টিফিকেট দিয়ে তালিকার পরের সাইন দিয়ে তৈরি করা হয়, এবং এইভাবে প্রতিটি নতুন কীকে প্রমাণ সহ প্রমাণ করে যে এটি পুরানো কী (গুলি) এর মতো বিশ্বস্ত হওয়া উচিত।

স্ব-বিশ্বাসযোগ্য-পুরাতন-সার্টস ডেটা স্ট্রাকচারটি প্রতিটি নোডে পতাকা যুক্ত করে সেটের সদস্যতা এবং বৈশিষ্ট্যগুলি নির্দেশ করে নির্মিত হয়। উদাহরণস্বরূপ, একটি পতাকা উপস্থিত হতে পারে যা নির্দেশ করে যে একটি নির্দিষ্ট নোডে স্বাক্ষর শংসাপত্রটি অ্যান্ড্রয়েড স্বাক্ষর অনুমতি পাওয়ার জন্য বিশ্বস্ত। এই পতাকাটি পুরোনো সার্টিফিকেট দ্বারা স্বাক্ষরিত অন্যান্য অ্যাপ্লিকেশনগুলিকে এখনও নতুন স্বাক্ষর সনদ দিয়ে স্বাক্ষরিত একটি অ্যাপ দ্বারা সংজ্ঞায়িত স্বাক্ষর অনুমতি প্রদান করতে দেয়। কারণ v3 এর স্বাক্ষরিত তথ্য বিভাগে পুরো প্রমাণ অফ ঘূর্ণন বৈশিষ্ট্য বসবাস signer ক্ষেত্র, এটা ধারণকারী APK সাইন করার জন্য ব্যবহৃত কী দ্বারা সুরক্ষিত।

এই বিন্যাস precludes একাধিক স্বাক্ষর কী এবং অভিসৃতি বিভিন্ন পূর্বপুরুষ স্বাক্ষরের সার্টিফিকেট (ক সাধারণ বেসিনে একাধিক শুরুর নোড) এক।

বিন্যাস

প্রমাণ-অফ-ঘূর্ণন করা APK স্বাক্ষর প্রকল্প আইডি অধীনে ব্লক v3 ভিতরে সংরক্ষিত হয় 0x3ba06f8c । এর বিন্যাস হল:

  • দৈর্ঘ্য-পূর্বে সমাধান দৈর্ঘ্য-পূর্বে সমাধান ক্রম levels :
    • দৈর্ঘ্য-পূর্বে সমাধান signed data (পূর্ববর্তী Cert দ্বারা - যদি উপস্থিত থাকে)
      • দৈর্ঘ্য-পূর্বে সমাধান X.509 certificate (ASN.1 DER ফর্ম)
      • signature algorithm ID (uint32) - অ্যালগরিদম পূর্ববর্তী স্তরের Cert দ্বারা ব্যবহৃত
    • flags (uint32) - পতাকা ইঙ্গিত কিনা বা না এই যা নিশ্চিতভাবে ঘটবে স্ব-বিশ্বস্ত বয়সী-শংশাপত্র struct হয় হওয়া উচিত, এবং যা অপারেশনের জন্য।
    • signature algorithm ID (uint32) - পরবর্তী স্তরে সাইন ইন ডেটা অধ্যায় থেকে এক মিলতে হবে।
    • দৈর্ঘ্য-পূর্বে সমাধান signature উপরে ধরে signed data

একাধিক সার্টিফিকেট

অ্যান্ড্রয়েড বর্তমানে একাধিক সার্টিফিকেট সহ স্বাক্ষরিত একটি APK কে একটি অনন্য স্বাক্ষর পরিচয় যা শংসাপত্রগুলি থেকে আলাদা বলে বিবেচনা করে। সুতরাং, স্বাক্ষরিত-ডেটা বিভাগে প্রুফ-অফ-রোটেশন অ্যাট্রিবিউট একটি নির্দেশিত অ্যাসাইক্লিক গ্রাফ গঠন করে, যা একটি একক লিঙ্কযুক্ত তালিকা হিসাবে ভালভাবে দেখা যেতে পারে, প্রতিটি নোডের প্রতিনিধিত্বকারী প্রদত্ত সংস্করণের জন্য স্বাক্ষরকারীদের প্রতিটি সেট সহ। এটি প্রুফ-অফ-রোটেশন স্ট্রাক্ট (নীচের বহু-স্বাক্ষরকারী সংস্করণ) -এ অতিরিক্ত জটিলতা যোগ করে। বিশেষ করে, অর্ডার একটি উদ্বেগের বিষয় হয়ে ওঠে। আরো কি, এপিএকে স্বতন্ত্রভাবে স্বাক্ষর করা আর সম্ভব নয়, কারণ প্রুফ-অফ-রোটেশন স্ট্রাকচারটিতে অবশ্যই পুরোনো স্বাক্ষর সার্টিফিকেট থাকতে হবে, সেগুলো একের পর এক সই করার পরিবর্তে। উদাহরণস্বরূপ, কী A দ্বারা স্বাক্ষরিত একটি APK যা দুটি নতুন কী B এবং C দ্বারা স্বাক্ষর করতে চায় তাতে B স্বাক্ষরকারী থাকতে পারে না কেবল A বা B এর স্বাক্ষর অন্তর্ভুক্ত করতে পারে, কারণ এটি B এবং C এর চেয়ে আলাদা স্বাক্ষর পরিচয়। এর মানে হল যে এই ধরনের কাঠামো তৈরির আগে স্বাক্ষরকারীদের অবশ্যই সমন্বয় করতে হবে।

একাধিক স্বাক্ষরকারীর প্রমাণ-ঘূর্ণন বৈশিষ্ট্য

  • দৈর্ঘ্য-পূর্বে সমাধান দৈর্ঘ্য-পূর্বে সমাধান ক্রম sets :
    • signed data (পূর্ববর্তী সেট দ্বারা - যদি উপস্থিত থাকে)
      • দৈর্ঘ্য-পূর্বে সমাধান ক্রম certificates
        • দৈর্ঘ্য-পূর্বে সমাধান X.509 certificate (ASN.1 DER ফর্ম)
      • ক্রম signature algorithm IDs (uint32) - পূর্ববর্তী সেট থেকে প্রতিটি সার্টিফিকেটের জন্য এক, একই আদেশ।
    • flags (uint32) - পতাকা ইঙ্গিত কিনা তা আপনি শংশাপত্র এই সেটটির যা অপারেশনের জন্য স্ব-বিশ্বস্ত বয়সী-শংশাপত্র struct হয় হওয়া উচিত, এবং।
    • দৈর্ঘ্য-পূর্বে সমাধান দৈর্ঘ্য-পূর্বে সমাধান ক্রম signatures :
      • signature algorithm ID (uint32) - স্বাক্ষরিত ডেটা অধ্যায় থেকে এক মিলতে হবে
      • দৈর্ঘ্য-পূর্বে সমাধান signature উপরে ধরে signed data

প্রমাণ-ঘূর্ণন কাঠামোতে একাধিক পূর্বপুরুষ

v3 স্কিম একই অ্যাপ্লিকেশনের জন্য একই স্বাক্ষর কীতে ঘোরানো দুটি ভিন্ন কী পরিচালনা করে না। এটি একটি অধিগ্রহণের ক্ষেত্রে ভিন্ন, যেখানে অধিগ্রহণকারী কোম্পানি অধিগ্রহণকৃত অ্যাপটিকে তার স্বাক্ষর কী ব্যবহার করে অনুমতি ভাগ করার জন্য সরিয়ে নিতে চায়। অধিগ্রহণটি একটি সমর্থিত ব্যবহার-কেস হিসাবে দেখা হয় কারণ নতুন অ্যাপটি তার প্যাকেজ নাম দ্বারা আলাদা হবে এবং এর নিজস্ব প্রমাণ-ঘূর্ণন কাঠামো থাকতে পারে। অসমর্থিত ক্ষেত্রে, একই অ্যাপ্লিকেশানের একই সার্টিফিকেট পাওয়ার জন্য দুটি ভিন্ন পথ রয়েছে, যা মূল ঘূর্ণন নকশায় অনেকগুলি অনুমান ভেঙে দেয়।

প্রতিপাদন

অ্যান্ড্রয়েড 9 এবং উচ্চতর ক্ষেত্রে, APK স্বাক্ষর স্কিম v3, v2 স্কিম বা v1 স্কিম অনুযায়ী APK যাচাই করা যেতে পারে। পুরানো প্ল্যাটফর্মগুলি v3 স্বাক্ষর উপেক্ষা করে এবং v2 স্বাক্ষর যাচাই করার চেষ্টা করে, তারপর v1।

APK স্বাক্ষর যাচাইকরণ প্রক্রিয়া

চিত্র 1. করা APK স্বাক্ষর যাচাই প্রক্রিয়া

APK স্বাক্ষর প্রকল্প v3 যাচাইকরণ

  1. APK সাইনিং ব্লক সনাক্ত করুন এবং যাচাই করুন:
    1. APK সাইনিং ব্লকের দুটি আকারের ক্ষেত্র সমান মান ধারণ করে।
    2. জিপ সেন্ট্রাল ডাইরেক্টরি অবিলম্বে কেন্দ্রীয় ডিরেক্টরি রেকর্ডের জিপ এন্ড দ্বারা অনুসরণ করা হয়।
    3. সেন্ট্রাল ডাইরেক্টরির জিপ এন্ডের পরে বেশি ডেটা নেই।
  2. APK সাইনিং ব্লকের ভিতরে প্রথম APK সিগনেচার স্কিম v3 ব্লক খুঁজুন। V3 এর ব্লক উপস্থিত থাকলে, তা না হলে 3. ধাপে এগিয়ে যান, তাহলে ফিরে করা APK যাচাই পড়ে v2 স্কিম ব্যবহার করা
  3. প্রত্যেকের জন্য signer করা APK স্বাক্ষর মধ্যে স্কিম একটি সর্বনিম্ন ও সর্বোচ্চ SDK সংস্করণ বর্তমান প্ল্যাটফর্ম সীমার মধ্যে রয়েছে যে সঙ্গে ব্লক v3:
    1. শক্তিশালী সমর্থিত চয়ন করুন signature algorithm ID থেকে signatures । শক্তি অর্ডার প্রতিটি বাস্তবায়ন/প্ল্যাটফর্ম সংস্করণ পর্যন্ত।
    2. সংশ্লিষ্ট যাচাই করুন signature থেকে signatures বিরুদ্ধে signed data ব্যবহার public key । (এটা বিশ্লেষণ করতে এখন নিরাপদ signed data ।)
    3. সাইন ইন তথ্য সর্বনিম্ন ও সর্বোচ্চ SDK এর সংস্করণ যাচাই করুন জন্য নির্দিষ্ট সেই মেলে signer
    4. যাচাই করুন যে স্বাক্ষর অ্যালগোরিদম ID গুলির আদেশ তালিকা digests এবং signatures অভিন্ন। (এটি স্বাক্ষর ছিনতাই/সংযোজন রোধ করার জন্য।)
    5. গণনা করা APK বিষয়বস্তুর হজম একই এলগরিদম হজম স্বাক্ষর অ্যালগোরিদম ব্যবহার করে অ্যালগরিদম হজম হিসেবে ব্যবহার।
    6. যাচাই করুন যে নির্ণিত ডাইজেস্ট সংশ্লিষ্ট অভিন্ন digest থেকে digests
    7. যাচাই করুন প্রথম যে SubjectPublicKeyInfo certificate এর certificates অভিন্ন public key
    8. প্রমাণ-অফ-ঘূর্ণন বৈশিষ্ট্য জন্য বিদ্যমান তাহলে signer যাচাই যে struct বৈধ এবং এই signer তালিকার শেষ শংসাপত্র।
  4. যাচাইকরণ সফল হলে ঠিক একটি signer বর্তমান প্ল্যাটফর্ম এবং ধাপে 3 যে জন্য সাফল্যের সাথে সম্পন্ন সীমার মধ্যে পাওয়া যায়নি signer

বৈধতা

পরীক্ষা করার জন্য আপনার ডিভাইসের সমর্থন সঠিকভাবে v3, চালানোর PkgInstallSignatureVerificationTest.java মধ্যে CTS পরীক্ষা cts/hostsidetests/appsecurity/src/android/appsecurity/cts/