حماية API المفاتيح السرية في سميكة تطبيق العميل

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

  •  09-06-2019
  •  | 
  •  

سؤال

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

هو التعتيم الجمعية وسيلة جيدة تأمين هذه المفاتيح ؟

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

المحلول

ربما لا.

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

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

نصائح أخرى

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

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

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

لقد راودت فكرة أفعل هذا من أجل تطبيقات بلدي ولكن لم تنفذ ذلك.

DannySmurf هو الصحيح أنه لا يمكنك إخفاء المفاتيح من شخص تشغيل التطبيق ؛ إذا كان التطبيق يمكن الحصول على المفاتيح ، بحيث يمكن للشخص.

ومع ذلك ، ما كنت تحاول إنجاز بالضبط ؟

اعتمادا على ما هو عليه ، غالبا ما تكون هناك طرق لتحقيق هدفك أن لا تعتمد ببساطة على الحفاظ على سرية "سرية" على جهاز المستخدم.

في وقت متأخر إلى اللعبة هنا...

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

بعيدة أكثر أمنا النهج هو تأمين المكالمات API مع مجربة وحقيقية PKI.ومع ذلك, هذه واضحة أداء النفقات العامة إذا API المكالمات الشطي ، ولكن بالنسبة للغالبية العظمى من تطبيقات هذا هو غير هذه المسألة.

إذا كان الأداء هو مصدر قلق ، يمكنك استخدام Diffie-Hellman على غير المتماثلة PKI لتأسيس سر مشترك مفتاح متماثل للاستخدام مع الشفرات مثل AES."المشتركة" في هذه الحالة يعني مشترك بين العميل والخادم ، ليس كل العملاء / المستخدمين.لا يوجد ترميز-الثابت / خبز في مفتاح.في أي مكان.

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

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

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

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

ولكن انتظر:نحن لا آمن حتى الآن.لقد منعت قراءة الرسائل.

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

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

ما ينبغي أن يكون واضحا هو الحصول على هذا الحق ليست سهلة.وبالتالي استخدام PKI إلا إذا كنت على الاطلاق لا يمكن.

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

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

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