رمزنگاری (encryption) فرآیند تبدیل دادهها به شکلی است که بدون کلید خاص قابل خواندن نباشد. در برنامههای موبایل، رمزنگاری از دادههای شخصی کاربران، اطلاعات پرداخت و منطق تجاری در برابر رهگیری و نشت محافظت میکند. طبق دادههای Statista (2024)، تعداد نشت دادهها از برنامههای موبایل طی دو سال 38% افزایش یافته و در 72% موارد علت فقدان یا رمزنگاری نادرست بوده است. پلتفرمهای مدرن موبایل APIهای داخلی برای رمزنگاری ارائه میدهند و استفاده از آنها یک استاندارد امنیتی الزامی است. Statista, 2024
نکات اصلی
رمزنگاری در زمینه برنامههای موبایل — استفاده از الگوریتمهای رمزنگاری برای محافظت از دادههای ذخیرهشده روی دستگاه (data at rest) و دادههای منتقلشده از طریق شبکه (data in transit) است. در سطح دستگاه، حافظه محلی رمزنگاری میشود: فایلها، پایگاههای داده، SharedPreferences و حافظه نهان. در سطح شبکه، ترافیک بین برنامه و سرور از طریق پروتکلهای TLS/HTTPS رمزنگاری میشود. هدف نهایی — تضمین این است که حتی با دسترسی فیزیکی به دستگاه یا رهگیری ترافیک، مهاجم نتواند دادههای محافظتشده را بدون کلید رمزنگاری بخواند.
دستگاههای موبایل بهویژه در برابر از دست دادن داده آسیبپذیر هستند: تلفن به راحتی گم میشود، دزدیده میشود یا با نرمافزار مخرب آلوده میشود. طبق دادههای Ponemon Institute (2023)، 42% از شرکتهایی که دچار نشت داده شدهاند، حوادث را با دستگاههای موبایل مرتبط میدانند. بدون رمزنگاری، مهاجم میتواند از طریق USB به دستگاه متصل شود، پایگاه داده SQLite را استخراج کند و تمام دادههای ذخیرهشده را بخواند. رمزنگاری این مشکل را حل میکند: حتی اگر پایگاه داده استخراج شود، محتوای آن رمزنگاریشده باقی میماند. علاوه بر این، در ایالات متحده و اتحادیه اروپا قوانینی (GDPR, CCPA) وجود دارد که رمزنگاری دادههای شخصی را الزامی کرده و جریمههایی تا 4% از گردش مالی سالانه برای نقض آنها در نظر گرفته است. استفاده از رمزنگاری — نه تنها یک ضرورت فنی، بلکه یک الزام قانونی برای هر برنامه موبایلی است که با دادههای کاربران کار میکند.
تمام الگوریتمهای رمزنگاری به دو نوع اصلی تقسیم میشوند: متقارن (یک کلید برای رمزنگاری و رمزگشایی) و نامتقارن (یک جفت کلید — عمومی و خصوصی). انتخاب نوع به سناریوی استفاده بستگی دارد: برای رمزنگاری دادههای محلی بیشتر از الگوریتمهای متقارن به دلیل سرعت آنها استفاده میشود، و برای انتقال کلیدها و احراز هویت — از الگوریتمهای نامتقارن.
| ویژگی | متقارن | نامتقارن |
|---|---|---|
| تعداد کلیدها | 1 (مخفی) | 2 (عمومی + خصوصی) |
| سرعت | زیاد (1–10 GB/s) | کم (1–10 MB/s) |
| انتشار کلید | مشکل — باید کلید منتقل شود | ساده — کلید عمومی منتشر میشود |
| مثالها | AES, ChaCha20 | RSA, ECDH, ECIES |
| کاربرد در توسعه موبایل | رمزنگاری دادههای محلی | تبادل کلید، امضای دیجیتال |
در عمل در برنامههای موبایل از رمزنگاری ترکیبی استفاده میشود: با الگوریتم نامتقارن (مثلاً ECDH) طرفین یک کلید جلسه را مبادله میکنند و تمام دادههای بعدی با الگوریتم متقارن (AES یا ChaCha20) رمزنگاری میشوند. این رویکرد سرعت رمزنگاری متقارن را با امنیت تبادل کلید نامتقارن ترکیب میکند. این روش اساس TLS 1.3، Signal Protocol و Apple iMessage است.
توسعه مدرن موبایل از چندین الگوریتم استاندارد رمزنگاری استفاده میکند که هر یک برای وظایف خاصی طراحی شده و حوزه کاربرد خود را دارد.
رمزنگاری دادهها را در سه سناریوی کلیدی محافظت میکند: هنگام گم شدن دستگاه (رمزنگاری دیسک و کانتینرهای برنامه)، هنگام رهگیری ترافیک (پروتکلهای شبکه TLS/HTTPS) و هنگام نشت از سرور (رمزنگاری سرتاسر). هر سناریو رویکرد و ابزارهای خاص خود را میطلبد.
Data at rest — دادههای روی دستگاه — از طریق Android Keystore و iOS Keychain رمزنگاری میشود. در Android از نسخه 7.0 به بعد از رمزنگاری فایل (File-Based Encryption) استفاده میشود و برنامهها میتوانند دادههای خود را از طریق EncryptedSharedPreferences و EncryptedFile از کتابخانه AndroidX Security رمزنگاری کنند. در iOS همه برنامهها به طور پیشفرض با Data Protection API کار میکنند که فایلها را در سطح سیستم فایل با کلید متصل به کد دستگاه رمزنگاری میکند. برای data in transit از TLS 1.2/1.3 با Certificate Pinning اجباری استفاده میشود.
رمزنگاری سرتاسر (E2E) — بالاترین سطح حفاظت از دادهها، که در آن پیام در دستگاه فرستنده رمزنگاری شده و فقط در دستگاه گیرنده رمزگشایی میشود. سرور ذخیره و انتقال داده به محتوا دسترسی ندارد — فقط با بلوکهای رمزنگاریشده کار میکند. معروفترین پیادهسازی E2E برای برنامههای موبایل — Signal Protocol، که از Double Ratchet Algorithm به همراه X3DH (Extended Triple Diffie-Hellman) برای تبادل اولیه کلید استفاده میکند. Signal Protocol Perfect Forward Secrecy و future secrecy را فراهم میکند: به خطر افتادن یک کلید پیامهای قبلی و بعدی را فاش نمیکند. طبق تحقیقات دانشگاه Carnegie Mellon (2023)، رمزنگاری E2E در پیامرسانها خطر نشت مکاتبات را در مقایسه با رمزنگاری TLS-only تا 99.7% کاهش میدهد. استفاده از E2E برای برنامههای دسته Health & Fitness و Finance طبق الزامات GDPR و HIPAA اجباری است. برای پیادهسازی E2E در پروژه خود توصیه میشود از کتابخانه Signal Protocol (Java/Swift) یا مبتنی بر Olm (Matrix protocol) استفاده کنید. هنگام انتخاب راهحل E2E سازگاری با پلتفرم را ارزیابی کنید: Signal Protocol نیاز به ارسال ناهمزمان و ذخیره کلیدها در سمت مشتری دارد که پیادهسازی سناریوهای multi-device را پیچیده میکند — در چنین مواردی Matrix Protocol با مدل اتاق خود ممکن است انتخاب بهتری باشد.
بیایید مثالی از رمزنگاری و رمزگشایی دادهها در Android با استفاده از Jetpack Security (AndroidX Security) را بررسی کنیم. کتابخانه EncryptedFile را برای رمزنگاری فایلها و EncryptedSharedPreferences را برای تنظیمات فراهم میکند.
val masterKey = MasterKey.Builder(context)
.setKeyScheme(MasterKey.KeyScheme.AES256_GCM)
.build()
val encryptedFile = EncryptedFile.Builder(
context,
File(context.filesDir, "secret.dat"),
masterKey,
EncryptedFile.FileEncryptionScheme.AES256_GCM_HKDF_4KB
).build()
encryptedFile.openFileOutput(applicationContext).use { outputStream ->
outputStream.write("دادههای حساس کاربر".toByteArray(Charsets.UTF_8))
}
MasterKey با استفاده از AES256-GCM — امنترین حالت رمزنگاری متقارن — ایجاد میشود. کلید در Android Keystore ذخیره میشود که از فرآیند اصلی جدا شده است: حتی در صورت به خطر افتادن برنامه، مهاجم نمیتواند کلید را استخراج کند. EncryptedFile از طرح AES-256-GCM با HKDF برای اشتقاق کلید و اندازه صفحه 4KB استفاده میکند که تعادل خوبی بین سرعت و امنیت ایجاد میکند. برای خواندن دادهها از openFileInput با همان پارامترها استفاده میشود: کتابخانه به طور خودکار دادهها را هنگام خواندن رمزگشایی میکند.
در iOS عملکرد مشابه از طریق CryptoKit (Swift) با استفاده از AES.GCM یا ChaChaPoly فراهم میشود. کلید از طریق Keychain Services در Secure Enclave ذخیره میشود. اصل یکسان است: کلیدها هرگز انبار سختافزاری محافظتشده را ترک نمیکنند و دادهها قبل از نوشتن روی دیسک رمزنگاری میشوند. چنین معماری با توصیههای OWASP MASVS (Mobile Application Security Verification Standard) سطح L2 مطابقت دارد — برای برنامههایی که با دادههای حساس کار میکنند. در پروژههای واقعی، ترکیب EncryptedSharedPreferences برای توکنها و EncryptedFile برای دادههای کاربر 100% سناریوهای رمزنگاری محلی را پوشش میدهد. علاوه بر این، برای کار با کلیدهای دریافتشده از سرور (مثلاً کلیدهای جلسه ECDH) از Android KeyStore با پارامتر purpose = KeyProperties.PURPOSE_ENCRYPT استفاده میشود که تضمین میکند کلید فقط برای عملیات رمزنگاری مجاز استفاده میشود و هرگز از انبار سختافزاری به حافظه عملیاتی به صورت آشکار صادر نمیشود.
سوالات متداول
AES-256 در حالت GCM با ذخیره کلید در انبار سختافزاری (Android Keystore / iOS Keychain) استاندارد طلایی محسوب میشود. برای ترافیک شبکه — TLS 1.3 با منحنی بیضوی Curve25519. ChaCha20-Poly1305 به عنوان جایگزین در دستگاههای بدون AES سختافزاری استفاده میشود.
AES — الگوریتم متقارن (یک کلید)، سریع، مناسب برای رمزنگاری حجمهای بزرگ داده. RSA — نامتقارن (یک جفت کلید)، کند، برای رمزنگاری کلیدها و امضاها استفاده میشود، نه خود دادهها. در برنامههای موبایل AES دادهها را رمزنگاری میکند، RSA از کلیدها محافظت میکند.
دادههای محرمانه باید رمزنگاری شوند: توکنهای دسترسی، رمزهای عبور، اطلاعات شخصی، اطلاعات پرداخت، سوابق پزشکی. دادههای عمومی (تصاویر، محتوا) میتوانند رمزنگاری نشوند، اما بهتر است در کانتینر محافظتشده برنامه ذخیره شوند.
در رمزنگاری سرتاسر دادهها قبل از ارسال در دستگاه فرستنده رمزنگاری شده و فقط در دستگاه گیرنده رمزگشایی میشوند. سرور فقط دادههای رمزنگاریشده را میبیند. پروتکل Double Ratchet که در Signal Protocol پیادهسازی شده، رایجترین مکانیزم E2E در پیامرسانهای موبایل است.
از نظر فنی ممکن است، اما توصیه نمیشود. برای دادههای روی دستگاه از رمزنگاری متقارن (AES-GCM) با کلید از Keystore استفاده کنید. برای شبکه — TLS 1.3 با مجموعه کلید جداگانه و Certificate Pinning. جداسازی از به خطر افتادن هر دو کانال در صورت نشت یک کلید جلوگیری میکند.
خلاصه
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید