الأمن على غرار جوجل



لقد تلاشى Google I / O 2019 وحان الوقت إعادة كتابة المشاريع على بنية جديدة تعلم أشياء جديدة. نظرًا لأنني مهتم بأمان تطبيقات الأجهزة المحمولة ، فقد استرعت الانتباه أولاً إلى المكتبة الجديدة في عائلة JetPack - تشفير الأمان . تساعد المكتبة في تنظيم تشفير البيانات بشكل صحيح وفي الوقت نفسه تحمي المطورين من جميع الفروق الدقيقة التي تصاحب هذه العملية.


الخلفية التاريخية


أثار تشفير البيانات في Android دائمًا الكثير من النقاش. أي خوارزمية تختار؟ ما وضع التشفير للاستخدام؟ ما هو الحشو؟ حيث لتخزين المفاتيح؟ يمكن أن يكون تعلم كل هذا والحفاظ على علمك محدثًا أمرًا صعبًا بالنسبة للمطور العادي. لذلك ، تنتهي القصة غالبًا بأحد السيناريوهات الثلاثة:


  • نسخ لصق الحل الأول مع stackoverflow
  • ابحث عن "دليل مناسب" مع التنفيذ اللاحق وجمع المكابس
  • تفعيل بروتوكول "وهكذا سوف!"

مع تطور مجتمع مطوري Android ، بدأت المكتبات في الظهور للمساعدة في حل هذه المشكلة. كانت جودة هذه الحلول مختلفة تمامًا: من كل هذا التنوع ، لا يمكنني تحديد سوى java-aes-crypto ، والتي استخدمناها في Redmadrobot. تطبيق عالي الجودة إلى حد ما ، ولكن كان هناك عدة مشاكل به.


بادئ ذي بدء ، كان مجرد تشفير السلسلة. هذا في حد ذاته ليس سيئًا ، ولكن يجب تخزين هذه السلاسل في مكان ما ، في قاعدة البيانات أو SharedPreferences. لذلك ، تحتاج إلى كتابة برنامج التفاف على مصدر البيانات بحيث يتم تشفير كل شيء على الطاير (وهو ما فعلناه مرة واحدة). ولكن هذا هو الكود الذي يجب دعمه أو سحبه من مشروع إلى آخر أو تنفيذه في مكتبة لسهولة الاستخدام. في النهاية ، تم ذلك أيضًا ، لكنه لم يجلب الراحة إلى استفسارات العقول.


ثانياً ، لم يقدم هذا الحل أي شيء لحل مشكلة الإدارة الرئيسية. يمكن توليدها ، ولكن التخزين يقع بالكامل على أكتاف المطور. مع كل القرفصاء حول AndroidKeystore على إصدارات وأجهزة OS المختلفة القادمة من البر الرئيسى للصين.


هذه المدينة تحتاج إلى بطل جديد


كل شيء سار كالمعتاد حتى في صيف عام 2018 ، اكتشفت أن هناك مكتبة رائعة من Google مثل Tink . من السهل جدًا أن تتعلم وتحمي المطور من عدد كبير من الفروق الدقيقة المتعلقة بالتشفير. باستخدام هذه المكتبة ، يكاد يكون من المستحيل القيام بشيء خاطئ. علاوة على ذلك ، يتحكم Tink بشكل كامل في المفاتيح ويلخص كل العمليات باستخدام AndroidKeystore من المطور.


لكنه كان لا يزال مجرد تشفير السلسلة. وهنا ظهرت التفضيلات الثنائية بنجاح كبير - مكتبة من مصنع محلي أردت أن أنظر إليها لفترة طويلة. يسمح لك بتشفير جميع البيانات المخزنة لأي خوارزميات - لذلك كان هذا كافياً لكتابة تطبيق لواجهتين ، KeyEncryption و ValueEncryption (للمفاتيح والقيم ، على التوالي).


نتيجةً لذلك ، بدأنا في استخدام هاتين المكتبتين بالترابط وسعدنا لأن كودنا أصبح أكثر نظافة وأسهل للفهم.


الأمن التشفير



الآن قررت Google مرة أخرى مقابلة المطورين وتبسيط حياتهم في مجال تشفير البيانات المخزنة. تم الإعلان عن مكتبة JetPack أخرى للمساعدة في هذا. كنت أتساءل ما كتبوه الثوري هناك ، وصعدت للبحث عن الوثائق (المفسد: أنها ليست كذلك). لقد وجدت javadoc فقط على الفصول المدرجة في المكتبة ، لكن شكرًا على ذلك أيضًا. اتضح أن هناك فرصًا قليلة: تشفير الملفات و SharedPreferences والعمل مع المفاتيح.


لاختبار وظيفة المكتبة ، كتبت بضع قصاصات:


تشفير الملفات
val file = File(filesDir, "super_secure_file") val encryptedFile = EncryptedFile.Builder(file, this, "my_secret_key", EncryptedFile.FileEncryptionScheme.AES256_GCM_HKDF_4KB) .setKeysetAlias("my_test_keyset_alias") .setKeysetPrefName("keyset_pref_file") .build() val outputStream = encryptedFile.openFileOutput() outputStream.use { it.write("secret info".toByteArray()) } 

SharedPreferences التشفير
 val encryptedPreferences = EncryptedSharedPreferences.create( "super_secret_preferences", "prefrences_master_key", this, EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV, EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM ) encryptedPreferences.edit().putString("secret", "super secret token") 

لدهشتي العظيمة ، كل شيء سار في المرة الأولى ، وحصلت على الشفرة التي كتبوها لهذه المكتبة. بعد أن سقطت في المصدر ، رأيت أن هذا هو في الواقع التفاف حول مكتبة Tink التي نعرفها بالفعل ، والرمز المكتوب هو واحد لواحد كما كتبنا في BinaryPreferences المشفرة.


لقد سررت جدًا لأن Google لم تخترع هذه المرة دراجة بخارية ، لكنها استخدمت ممارساتها الراسخة. دعونا نأمل أن حزمة security التي جاءت إلى JetPack لن تقتصر فقط على هذه المكتبة ، ولكن ستتطور أكثر.


مظاهرة من BinaryPreferences + حزمة Tink
تشفير رمز مصدر مكتبة الأمان
عرض تشفير الأمان

Source: https://habr.com/ru/post/ar452252/


All Articles