تأمین امنیت داده های حساس در اندروید – از صفر تا صد


ذخیرهسازی دادههای حساس در اپلیکیشن اندروید تاکنون کار پر ریسکی بوده است، اما این وضعیت به زودی با معرفی کتابخانه Shared-preference رمزگذاری شده نیتیو از سوی خانواده AndroidX تغییر مییابد. در این مقاله در مورد روشهای تأمین امنیت داده های حساس در اندروید صحبت خواهیم کرد.
چنان که اشاره کردیم کتابخانه Shared-preference رمزگذاری شده موجب میشود که امنیت دادهها در اندروید ارتقا یابد، اما این کتابخانه نیز مانند همه چیزهای دیگر در اندروید، دارای نقصهایی است. این کتابخانه تنها از اندروید نسخه 6 به بالا پشتیبانی میکند. در ادامه در مورد شیوه استفاده از کتابخانه Shared-preference رمزگذاری شده توضیح میدهیم و سپس فرایند رمزگذاری را برای دستگاههای اندروید 6 معرفی میکنیم.
یکپارچهسازی کتابخانه
کمینه نسخه SDK مورد نیاز برای اپلیکیشن شما باید 23 (اندروید 6) باشد.
minSdkVersion 23
همچنین باید خط زیر را در build.gradle اپلیکیشن وارد کنید. این کتابخانه همچنان در مرحله آلفا است، بنابراین باید مطمئن شوید که از آن در بیلد پروداکشن خود استفاده نمیکنید.
implementation "androidx.security:security-crypto:1.0.0-alpha02"
طرز کار Preference رمزگذاری شده
class EncryptedSharedPreferences: SharedPreferences
shared-preference رمزگذاری شده اساساً کلاس shared-preference را بسط میدهد، یعنی لازم نیست چیز تازهای به جز پیکربندی کتابخانه جدید، در مورد آن یاد بگیرید.
گام 1
در گام نخست باید یک master از Keystore به صورت زیر ایجاد و یا دریافت کنیم:
گام 2
اکنون باید با ارسال برخی پارامترهای خاص مانند نام preference، کلید مستر که در گام قبلی به دست آمد و context اپلیکیشن و برخی اسکیماهای رمزگذاری که در ادامه نمایش یافته، وهلهای از preference رمزگذاری شده را از تابع ایجادش بسازیم. قویاً توصیه شده است که از همان اسکیماهای رمزگذاری که در اینجا نمایش دادهایم، استفاده شود:
گام 3
اکنون زمان آن رسیده است که برخی دادهها را در preference نوشته و بخوانیم. این کار به صورت زیر قابل اجرا است:
این کار تا حدود زیادی شبیه به دسترسی به shared-preference قدیمی و آشنای قبلی است.
مزایا و معایب
بزرگترین مزیت معرفی این کتابخانه جدید آن است که اکنون امکان رمزگذاری پیشفرض دادههای حساس در مقیاس کوچک در اندروید فراهم شده است. آن چه به صورت داخلی رخ میدهد این است که اسکیماها و کلیدهای مستر Keystore در زمان ایجاد وهلهای از preference ارائه میشوند و یک الگوریتم رمزگذاری، همه جفتهای کلید-مقدار را رمزگذاری میکند، به طوری که دادهها امن میشوند و همچنین یک فایل preference با حفاظت رمز عبور ایجاد میشود.
از سوی دیگر، بزرگترین عیب آن این است که تنها از اندروید 6 و بالاتر پشتیبانی میکند. اما اغلب اپلیکیشنها هم اینک همچنان از اندروید Kitkat (نسخه 4.4) پشتیبانی میکنند. برای حل این مشکل میتوانید از روشی که در بخش بعدی توضیح داده شده است استفاده کنید.
Preference امن برای اندرویدهای قبل از نسخه 6
زمانی که شروع به جستجو برای Preference امن بکنید، دیری طول نمیکشد که با کتابخانه شگفتانگیزی به نام secure preference (+) مواجه میشوید. اما پیش از آغاز به کار روی آن باید به یک سؤال مهم پاسخ دهیم:
ما مشغول کار روی امنیت هستیم؛ آیا میتوانیم به یک کتابخانه شخص ثالث تصادفی که به درستی نمیشناسیم، برای ذخیرهسازی دادههای حساس خود اعتماد کنیم؟
پاسخی که ما به سؤال فوق میدهیم یک نه بزرگ است!
به همین دلیل از گزینه بعدی استفاده میکنیم. یک گام به عقب بردارید و در مورد شیوه عمل این کتابخانه و همچنین preference امن AndroidX تأمل کنید. در واقع کار اصلی که این کتابخانهها انجام میدهند، رمزگذاری جفتهای کلید-مقدار پیش از ذخیرهسازی آنها در preference و یا رمزگذاری خود فایل preference است.
به نظر میرسد که گزینه نخست یعنی رمزگذاری جفتهای کلید-مقدار پیش از ذخیرهسازی در preference مناسبتر است. به این ترتیب حتی اگر جفتهای کلید-مقدار در preference به نحوی افشا شوند، امکان دانستن محتوای آنها به جز آشنایی با الگوریتم رمزگذاری شما و «کلید سری» (secret key) وجود نخواهد داشت. پیشنهاد میکنیم کلید سری را در فایل build.gradle به صورت فیلد buildconfig ذخیره کنید.
اینک زمان آن رسیده است که preference رمزگذاری شده را کدنویسی کنیم. ابتدا باید کلاس EncryptedPreference را ایجاد کنیم که در آن الگوریتم رمزگذاری کلید و مقدار را مینویسیم. کد به صورت زیر است:
اکنون کافی است تابع getinstance را با ارسال context و نام preference خود فراخوانی کنید. به خاطر داشته باشید که باید کلید امنیتی را در فایل build.gradle ذکر کنید. شیوه نوشتن و خواندن دادهها نیز به صورت زیر است:
بدین ترتیب به پایان این مقاله میرسیم.
اگر این مطلب برای شما مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای پروژه محور برنامه نویسی اندروید
- مجموعه آموزشهای برنامهنویسی
- آموزش ساخت اپلیکیشن کتاب و کار با داده ها در اندروید
- نکات کلیدی اندروید ۱۰ برای توسعه دهندگان — راهنمای کاربردی
- طراحی انیمیشن های ساده برای اپلیکیشن های اندرویدی — به زبان ساده
==