Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Security
Code

مفاتيح ووثائق التفويض والتخزين على الروبوت

by
Difficulty:IntermediateLength:LongLanguages:

Arabic (العربية/عربي) translation by Basheer Radman (you can also view the original English article)

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

في كثير من الأحيان، عندما تعمل مع خدمة الطرف الثالث، سيكون هناك شكل من أشكال المصادقة المطلوبة. وهذا قد تكون بسيطة كنقطة نهاية/login أن يقبل اسم المستخدم وكلمة المرور.

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

إدارة الحساب

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

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

وسوف تتطلب التعليمة البرمجية الإذن android.permission.GET_ACCOUNTS. إذا كنت تبحث عن حساب معين، يمكنك العثور عليها مثل هذا:

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

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

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

في البرنامج التعليمي التالي، ونحن سوف تبحث في استخدام الشهادات للمصادقة، والاتصالات الآمنة، ولكن أنا لا تزال ترغب في تناول كيفية تخزين هذه العناصر في الوقت نفسه. API سلسلة المفاتيح بنيت أصلاً لذلك الاستخدام محددة جداً – تثبيت زوج المفتاح أو شهادة خاصة من ملف PKCS #12.

سلسلة المفاتيح

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

رمز لتثبيت شهادة على النحو التالي:

سيتم مطالبة المستخدم بكلمة مرور للوصول إلى المفتاح الخاص وخيارا لاسم الشهادة. استرداد المفتاح، يعرض التعليمات البرمجية التالية واجهة المستخدم التي يسمح للمستخدم باختيار من قائمة المفاتيح المثبتة.

وبمجرد الاختيار، يتم إرجاع اسم مستعار سلسلة في رد الاتصال (الاسم المستعار للسلسلة النهائية) اسم مستعار حيث يمكنك الوصول إلى سلسلة المفتاح أو شهادة خاصة مباشرة.

المسلحة مع هذه المعرفة، دعونا الآن نرى كيف يمكننا استخدام تخزين بيانات الاعتماد لحفظ البيانات الحساسة الخاصة بك.

كيستوري

في البرنامج التعليمي السابق، ونحن ننظر في حماية البيانات عن طريق مرور الموفر من قبل المستخدم. هذا النوع من الإعداد جيدة، ولكن متطلبات التطبيق الابتعاد كثيرا ما المستخدمين تسجيل الدخول في كل مرة، وتذكر رمز مرور إضافية لها.

وهذا حيث يمكن استخدام API كيستوري. منذ 1 API، استخدمت في كيستوري بالنظام لتخزين بيانات الاعتماد وأي فأي والشبكات الافتراضية الخاصة. اعتبارا من 4.3 (API 18)، فإنه يسمح لك بالعمل مع المفاتيح غير متماثلة الخاصة بالتطبيق الخاص بك، وفي "م الروبوت" (API 23) فإنه يمكن تخزين مفتاح متماثل الخدمات المعمارية والهندسية. حتى حين لا يسمح API تخزين سلاسل الحساسة مباشرة، هذه المفاتيح يمكن تخزين وثم يستخدم لتشفير سلاسل.

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

إنشاء مفتاح عشوائي جديد

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

الأجزاء الهامة ننظر هنا هي مواصفات.setUserAuthenticationRequired(true) و.setUserAuthenticationValidityDurationSeconds(120). وتتطلب هذه شاشة قفل إعداد والمفتاح ليكون مؤمناً حتى مصادقة المستخدم.

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

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

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

هو خيار آخر ملاحظة setUserAuthenticationValidWhileOnBody(boolean remainsValid)، وتأمين المفتاح بمجرد كشف الجهاز أنه لم يعد على الشخص.

تشفير البيانات

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

فك تشفير إلى صفيف بايت

لفك التشفير، يتم تطبيق العكس. يتم تهيئة كائن تشفير باستخدام ثابت DECRYPT_MODE، ويتم إرجاع صفيف بايت الذي تم فك تشفيره [].

اختبار المثال

ونحن الآن اختبار المثال الخاص بنا!

استخدام RSA مفاتيح غير متماثلة للأجهزة القديمة

وهذا حل جيد لتخزين البيانات لإصدارات م وأعلى، ولكن ما إذا كان التطبيق الخاص بك يدعم الإصدارات السابقة؟ بينما مفاتيح AES متماثل غير معتمدة ضمن M، مفاتيح RSA غير متماثلة. وهذا يعني أننا يمكن استخدام التشفير ومفاتيح RSA لإنجاز نفس الشيء.

والفرق الرئيسي هنا أن مفاتيح غير متماثلة يحتوي على مفتاحين وخاص ومفتاح العمومي، حيث المفتاح العام تشفير البيانات وفك تشفير المفتاح الخاص هو. يتم تمرير من كيبايرجينيراتورسبيك إلى كييبايرجينيراتور التي يتم تهيئة مع KEY_ALGORITHM_RSA ومقدم "أندرويدكيستوري".

لتشفير، نحصل على رسابوبليكيي من مفاتيح واستخدامه مع الكائن Cipher.

ويتم فك التشفير باستخدام كائن رسابريفاتيكي.

شيء واحد عن RSA أن التشفير أبطأ مما عليه في الخدمات المعمارية والهندسية. وهذا على ما يرام عادة لكميات صغيرة من المعلومات، مثل عندما كنت الحصول على سلاسل تفضيل المشتركة. إذا وجدت أن هناك مشكلة أداء تشفير كميات كبيرة من البيانات، ومع ذلك، يمكنك بدلاً من ذلك استخدام هذا المثال لتشفير وتخزين فقط على مفتاح AES. ثم، استخدم أن أسرع التشفير الخدمات المعمارية والهندسية التي نوقشت في البرنامج التعليمي السابق لبقية البيانات الخاصة بك. يمكنك إنشاء مفتاح AES جديد وتحويله إلى صفيف بايت [] متوافق مع هذا المثال.

للحصول على المفتاح مرة أخرى من وحدات البايت، القيام بذلك:

أن كان هناك الكثير من التعليمات البرمجية! للاحتفاظ بكافة أمثلة بسيطة، أنا أغفلت معالجة الاستثناء شاملة. ولكن تذكر أن التعليمات البرمجية الخاصة بك الإنتاج، لا ينصح ببساطة التقاط جميع الحالات Throwable في عبارة catch واحد.

الاستنتاج

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

الآن أن تغطية لدينا أفضل الممارسات من أجل تأمين البيانات في بقية، سوف يركز البرنامج التعليمي التالي على تأمين البيانات في العبور.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.