قم بتخزين مفتاح تشفير في سلسلة المفاتيح أثناء عملية تثبيت التطبيق

StackOverflow https://stackoverflow.com/questions/886893

سؤال

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

1.

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

2.

يبدو أنه من الأفضل تخزين مفتاح في سلسلة المفاتيح واحصل عليه من هنا حسب الطلب. ولكن لتجنب # 1 من الضروري تثبيت مفتاح المفاتيح أثناء عملية التثبيت. هل هو ممكن؟ كيف يتم فعل ذلك؟

3.

أنا لا أعرف ما هي الشهادات القيام به. هل هم مفيدون للمشكلة؟

4.

لنقل المفتاح من الخادم هو أيضا فكرة سيئة، لأنه من السهل للغاية الاستغناء عنه.

هل كانت مفيدة؟

المحلول

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

على أي آلة هو 100-1000x فك تشفير عنق الزجاجة؟ هل خادمك مشغولا للغاية بحيث لا يستطيع القيام بفك تشفير Asym؟ يجب أن تفعل ذلك بشكل غير منتظم على الهاتف الذي يجب أن يكون غير ذي صلة. أنا لا أقول Asym هو الجواب هنا؛ فقط أن علوي أدائها لا ينبغي أن يكون مشكلة تأمين سلسلة واحدة، فك تشفيرها مرة واحدة.

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

شخصيا كنت أتأكد على النحو التالي:

  • خادم يرسل التحدي بايت
  • يرسل العميل UIID والتاريخ والتكال (UUID + Challenge + UserPassword + ObfuscationKey + تاريخ).
  • يقوم الخادم بحساب نفسه، ويجب أن يكون التاريخ المؤكد في النطاق القانوني (30-60s جيد) والتحقق من صحة.
  • في هذه المرحلة، لدي معرف جلسة عشوائي طويل عادي، قد يستخدم معرف جلسة عشوائي طويل، مما قد يستخدم العميل لبقية هذه "الجلسة" (في أي مكان من الدقائق القليلة القادمة إلى العام المقبل) بدلا من إعادة المصادقة في كل رسالة وبعد

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

ملاحظة "userpassword" في هناك. يجب على المستخدم المصادقة باستخدام شيء يعرف المستخدم فقط. لا uuid ولا رقم الهاتف هو شيء مثل هذا الشيء.

يجب أن يكون النظام أعلاه، بالإضافة إلى https، واضحة لتنفيذ (لقد فعلت ذلك عدة مرات في العديد من اللغات)، ولديه أداء جيد، وأن تكون آمنا لمستوى مناسب لمجموعة واسعة من "مناسب".

نصائح أخرى

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top