فرض کن امنیت داده‌ ها توی اپلیکیشن تو، مثل «سیستم انتقال پیام در جبهه جنگ» میمونه. تو نمیتونی پیام رو همین‌ طوری روی کاغذ بنویسی و بدی دست سرباز که ببره؛ چون اگه دشمن سرباز رو بگیره، تمام نقشه‌ هات لو میره. باید پیام رو جوری «خراب» کنی که فقط مقصد بفهمه چی به چیه.

رمزنگاری متقارن (Symmetric) در برنامه نویسی اندروید

۱. رمزنگاری متقارن (Symmetric): مثل رمزِ بیسیم

اینجا تو و مقصد، از قبل سر یک «کلمه رمز» توافق کردید. مثلاً میگید: «هر حرفی رو دو تا ببر جلو». توی اندروید، قهرمان این مدل AESهست. خیلی سریع و بزن‌ و بهادره. برای وقتی که میخوای دیتای سنگین (مثلاً لیست خرید کاربر یا چت‌ های ذخیره شده) رو توی حافظه گوشی نگه داری، از این استفاده میکنی.

  • خطر: اگه کسی بفهمه «کلمه رمز» چیه، تمام پیام‌های قبلی و بعدی رو میتونه بخونه.

۲. رمزنگاری نامتقارن (Asymmetric): مثل صندوق‌های دو کلیده

این مدل کمی باکلاس‌تره و از الگوریتم RSA استفاده میکنه. ما دو تا کلید داریم:

  • کلید عمومی (Public): دست همه هست. مثل یک قفل باز میمونه که تو پخش میکنی بین همه. هر کس پیامی داره، با این قفلش میکنه.

  • کلید خصوصی (Private): فقط توی جیب توئه. وقتی پیام قفل‌شده بهت رسید، فقط تویی که میتونی با کلید خودت بازش کنی.

مثال کدی: چطوری مثل حرفه‌ای‌ها دیتا رو ذخیره کنیم؟

بیا فرض کنیم میخوایم «شماره کارت» کاربر رو توی گوشی ذخیره کنیم. اگه از SharedPreferences معمولی استفاده کنی، انگار شماره رو روی دیوار کوچه نوشتی! اما با کتابخونه Jetpack Security، اندروید خودش کار سخت رمزنگاری رو انجام میده:

// ۱. اول یه کلیدِ امن توی گاوصندوق اندروید (Keystore) می‌سازیم
val masterKey = MasterKey.Builder(context)
    .setKeyScheme(MasterKey.KeyScheme.AES256_GCM)
    .build()

// ۲. حالا یه فایل تنظیماتِ «ضد گلوله» ایجاد می‌کنیم
val sharedPreferences = EncryptedSharedPreferences.create(
    context,
    "secret_shared_prefs",
    masterKey,
    EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
    EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
)

// ۳. حالا دیتا رو ذخیره کن؛ خودش موقع نوشتن، هش و رمزنگاری می‌شه!
sharedPreferences.edit()
    .putString("user_card_number", "6037-9911-2233-4455")
    .apply()

چه اتفاقی افتاد؟ وقتی این کد رو اجرا میکنی، اگه یه هکر فایل تنظیمات اپلیکیشن تو رو باز کنه، به‌جای شماره کارت، یه چیزی شبیه این میبینه: "AXy78+mN2Z1/P0pL..." این یعنی حتی اگه دیتای تو لو بره، برای بقیه «بی‌ معنی» هست.

گاوصندوق اندروید (Android Keystore) کجاست؟

شاید بپرسی: «خب اون کلیدی که باهاش رمزنگاری کردیم کجاست؟ نکنه اونم لو بره؟» اندروید یک بخش سخت‌افزاری جداگانه و قرنطینه شده به اسم Keystore داره. کلید ها اونجا زندانی هستن. حتی خود تو به عنوان برنامه‌ نویس هم نمیتونی کلید رو «ببینی» یا از گوشی خارجش کنی؛ فقط میتونی به سیستم بگی: «با اون کلیدی که پیشته، این متن من رو رمز کن».

جمع بندی

امنیت داده‌ ها یعنی «ایجاد آرامش برای کاربر». وقتی کاربر بدونه که پیام‌ها یا اطلاعاتش توی اپ تو جوری قفل شده که حتی خود تو هم (بدون کلیدش) نمیتونی بخونیشون، با خیال راحت بهت اعتماد میکنه. اپلیکیشنی که امن نباشه، هرچقدر هم که زیبا و سریع باشه، مثل خانه‌ ایه که روی شن ساخته شده؛ با اولین طوفان امنیتی فرو میریزه.