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

APK স্বাক্ষর প্রকল্প v2 একটি সম্পূর্ণ-ফাইল স্বাক্ষর স্কিম যা যাচাইয়ের গতি বৃদ্ধি করে এবং APK এর সুরক্ষিত অংশগুলিতে কোনও পরিবর্তন সনাক্ত করে সততা গ্যারান্টিকে শক্তিশালী করে।

জিপি সেন্ট্রাল ডিরেক্টরি বিভাগের ঠিক পূর্ববর্তী মুহূর্তে APK সাইনচার স্কিম v2 ব্যবহার করে স্বাক্ষর করা একটি APK সাইনিং ব্লককে APK ফাইলে সন্নিবেশ করানো হয়। APK স্বাক্ষরকারী ব্লকের ভিতরে, v2 স্বাক্ষর এবং স্বাক্ষরকারী পরিচয় সম্পর্কিত তথ্য একটি APK স্বাক্ষর স্কিম v2 ব্লকে সংরক্ষণ করা হয়

স্বাক্ষর করার আগে এবং পরে APK

চিত্র 1. স্বাক্ষর করার আগে এবং পরে APK

অ্যান্ড্রয়েড .0.০ (নওগাত) এপিএকে স্বাক্ষর প্রকল্পের v2 চালু হয়েছিল। অ্যান্ড্রয়েড .0.০ (মার্শমালো) এবং পুরানো ডিভাইসগুলিতে একটি APK ইনস্টলযোগ্য করার জন্য, ভি 2 স্কিমের সাথে সাইন ইন করার আগে জেআর স্বাক্ষর করে APK টি স্বাক্ষর করা উচিত।

APK স্বাক্ষরকারী ব্লক

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

এই ব্লকে আইডি-মান জুটি এমনভাবে মোড়ানো রয়েছে যা APK এ ব্লকটি সনাক্ত করা সহজ করে। APK এর ভি 2 স্বাক্ষর আইডি 0x7109871a সহ একটি আইডি-মান জুটি হিসাবে সংরক্ষণ করা হয়।

ফর্ম্যাট

APK সাইনিং ব্লকের ফর্ম্যাটটি নীচে রয়েছে (সমস্ত সংখ্যার ক্ষেত্রগুলি স্বল্প-এন্ডিয়ান):

  • বাইটগুলিতে size of block (এই ক্ষেত্রটি বাদ দিয়ে) (uint64)
  • Uint64- দৈর্ঘ্যের উপসর্গযুক্ত আইডি-মান জোড়াগুলির ক্রম:
    • ID (uint32)
    • value (ভেরিয়েবল-দৈর্ঘ্য: জোড়ার দৈর্ঘ্য - 4 বাইট)
  • বাইটে size of block প্রথম ক্ষেত্রের সমান (uint64)
  • magic "এপিকে সিগ ব্লক 42" (16 বাইট)

প্রথমে জিপ সেন্ট্রাল ডিরেক্টরিটি শুরু করার মাধ্যমে APK টি পার্স করা হয়েছে (ফাইলের শেষে সেন্ট্রাল ডিরেক্টরি রেকর্ডের জিপ শেষ সন্ধান করে, তারপরে রেকর্ড থেকে কেন্দ্রীয় ডিরেক্টরিটির সূচনা অফসেটটি পড়ে) APK magic মানটি এটি ইনস্টল করার একটি দ্রুত উপায় সরবরাহ করে যা কেন্দ্রীয় ডিরেক্টরিটির আগে যা সম্ভবত APK সাইনিং ব্লক। size of block মানটির size of block তখন দক্ষতার সাথে ফাইলের ব্লকের শুরুতে নির্দেশ করে।

ব্লকের ব্যাখ্যার সময় অজানা আইডি সহ আইডি-মান জুটি উপেক্ষা করা উচিত।

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

APK এক বা একাধিক স্বাক্ষরকারী / পরিচয় দ্বারা স্বাক্ষরিত, প্রতিটি স্বাক্ষর কী দ্বারা প্রতিনিধিত্ব করা হয়। এই তথ্যটি একটি APK স্বাক্ষর প্রকল্প v2 ব্লক হিসাবে সঞ্চিত। প্রতিটি স্বাক্ষরের জন্য, নিম্নলিখিত তথ্য সংরক্ষণ করা হয়:

  • (স্বাক্ষর অ্যালগরিদম, ডাইজেস্ট, স্বাক্ষর) টিপলস। ডাইজেস্টটি APK এর সামগ্রীর অখণ্ডতা যাচাইকরণ থেকে স্বাক্ষর যাচাইকরণটি ডিকোল করার জন্য সঞ্চয় করা হয়।
  • এক্স.509 শংসাপত্র শৃঙ্খলা স্বাক্ষরকারীর পরিচয় উপস্থাপন করে।
  • কী-মান জোড়া হিসাবে অতিরিক্ত বৈশিষ্ট্য।

প্রতিটি স্বাক্ষরকারীদের জন্য, সরবরাহিত তালিকা থেকে একটি সমর্থিত স্বাক্ষর ব্যবহার করে APK টি যাচাই করা হয়েছে। অজানা স্বাক্ষর অ্যালগরিদম সহ স্বাক্ষর উপেক্ষা করা হয়। একাধিক সমর্থিত স্বাক্ষরগুলির মুখোমুখি হলে কোন স্বাক্ষর ব্যবহার করবেন তা চয়ন করা প্রতিটি বাস্তবায়নের উপর নির্ভর করে। এটি পশ্চাদপটে সামঞ্জস্যপূর্ণ পদ্ধতিতে ভবিষ্যতে শক্তিশালী স্বাক্ষরকরণের পদ্ধতির ভূমিকা সক্ষম করে। প্রস্তাবিত পদ্ধতির সবচেয়ে শক্তিশালী স্বাক্ষর যাচাই করা হয়।

ফর্ম্যাট

0x7109871a অধীনে APK স্বাক্ষরকারী ব্লকের মধ্যে APK স্বাক্ষর প্রকল্পের ভি 2 ব্লক সংরক্ষণ করা হয়েছে।

APK স্বাক্ষর প্রকল্পের ভি 2 ব্লকের বিন্যাসটি নিম্নরূপ (সমস্ত সংখ্যাসূচক মান স্বল্প-এডিয়ান, সমস্ত দৈর্ঘ্যের উপসর্গযুক্ত ক্ষেত্রগুলি দৈর্ঘ্যের জন্য uint32 ব্যবহার করে):

  • দৈর্ঘ্য-উপসর্গযুক্ত signer দৈর্ঘ্য-উপসর্গযুক্ত ক্রম:
    • দৈর্ঘ্য-উপসর্গযুক্ত signed data :
      • দৈর্ঘ্য-পূর্বে সমাধান দৈর্ঘ্য-পূর্বে সমাধান ক্রম digests :
      • X.509 certificates দৈর্ঘ্য-উপসর্গযুক্ত ক্রম:
        • দৈর্ঘ্য-উপসর্গযুক্ত X.509 certificate (ASN.1 DER ফর্ম)
      • দৈর্ঘ্য-উপসর্গযুক্ত additional attributes দৈর্ঘ্য-উপসর্গযুক্ত ক্রম:
        • ID (uint32)
        • value (ভেরিয়েবল-দৈর্ঘ্য: অতিরিক্ত গুনের দৈর্ঘ্য - 4 বাইট)
    • দৈর্ঘ্য-উপসর্গযুক্ত signatures দৈর্ঘ্য-উপসর্গযুক্ত ক্রম:
      • signature algorithm ID (uint32)
      • signed data উপরে দৈর্ঘ্যের উপসর্গযুক্ত signature
    • দৈর্ঘ্য-উপসর্গযুক্ত public key (সাবজেক্টপলিটিকাইকিআইএনফো, এএসএন .১ ডিইআর ফর্ম)

