مروری بر روش های امضاء(Sign) برنامه های اندرویدی

توسعه دهندگان اندروید، در مراحل پایانی پروژه و قبل از انتشار برنامه در یکی از مارکت های موجود مانند گوگل پلی ، کافه بازار و... مسئله ی امضا کردن برنامه از طریق کلید (Keystore) رو تجربه کرده اند. امضا کردن برنامه باعث می شود مطمئن شویم که تنها افراد مجاز بتوانند برنامه را در آینده بروز رسانی کنند و بنابراین با این کار از دسترسی افراد غیر مجاز جهت بروزرسانی برنامه جلوگیری می کنیم. با این حال، به علت اینکه کلید برنامه ها، عضو مهمی از آنها محسوب می شود، در شرایطی خاص، ممکن است توسعه دهنده را دچار مشکلات زیادی کند. به علت معایب روش فعلی امضا کردن برنامه ها (که در ادامه به آن اشاره خواهیم کرد)، روشی دیگری جهت امضا کردن برنامه ها توسط گوگل پلی (Google Play App Signing) ارائه شده تا فرایند انتشار برنامه ها ساده تر و البته امن تر صورت گیرد. متاسفانه تا لحظه ی نگارش این مقاله، این روش فقط برای انتشار برنامه در مارکت رسمی گوگل(Google Play) ارائه شده و مارکت های ایرانی از این روش پشتیبانی نمی کنند. در این مقاله، قصد داریم این روش جدید به همراه مزایا و معایب آن را معرفی کنیم.روش جدید امضا کردن برنامه (Google Play App Signing):این روش که در واقع یک فرایند جدید و اختیاری برای توسعه دهندگان محسوب می شود، کل فرایند امضای برنامه را به گوگل واگذار می کند. به محض اینکه کلید امضای خود را به همراه نسخه برنامه به کنسول گوگل پلی معرفی کنید، گوگل فرایند امضاء برنامه ارسالی را برای انتشار برنامه انجام می دهد و در واقع برنامه ی ارسالی را برای ارائه به کاربران آماده سازی و امضاء می کند. صفر تا صد این فرایند در روش قبلی برعهده توسعه دهنده بوده است. معایب روش قدیمی امضاء کردن برنامه ها با وجود اینکه روش قدیمی امضا کردن برنامه ها هنوز به خوبی جوابگوی توسعه دهندگان هست و توسط همه ی مارکت های انتشار برنامه از جمله گوگل پلی پشتیبانی می شود، خطرهایی در این روش وجود دارد که می تواند نگرانی هایی را برای توسعه دهندگان به همراه داشته باشد:اگر شما کلید امضا برنامه را گم کنید، هرگز نمی توانید برنامه ی خود در بروز رسانی کنید. شاید کامپیوتر شما خراب شود و هیچ بکاپی وجود نداشته باشد، در این شرایط نمی توانید برنامه ی خود را بروزرسانی کنید. مجبور هستید برنامه خود را با یک Package Name متفاوتی آپلود کرده و همه چیز را از صفر شروع کنید. یک تجربه بسیار تلخ که ممکن است گریبانگیر هر توسعه دهنده ای شود.کلید شما می تواند توسط اشخاصی با اهداف خرابکارانه، رباییده شود. در این حالت هر شخصی که کلید را داشته باشد، می تواند برنامه شما را بدون اجازه ی شما بروز رسانی کند و متاسفانه در این صورت، هیچ راهی برای پس گرفتن این دسترسی از شخص مخرب وجود ندارد. بزرگترین مزیت استفاده از روش جدید امضای برنامه این است که زیرساخت گوگل، مسئولیت امضای برنامه را بر عهده خواهد گرفت و این به معنای امنیت هرچه بیشتر است. زمان استفاده از این روش، 2 کلید متفاوت برای فرایند امضای برنامه استفاده می شود: کلید App Signing Key: کلیدی که توسط گوگل برای امضای نسخه برنامه، قبل از انتشار استفاده می شود. کلید Upload Key: کلیدی که توسط توسعه دهنده استفاده می شود و می بایست هنگام بارگذاری نسخه برنامه، به کنسول گوگل پلی ارائه شود. همانطور که مشاهده می کنید، توسعه دهندگان هنوز می بایست یک نسخه از کلید را نزد خود نگهداری کنند. اما تفاوت این روش این است که کلید نزد توسعه دهنده(Upload Key)، برای امضای نسخه ای که قرار است منتشر شود، استفاده نمی شود و صرفا برای شناسایی مالک برنامه که قصد آپلود برنامه را دارد به کار می رود. به همین علت گوگل هر زمانی می تواند آن را جایگزین کند. اگر کلید مفقود یا رباییده شود، دیگر هیچ شخصی ثالثی دسترسی بروزرسانی برنامه را نخواهد داشت و گوگل به راحتی می تواند کلید قبلی را غیر فعال کرده و کلید دیگری را برای استفاده مجدد بکار گیرد.(روش انجام کار در انتهای مقاله ذکر شده است)روند امضاء شدن برنامه در روش جدید همانطور که در شکل می بینید، شما میتوانید کلید نزد خود(Upload Key) را به عنوان یک کلید معتبر( و نه کلید اصلی برنامه) در نظر بگیرید. این کلید به توسعه دهنده فقط اجازه ی بارگذاری نسخه های برنامه را در کنسول گوگل پلی خواهد داد و صرفا دارا بودن این کلید منجر به اعطای اجازه ی بروزرسانی، نخواهد شد. برای ارسال برنامه به کنسول گوگل پلی 2 روش وجود دارد: ارسال برنامه از طریق نسخه ی APK: این روش به عنوان روش مرسوم جهت انتشار برنامه شناخته می شود. ارسال برنامه از طریق نسخه ی Bundle: روش جدیدی که در نسخه های اخیر اندروید استودیو اضافه شده است و برنامه را به فرمت جدید برای ارائه به کنسول گوگل پلی، آماده سازی می کند. چنانچه بخواهید برنامه ی خود را از طریق روش Bundle به گوگل پلی معرفی کنید، امضا کردن برنامه به روش جدید اجبار است. زیرا شما Bundle برنامه خود را آپلود کرده اید و گوگل پلی نیاز دارد طی فرایندی APK برنامه شما را قبل از انتشار تولید و سپس امضا کند. بنابراین زمانی که کلید ها توسط توسعه دهنده مدیریت شوند، راهی برای انجام دادن این فرایند توسط کنسول گوگل پلی وجود ندارد. نکات مهم:اگر بخواهید نسخه امضا شده ی برنامه خود را قبل از آپلود در گوگل پلی تست کنید، شما احتمالا باید ابتدا یکبار برنامه خود را با روش سابق امضا کنید و بعد از انجام تست، نیاز دارید از طریق Upload Key، برنامه ی خود را امضا کنید و به کنسول گوگل پلی معرفی کنید. چنانچه برنامه خود را با روش جدید به کنسول گوگل پلی معرفی کردید، امکان بازگشت به روش قبلی وجود ندارد. اگر پس از انتشار برنامه توسط روش جدید، کلید Upload Key مفقود شد، میبایست ابتدا کلید Upload Key جدید را ساخته و از طریق این صفحه از گوگل درخواست کنید تا کلید جدید را جایگزین کند.توجه کنید که شما می بایست با اطلاعات اکانت جیمیل مربوط به کنسول گوگل پلی خود این درخواست را صادر کنید.کلید Upload Key که توسط شما به گوگل معرفی می شود، قبل از منتشر شدن برنامه به طور کلی از برنامه شما حذف می شود و کلید اصلی (App Signing Key) جایگزین می شود.جمع بندی در این مقاله روش های امضا کردن و معرفی به کنسول گوگل پلی برای برنامه های اندرویدی گفته شد. بزرگترین مزیت استفاده از روش جدید امضا کردن برنامه که توسط گوگل پلی اخیرا معرفی شده است، امنیت بیشتر در برابر مفقود شدن یا رباییده شدن کلید امضای برنامه(Keystore) است. روشی که با اجرای آن میتوانیم با خیالی آسوده امضا کردن برنامه های خود را به گوگل پلی واگذار کنیم.نظر شما در رابطه با روش جدید معرفی شده چیست؟ اگر هرگونه سوالی در مورد موضوع این مقاله ، یا تجربه ای دارید، لطفا به اشتراک بگذارید. منابع:https://support.google.com/googleplay/android-developer/answer/7384423?hl=en https://medium.com/mindorks/securing-and-optimizing-your-app-with-google-play-app-signing-24a3658fd319 https://medium.com/google-developer-experts/exploring-google-play-app-signing-b4d296f4ee9