امضای برنامه Android: چگونه کار می کند و چرا مهم است

A brass key on a smartphone showing a verified checkmark, illustrating Android app signing

هر بار که برنامه ای را روی تلفن Androidی خود نصب می کنید، یک بررسی امنیتی بی صدا اما حیاتی در پس زمینه انجام می شود. تلفن شما امضای دیجیتال بسته APK را تأیید می کند. این دست دادن رمزنگاری چیزی است که از هکرهای مخرب جلوگیری می کند تا برنامه های شما را با بدافزار "مسموم" کنند و در عین حال اطمینان حاصل شود که توسعه دهندگان می توانند بدون از دست دادن هویت خود، به روز رسانی ها را انجام دهند.

اگر برنامه می نویسید، امضا کردن چیزی است که به سادگی باید درست انجام دهید. اگر فقط دوست دارید با Android سرهم کنید، یکی از رضایت بخش ترین بخش های سیستم برای درک آن است. در هر صورت، نحوه عملکرد امضای برنامه ارزش وقت شما را دارد. در زیر به بررسی این فناوری، چگونگی تکامل طرح‌های امضا و نحوه گواهینامه ها را به صورت دستی تأیید کنید آنلاین می‌پردازیم.

آنچه در این مقاله خواهید آموخت
  • چرا هر برنامه Android باید امضا شود و رمزنگاری شامل چه مواردی است (RSA / EC).
  • تفاوت بین طرح‌های امضای v1 (JAR)، v2، v3 و v4 و اینکه برنامه شما امروز باید از کدام یک استفاده کند.
  • چگونه Android تصمیم می گیرد که آیا به روز رسانی را بر اساس تداوم امضا مجاز کند یا خیر.
  • نحوه چرخش کلید به یک برنامه‌نویس اجازه می‌دهد کلید امضای خود را بدون شکستن نصب‌های موجود تغییر دهد.
  • چگونه امضای هر APK را خودتان، در خط فرمان یا با تایید کننده مبتنی بر مرورگر تأیید کنید.

App Signing چیست؟

در اصل، امضای برنامه فرآیندی است که در آن یک توسعه دهنده از کلید خصوصی برای ایجاد بلوک امضا برای فایل های برنامه خود استفاده می کند. سپس کلید عمومی مربوطه در APK در پوشه META-INF جاسازی می‌شود. هنگامی که تلفن شما سعی می کند برنامه را نصب کند، از کلید عمومی استفاده می کند تا بررسی کند که آیا امضا با محتوای فایل مطابقت دارد یا خیر.

این دو ویژگی اصلی را ارائه می دهد:

  1. تغییرناپذیری: اگر یک بایت از کد برنامه تغییر کند (مثلاً توسط یک تروجان)، امضا دیگر با فایل مطابقت ندارد و Android از نصب آن امتناع می‌کند.
  2. اثبات هویت: اگر برنامه ای سعی می کند برنامه موجود را به روز کند، امضاهای آن باید مطابقت داشته باشد. به همین دلیل است که نمی توانید یک برنامه فیس بوک دستکاری شده را روی برنامه رسمی نصب کنید.

تکامل طرح های امضا

Google به طور مداوم مکانیسم امضا را برای بهبود سرعت و امنیت ارتقا داده است:

چرا گواهینامه ها برای Sideloading اهمیت دارند؟

هنگامی که یک APK را از یک منبع غیر رسمی دانلود می کنید، هش کردن گواهی بهترین دوست شماست. اثر انگشت گواهی (مانند هش SHA-256) به طور منحصر به فرد کلید امضای توسعه دهنده را شناسایی می کند. هر برنامه کلید امضای یکسانی را در تمام به‌روزرسانی‌های خود نگه می‌دارد، بنابراین می‌توانید اثر انگشت یک APK را با مقدار منتشر شده توسعه‌دهنده مقایسه کنید تا صحت آن را تأیید کنید.

اگر شک دارید که یک APK جعلی است، باید آن را از طریق تأییدکننده APK آنلاین ما اجرا کنید. ابزار ما به شما نشان می دهد:

چگونه Android یک امضا را در زمان نصب تأیید می کند

مرحله "تأیید گواهی" به قدری نادیده گرفته می شود که ارزش آن را دارد که وقتی روی یک APK ضربه می زنید سیستم عامل واقعاً چه کاری انجام می دهد و Android تصمیم می گیرد آن را نصب کند یا خیر:

  1. APK را به صورت ZIP باز کنید و بلوک امضا را پیدا کنید. برای امضاهای v2/v3 که یک بلوک ساختاریافته بلافاصله قبل از دایرکتوری مرکزی است. برای طرح legacy v1، محتوای META-INF/*.RSA، *.DSA، یا *.EC است.
  2. خلاصه SHA-256 هر بایت دیگر APK را محاسبه کنید. بلوک امضا از خلاصه خود حذف شده است. هر چیز دیگری در تکه های تعریف شده هش شده است.
  3. هضم هر قطعه را در مقابل خلاصه های ثبت شده در بلوک امضا بررسی کنید. اگر از زمانی که برنامه‌نویس فایل را امضا کرده است، حتی یک بایت تغییر کرده باشد، خلاصه‌ها مطابقت ندارند و نصب با یک خطای عمومی «برنامه نصب نشده است» رد می‌شود.
  4. بررسی کنید که بلوک امضای خود با کلید خصوصی گواهی تولید شده است. کلید عمومی گواهی برای بررسی امضای رمزنگاری شده در بلوک استفاده می شود. یک بررسی موفق به این معنی است که هر کسی که فایل را امضا کرده است دارای کلید خصوصی جفت شده با این گواهی است.
  5. اثر انگشت گواهی را با هر نصب موجود با همان نام بسته مقایسه کنید. اگر بسته قبلاً نصب شده باشد و APK جدید با گواهی دیگری امضا شده باشد، نصب با INSTALL_FAILED_UPDATE_INCOMPATIBLE رد می شود. این اصلی‌ترین دفاع ضد جعل هویت سیستم‌عامل است: یک بازیگر مخرب نمی‌تواند برنامه بانک شما را با نسخه خود جایگزین کند، مگر اینکه کلید امضای بانک را نیز دزدیده باشد.

هیچ‌کدام از این‌ها قابل اعتماد بودن توسعه‌دهنده را ثابت نمی‌کند، فقط این که فایلی که می‌خواهید نصب کنید با بایتی که امضا کرده‌اند است و هیچ طرف دیگری آن را دستکاری نکرده است. اعتماد به توسعه‌دهنده یک تصمیم جداگانه است و شما با تصمیم‌گیری در مورد اینکه از کدام منابع نصب می‌کنید، تصمیم می‌گیرید.

"عدم تطابق امضا" واقعا به چه معناست

متداول ترین غافلگیری که افراد هنگام بارگذاری جانبی با آن مواجه می شوند، خطای "عدم تطابق امضا" در به روز رسانی است. در اینجا چیزی است که در واقع اتفاق می افتد:

دو روش در عمل اتفاق می افتد:

  1. APK شخص ثالث واقعاً از ناشر دیگری است، به عنوان مثال یک کپی "Modded" یا "Patched". امتناع از نصب رفتار صحیحی است. نصب آن به معنای اعتماد به یک غریبه با همان داده هایی است که برنامه بانک شما قبلاً لمس کرده است.
  2. APK شخص ثالث آپلود مجدد APK رسمی است، اما سیستم Google Play App Signing بارگیری هر کاربر را با بسته بندی کلید آپلود کاربر امضا می کند. گاهی اوقات دو دستگاه می‌توانند داده‌های امضای متفاوتی را برای نسخه مفهومی یک برنامه ببینند. در این صورت اثر انگشت گواهی در ریشه همچنان مطابقت دارد. می توانید با تأیید کننده APK ما تأیید کنید.

اگر اثر انگشت گواهی واقعا با نصب فعلی شما متفاوت است، تنها راه پیش رو این است که ابتدا نسخه فعلی را حذف نصب کنید (داده های آن را قبل از بارگذاری جانبی جایگزین کنید) و هرگز تأیید امضا را غیرفعال نکنید.

ایجاد کلید امضای خود (برای توسعه دهندگان)

اگر در حال ساخت برنامه های Android هستید، در نهایت باید بیلدهای خود را امضا کنید. دستور استاندارد تک خطی با استفاده از keytool از Java SDK عبارت است از:

keytool -genkeypair -v \
        -keystore my-release.keystore \
        -alias my-app -keyalg RSA -keysize 2048 \
        -validity 10000

دو نکته را باید بدانید:

برای ساخت‌های آزمایشی جانبی، ذخیره‌سازی کلید اشکال‌زدایی بدون امضا خوب است. برای تولید، از یک فروشگاه کلید با اعتبار طولانی محافظت شده با رمز عبور استفاده کنید که در پشتیبان گیری آفلاین ذخیره شده است.

هویت برنامه را مانند یک حرفه ای تأیید کنید

به نام فایل های عمومی اعتماد نکنید. قلب رمزنگاری APK های خود را در چند ثانیه بررسی کنید.

اکنون گواهی ها را تأیید کنید

مشکلات رایج امضا

  1. گواهی های خود امضا شده: اکثر برنامه های Androidی خود امضا هستند. برخلاف SSL برای وب سایت ها، هیچ مرجع مرکزی برای امضای برنامه Android وجود ندارد. شما باید مستقیماً به توسعه دهنده اعتماد کنید.
  2. برنامه‌های گواهی های اشکال زدایی: که برای آزمایش ساخته شده‌اند از کلید «اشکال‌زدایی» عمومی استفاده می‌کنند. این برنامه ها هرگز نباید برای عموم منتشر شوند و توسط بسیاری از فیلترهای امنیتی مسدود شده اند.
  3. از دست دادن کلید: اگر یک توسعه دهنده فروشگاه کلید خصوصی خود را از دست بدهد، می تواند هرگز برنامه خود را دوباره به روز کند. آنها باید یک برنامه "جدید" با نام بسته متفاوت منتشر کنند.

انتخاب طرح امضای مناسب برای SDK هدف شما

امضای برنامه بی سر و صدا زیربنای بسیاری از امنیت Android است. هنگامی که رابطه کلید خصوصی/عمومی کلیک شد، می‌توانید یک برنامه جانبی را بر اساس شایستگی‌های آن قضاوت کنید و تأیید کنید که چیزی که نصب می‌کنید از زمانی که توسعه‌دهنده آن را امضا کرده است، تغییر نکرده است. برای اطلاعات بیشتر در مورد داخلی Android، راهنمای فرمت XAPK ما را ببینید.

مهندسی و مستند شده توسط Mst Shaefale توسعه‌دهنده اصلی و معمار بسته Android • تأییدشده در Android 12–15

Mst Shaefale ادغام XAPK/APKS سمت کلاینت، تجزیه کننده مانیفست باینری و ابزارهای امضای APK v1+v2 را در xapktoapk.com حفظ می کند. آیا یک فرمان قدیمی یا تغییر سیستم عامل را مشاهده می کنید؟ یک یادداشت تحریریه بفرستید.