স্বাক্ষর অ্যালগরিদম আইডি

  • 0x0101 SH SHA2-256 ডাইজেস্ট, SHA2-256 এমজিএফ 1, লবণের 32 বাইট, ট্রেলার সহ আরএসএসএএসএস-পিএসএস: 0xbc
  • 0x0102 SH এসএএসএএসএএসএসএ-পিএসএস এসএএইচ 2-512 ডাইজেস্ট, এসএএএ 2-512 এমজিএফ 1, লবণের 64 বাইট, ট্রেলার: 0xbc
  • 0x0103 SH SHA2-256 ডাইজেস্ট সহ আরএসএএসএ-পিকেসিএস 1-ভি 1_5। এটি বিল্ড সিস্টেমগুলির জন্য যা নির্ধারক স্বাক্ষর প্রয়োজন।
  • SHA2-512 ডাইজেস্ট সহ 0x0104 — আরএসএএসএ-পিকেসিএস 1-ভি 1_5 এটি বিল্ড সিস্টেমগুলির জন্য যা নির্ধারক স্বাক্ষর প্রয়োজন।
  • SHX2-256 ডাইজেস্ট সহ 0x0201 — ইসিডিএসএ
  • SHA2-512 ডাইজেস্ট সহ 0x0202 — ইসিডিএসএ
  • SHA2-256 ডাইজেস্ট সহ 0x0301 — DSA

উপরের সমস্ত স্বাক্ষর অ্যালগরিদম অ্যান্ড্রয়েড প্ল্যাটফর্ম দ্বারা সমর্থিত। স্বাক্ষরকরণ সরঞ্জামগুলি অ্যালগরিদমের একটি উপসেট সমর্থন করতে পারে।

সমর্থিত কী আকার এবং ইসি কার্ভগুলি:

  • আরএসএ: 1024, 2048, 4096, 8192, 16384
  • ইসি: এনআইএসটি পি -256, পি -384, পি 522
  • ডিএসএ: 1024, 2048, 3072

সত্যতা-সুরক্ষিত সামগ্রী

APK সামগ্রীর সুরক্ষার উদ্দেশ্যে, একটি এপিকে চারটি বিভাগ থাকে:

  1. জিপ এন্ট্রিগুলির বিষয়বস্তু (অফসেট 0 থেকে APK সাইনিং ব্লক শুরু হওয়া পর্যন্ত)
  2. APK স্বাক্ষরকারী ব্লক
  3. জিপ কেন্দ্রীয় ডিরেক্টরি
  4. কেন্দ্রীয় ডিরেক্টরি জিপ শেষ

স্বাক্ষর করার পরে APK বিভাগসমূহ

চিত্র 2. স্বাক্ষর করার পরে APK বিভাগ

APK স্বাক্ষর প্রকল্প v2 বিভাগ 1, 3, 4 এবং অধ্যায় 2 এর অভ্যন্তরে থাকা APK স্বাক্ষর স্কিম v2 ব্লকের signed data ব্লকগুলির অখণ্ডতা রক্ষা করে।

বিভাগ 1, 3 এবং 4 এর অখণ্ডতা signed data ব্লকগুলিতে সঞ্চিত তাদের সামগ্রীর এক বা একাধিক ডাইজেট দ্বারা সুরক্ষিত থাকে যা পরিবর্তিতভাবে এক বা একাধিক স্বাক্ষর দ্বারা সুরক্ষিত থাকে।

