طريقة سهلة لتأمين بياناتكم الحساسة في Android
إليكم طريقة سهلة لتأمين بياناتكم الحساسة في Android

عند بناء تطبيقات Android، يُعد التخزين الآمن للبيانات الحساسة مثل بيانات اعتماد المستخدم ورموز PIN والـ tokens أمرًا بالغ الأهمية. تقليديًا، تُستخدم SharedPreferences في Android لتخزين أزواج المفتاح والقيمة (key-value pairs) البسيطة، لكن البيانات المخزنة في SharedPreferences غير مشفرة افتراضيًا. وهذا يمثل خطرًا أمنيًا محتملًا على البيانات الحساسة المخزنة في التطبيق.
لحسن الحظ، تتيح Encrypted Shared Preferences في Android للمطوّرين تشفير البيانات المخزنة في SharedPreferences، فتوفر طريقة آمنة لتخزين المعلومات الحساسة. وتتوفر ميزة Encrypted Shared Preferences هذه عبر مكتبة Android Security، ما يسهّل حماية البيانات المخزنة على الجهاز.
في هذا المقال، سنستعرض كيفية تطبيق Encrypted Shared Preferences في Android، باستخدام مكتبة Security لحماية المفاتيح والقيم في SharedPreferences. سنغطي كل شيء، من إعداد التشفير إلى كيفية تخزين البيانات بطريقة آمنة، ونوضح طريقة عمل ذلك من خلال أمثلة برمجية.
ما هي Encrypted Shared Preferences في Android؟
Encrypted Shared Preferences طريقة آمنة لتخزين أزواج المفتاح والقيمة في Android باستخدام تشفير AES-256. وهذه الميزة جزء من مكتبة Android Security، وتضمن أن البيانات المخزنة في SharedPreferences مشفرة سواء أثناء التخزين أو في الذاكرة. وعند استخدام Encrypted Shared Preferences، تُشفَّر المفاتيح والقيم معًا في SharedPreferences، ما يمنع الوصول غير المصرح به إلى البيانات.
لماذا نستخدم Encrypted Shared Preferences؟
- حماية البيانات الحساسة: مع Encrypted Shared Preferences يمكنكم تخزين البيانات الحساسة مثل كلمات المرور والـ tokens وتفضيلات المستخدم بأمان.
- سهولة التطبيق: تجعل مكتبة Android Security تشفير البيانات أمرًا بسيطًا من دون الحاجة إلى منطق تشفير مخصص.
- مخزن مفاتيح مدعوم بالعتاد (Hardware-Backed Keystore): في الأجهزة الحديثة، يمكن لـ Encrypted Shared Preferences الاستفادة من مخزن المفاتيح المدعوم بالعتاد في الجهاز، ما يوفر أمانًا أقوى.
كيفية استخدام Encrypted Shared Preferences في Android
لتبدأوا باستخدام Encrypted Shared Preferences، عليكم إعداد مكتبة Android Security في مشروعكم. إليكم الطريقة خطوة بخطوة.
الخطوة 1: إضافة التبعيات (Dependencies)
أضيفوا اعتمادية مكتبة Security إلى وحدة التطبيق (app module) في ملف build.gradle:
groovy
implementation 'androidx.security:security-crypto:1.1.0-alpha02'
توفر هذه المكتبة الأدوات اللازمة لتشفير البيانات في SharedPreferences وفي الملفات.
الخطوة 2: تهيئة المفتاح الرئيسي (Master Key)
قبل أن نستخدم Encrypted Shared Preferences، علينا إنشاء MasterKey. يُستخدم هذا المفتاح لتشفير البيانات وفك تشفيرها في SharedPreferences.
kotlin
val masterKey = MasterKey.Builder(applicationContext)
.setKeyScheme(MasterKey.KeyScheme.AES256_GCM)
.build()
يخزّن Android الـ MasterKey تلقائيًا بشكل آمن، وغالبًا في مخزن المفاتيح المدعوم بالعتاد، بحسب إمكانات الجهاز.
الخطوة 3: إنشاء Encrypted Shared Preferences
بعد ذلك، سننشئ نسخة (instance) من EncryptedSharedPreferences. يتيح لكم هذا الصنف تخزين أزواج المفتاح والقيمة بصيغة مشفرة.
kotlin
val sharedPreferences = EncryptedSharedPreferences.create(
applicationContext,
"encrypted_prefs", // File name for SharedPreferences
masterKey, // Master key for encryption
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
)
- "encrypted_prefs": اسم الملف الذي ستُخزَّن فيه البيانات المشفرة.
- AES256_SIV: مخطط التشفير الخاص بالمفاتيح.
- AES256_GCM: مخطط التشفير الخاص بالقيم.الخطوة 4: تخزين البيانات واسترجاعها
بعد تهيئة Encrypted Shared Preferences، يمكنكم تخزين البيانات واسترجاعها بالطريقة نفسها التي تتبعونها مع SharedPreferences العادية، لكن البيانات المخزنة في الملف ستكون الآن مشفرة.
تخزين البيانات:
kotlin
sharedPreferences.edit().putString("USER_PIN", "123456").apply()
استرجاع البيانات:
kotlin
val userPin = sharedPreferences.getString("USER_PIN", null)
في هذه الحالة، يُخزَّن USER_PIN بأمان في Encrypted Shared Preferences. تُشفَّر البيانات قبل حفظها، ويُفك تشفيرها تلقائيًا عند استرجاعها.
الخطوة 5: عرض البيانات المشفرة
إليكم شكل البيانات المخزنة في ملف SharedPreferences مشفر:
xml
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<string name="__androidx_security_crypto_encrypted_prefs_key_keyset__">Encrypted...</string>
<string name="__androidx_security_crypto_encrypted_prefs_value_keyset__">Encrypted...</string>
<string name="ASN3dd30XLWQ87WqUN7/2k86i9gqavinCOsSI/Z9PHtW">Encrypted...</string>
</map>
كما ترون، المفاتيح والقيم مشفرة، ما يضمن أنه حتى لو تمكن شخص ما من الوصول إلى الملف، فلن يستطيع قراءة البيانات الحساسة.
فوائد استخدام Encrypted Shared Preferences
- أمان البيانات
يضمن استخدام Encrypted Shared Preferences تخزين البيانات الحساسة مثل كلمات المرور وتفضيلات المستخدم والـ tokens بأمان. ويحدث التشفير تلقائيًا، ما يقلل خطر كشف البيانات.
- سهولة التطبيق
تبسّط مكتبة Android Security عملية إضافة التشفير إلى تطبيقكم. ويمكنكم دمجها في مشروعكم بسرعة من دون الحاجة إلى منطق تشفير معقد.
- التوافق
تدعم المكتبة Android 6.0 (API 23) وما بعده، ما يجعلها متوافقة مع معظم أجهزة Android الحديثة.
- تشفير مدعوم بالعتاد
في الأجهزة التي تدعمه، يضيف مخزن المفاتيح المدعوم بالعتاد طبقة أمان إضافية، إذ يضمن تخزين مفاتيح التشفير بأمان في العتاد وحمايتها من العبث.
- حماية المفاتيح والقيم معًا
على عكس بعض أساليب التشفير التي تشفّر القيم فقط، تشفّر Encrypted Shared Preferences المفاتيح والقيم معًا، ما يوفر حماية متكاملة لبيانات تطبيقكم.
الخلاصة: أسهل طريقة لتأمين البيانات في Android
تناولنا في هذا المقال كيفية استخدام Encrypted Shared Preferences في Android لتخزين البيانات الحساسة بأمان، مثل رموز PIN والـ tokens وتفضيلات المستخدم. وببضعة أسطر من الكود فقط، يمكنكم دمج مكتبة Android Security في تطبيقكم، لتحصلوا على طريقة متينة لتخزين البيانات المشفرة.
إنها طريقة سهلة وفعالة لحماية بيانات مستخدميكم، ومع نضج مكتبة Android Security ستستمر في تقديم ميزات أمان أقوى. ويُعد تطبيق Encrypted Shared Preferences خطوة أساسية نحو جعل تطبيقات Android أكثر أمانًا وحماية البيانات المخزنة فيها من الوصول غير المصرح به.
الأسئلة الشائعة
**1. ما هي Encrypted Shared Preferences في Android؟**تتيح لكم Encrypted Shared Preferences تخزين أزواج المفتاح والقيمة في SharedPreferences بأمان، عبر تشفير المفاتيح والقيم معًا باستخدام تشفير AES-256.
**2. كيف أطبّق Encrypted Shared Preferences؟**لتطبيق Encrypted Shared Preferences، عليكم استخدام مكتبة Android Security، وإنشاء MasterKey، ثم استخدام EncryptedSharedPreferences لتخزين البيانات واسترجاعها بأمان.
**3. هل يمكنني استخدام Encrypted Shared Preferences في إصدارات Android الأقدم؟**نعم، تدعم المكتبة Android 6.0 (API 23) وما بعده. وفي الأجهزة التي تعمل بإصدارات Android أقدم، يُستخدم التشفير البرمجي (software-based encryption).
**4. ما الفرق بين تخزين البيانات في Encrypted Shared Preferences وفي Shared Preferences العادية؟**في SharedPreferences العادية تُخزَّن البيانات كنص صريح (plaintext)، بينما في Encrypted Shared Preferences تُشفَّر المفاتيح والقيم معًا، ما يوفر أمانًا معززًا للبيانات الحساسة.
5. ما خوارزميات التشفير التي تستخدمها Encrypted Shared Preferences؟EncryptedSharedPreferences تستخدم AES-256 SIV لتشفير المفاتيح وAES-256 GCM** لتشفير القيم.
**6. هل التشفير في Encrypted Shared Preferences مدعوم بالعتاد؟**في الأجهزة التي تدعم ذلك، يُخزَّن MasterKey الذي تستخدمه EncryptedSharedPreferences في مخزن مفاتيح مدعوم بالعتاد، ما يوفر أمانًا إضافيًا بحماية مفاتيح التشفير في العتاد.
باستخدام Encrypted Shared Preferences، يمكنكم تأمين البيانات الحساسة في تطبيقات Android، وضمان تخزين معلومات المستخدمين بأمان تام.