বিভাগ, 1, 3 এবং 4 এর উপরের ডাইজেস্টটি নিম্নোক্ত হিসাবে দুটি স্তরের Merkle গাছের মতো গণনা করা হয়। প্রতিটি বিভাগ একটানা 1 এমবি (2 20 বাইট) খণ্ডে বিভক্ত। প্রতিটি বিভাগের শেষ অংশটি সংক্ষিপ্ত হতে পারে। প্রতিটি অংশের ডাইজেস্টটি বাইট 0xa5 , বাইটের 0xa5 দৈর্ঘ্য (ছোট-এন্ডিয়ান ইউন্ট 32) এবং অংশের বিষয়বস্তুগুলির সাথে গণনা করা হয়। শীর্ষ স্তরের ডাইজেস্টটি বাইট 0x5a এর সংক্ষিপ্তকরণ, খণ্ডের সংখ্যা (ছোট-বড় ইউএনটি 32) এবং খণ্ডগুলি হজমের ক্রমসংকেতকে এপিপিতে প্রদর্শিত হবে বলে গণনা করা হয়। ডাইজেস্টকে সমান্তরাল করে গণনার গতি বাড়িয়ে তুলতে খাঁটি ফ্যাশনে গণনা করা হয়।

APK ডাইজেস্ট

চিত্র 3. APK ডাইজেস্ট

বিভাগ 4 এর সুরক্ষা (কেন্দ্রীয় ডিরেক্টরিটির জিপ শেষ) বিভাগটি জিপ সেন্ট্রাল ডিরেক্টরীতে অফসেট সহ জটিল দ্বারা জটিল। উদাহরণস্বরূপ, যখন একটি নতুন স্বাক্ষর যুক্ত করা হয় তখন APK সাইনিং ব্লকের আকার পরিবর্তিত হলে অফসেটটি পরিবর্তিত হয়। এইভাবে, সেন্ট্রাল ডিরেক্টরীটির জিপ এন্ডে ডাইজেস্টের গণনা করার সময়, জিপ সেন্ট্রাল ডিরেক্টরীটির অফসেটযুক্ত ক্ষেত্রটি অবশ্যই APK সাইনিং ব্লকের অফসেট সমন্বিত হিসাবে গণ্য করতে হবে।

রোলব্যাক সুরক্ষা

একজন আক্রমণকারী অ্যানড্রইড প্ল্যাটফর্মগুলিতে v2- স্বাক্ষরিত APK হিসাবে যাচাই করা v2- স্বাক্ষরিত এপিএকে সমর্থন করে এমন একটি APK-র স্বাক্ষরিত এপিএল হওয়ার চেষ্টা করতে পারে। এই আক্রমণকে প্রশমিত করতে, ভি 2-স্বাক্ষরিত APK গুলি যা ভি 1 স্বাক্ষরিত তাদের অবশ্যই তাদের মটা-আইএনএফ / *। এসএফ ফাইলের প্রধান বিভাগে একটি এক্স-অ্যান্ড্রয়েড-এপিএল-স্বাক্ষরযুক্ত বৈশিষ্ট্য থাকতে হবে। বৈশিষ্ট্যের মান হ'ল APK স্বাক্ষর স্কিম আইডি (এই স্কিমের আইডি 2) এর একটি কমা-বিচ্ছিন্ন সেট। ভি 1 স্বাক্ষর যাচাই করার সময়, APK যাচাইকারীকে এমন APKগুলি প্রত্যাখ্যান করা আবশ্যক যার এপিপি স্বাক্ষর স্কিমের জন্য স্বাক্ষর নেই যা এই সেট থেকে যাচাইকারী পছন্দ করে (যেমন, ভি 2 স্কিম)। এই সুরক্ষাটি মেটা-আইএনএফ / * এর উপর নির্ভর করে S এসএফ ফাইলগুলি ভি 1 স্বাক্ষর দ্বারা সুরক্ষিত। জেআর স্বাক্ষরিত APK যাচাইকরণের বিভাগটি দেখুন।

একজন আক্রমণকারী APK স্বাক্ষর স্কিম v2 ব্লক থেকে শক্তিশালী স্বাক্ষরগুলি ছিনিয়ে নেওয়ার চেষ্টা করতে পারে। এই আক্রমণকে প্রশমিত করতে, APK স্বাক্ষরিত স্বাক্ষর অ্যালগরিদম আইডিগুলির তালিকা signed data ব্লকে সংরক্ষিত যা প্রতিটি স্বাক্ষর দ্বারা সুরক্ষিত।

প্রতিপাদন

অ্যানড্রয়েড and.০ এবং তারপরে, APK স্বাক্ষর স্কিম v2 + বা জেআর স্বাক্ষর (ভি 1 স্কিম) অনুসারে APKs যাচাই করা যেতে পারে। পুরানো প্ল্যাটফর্মগুলি v2 স্বাক্ষরগুলি উপেক্ষা করে এবং কেবল ভি 1 স্বাক্ষরগুলি যাচাই করে।

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

চিত্র ৪. এপিপি স্বাক্ষর যাচাইকরণ প্রক্রিয়া (লাল রঙের নতুন পদক্ষেপ)

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

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

দ্রষ্টব্য : 3 বা 4 পদক্ষেপে কোনও ব্যর্থতা দেখা দিলে অবশ্যই APK 1 টি v1 স্কিম ব্যবহার করে যাচাই করা উচিত নয়।

জার-স্বাক্ষরিত APK যাচাইকরণ (ভি 1 স্কিম)

জার-স্বাক্ষরিত এপিএল একটি স্ট্যান্ডার্ড স্বাক্ষরিত জেআর , যা অবশ্যই মেটা-আইএনএফ / এমএএনএফইএসটি.এমএফ-এ তালিকাভুক্ত এবং অবশ্যই সমস্ত প্রবেশদ্বারগুলিতে একই স্বাক্ষরকারীদের স্বাক্ষরিত হতে হবে contain এর অখণ্ডতা নিম্নলিখিত হিসাবে যাচাই করা হয়:

  1. প্রতিটি স্বাক্ষরকারীকে একটি মেটা-আইএনএফ / <সিগনার> .এসএফ এবং মেটা-আইএনএফ / <সিগনার> দ্বারা প্রতিনিধিত্ব করা হয় R (আরএসএ | ডিএসএ | ইসি) জেআর এন্ট্রি।
  2. <signer>। (আরএসএ | ডিএসএ | ইসি) হ'ল একটি পিকেসিএস # 7 সিএমএস কনটেন্টইনফো যা স্বাক্ষরিত <signer> .SF ফাইলের মাধ্যমে যাচাই করা আছে Sign
  3. <signer> .SF ফাইলটিতে মেটা-INF / MANIFEST.MF এর পুরো ফাইল ডাইজেস্ট এবং মেটা-INF / MANIFEST.MF এর প্রতিটি বিভাগের হজম থাকে। MANIFEST.MF- এর পুরো ফাইল ডাইজেস্ট যাচাই করা হয়েছে। যদি এটি ব্যর্থ হয় তবে পরিবর্তে প্রতিটি MANIFEST.MF বিভাগের ডাইজেস্ট যাচাই করা হয়।
  4. মেটা-আইএনএফ / ম্যানিফেস.এমএফ-তে প্রতিটি অখণ্ডতা-সুরক্ষিত জেআর প্রবেশের জন্য, এন্ট্রিটির সংকোচিত সামগ্রীগুলির ডাইজেস্ট সম্বলিত একটি নামযুক্ত বিভাগ রয়েছে। এই সমস্ত হজম যাচাই করা হয়।
  5. যদি APK এ JAR এন্ট্রি থাকে যা MANIFEST.MF- এ তালিকাভুক্ত নয় এবং JAR স্বাক্ষরের অংশ না হয় তবে APK যাচাইকরণ ব্যর্থ হয়।

সুরক্ষা শৃঙ্খলাটি এইভাবে <সিগনার> ((আরএসএ | ডিএসএ | ইসি) -> <signer> SSF -> MANIFEST.MF -> প্রতিটি সততা-সুরক্ষিত জেআর প্রবেশের সামগ্রী contents