سؤال

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

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

أي أفكار أفضل؟

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

المحلول

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

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

تدفق أكثر تفصيلا هنا:

  1. يدخل المستخدم كلمة المرور "123456" عند تسجيل الدخول إلى نظامك.
  2. يمكنك استخدام SHA256 لكلمة مرور "123456" والحصول على مفتاح: "8d969EEF6ECAD3C29A3A629280E686CF0C3F5D5A86AFF3CA12020C923ADC6C92"
  3. استخدم مفتاح "8d969 ..." لفك تشفير كلمة مرور المواقع في قاعدة البيانات الخاصة بك.

يمكنك تحسين هذا بعدة طرق. على سبيل المثال: تمليك كلمة المرور قبل حساب تجزئة SHA.

كعينة عملية على مثل هذا التمليح ، ميخائيل اقترح استخدام PBKDF2 (مع HMACSHA-256 كما اثنين من المعلمات وظيفة عشوائية pseudo).

تحسين آخر: تخزين نسخة مشفرة من المفتاح للسماح للمستخدم الخاص بك بتغيير كلمة المرور الخاصة به دون الحاجة إلى إعادة شطب جميع كلمات المرور الخاصة به ... إلخ ...

نصائح أخرى

أي شيء يمكنك القيام به لاستخدام بيانات الاعتماد الخاصة بك ، يمكن للمهاجم أيضًا

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

في نهاية المطاف ، يجب أن يصل المطاط إلى الطريق ، لذا اذهب إلى القهر. لا تقلق تمامًا. فقط تأكد من إقرانها بممارسات ذكية.

النهج والاقتراحات

قم بإنشاء مفاتيح API لكل حساب لكل حساب ، لاستخدامها من قبل الجهاز

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

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

استخدم كلمة مرور لكل مستخدم لمجموعة بيانات الاعتماد الخاصة بهم

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

تشفيره على القرص على أي حال

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

تخزين الأسرار في مفاتيح النظام

على Linux ، استخدم gnome-keyring. بعد ذلك ، يمكنك إجراء مكالمات بسيطة لإقامة القراءة ، ومعاملتها كقاعدة بيانات كلمة مرور. يعتمد Keyring Gnome على معيار PKCS#11.

ال gnome-keyring لديه واجهة برمجة تطبيقات لتوفير العناصر المفاتيح واسترداد.

/* A callback called when the operation completes */
static void
found_password (GnomeKeyringResult res, const gchar* password, gpointer user_data)
{
  /* user_data will be the same as was passed to gnome_keyring_find_password() */
  // ... do something with the password ...
  /* Once this function returns |password| will be freed */
}

static void
find_my_password()
{
  gnome_keyring_find_password (GNOME_KEYRING_NETWORK_PASSWORD,  /* The password type */
                               found_password,                  /* callback */
                               NULL, NULL,     /* User data for callback, and destroy notify */
                               "user", "me", 
                               "server", "gnome.org",
                               NULL);
}

على Windows 7+ ، استخدم ميزة "نظام الملفات المشفرة" (EFS). يتم تشفير جميع الملفات بشهادة معها بدورها بكلمة مرور Windows.

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

قم بإعداد جهاز بعيد يمنح الوصول

هل يمكنك إعداد جهاز يمنح الوصول إلى بيانات الاعتماد أو مفتاح إلغاء قفل باستخدام أزواج المفاتيح العامة والخاصة؟

على التجزئة

إذا كنت تجزئة أسماء المستخدمين وكلمات المرور ، فأنت لا تستعيدها. تم تصميم التجزئة لتكون وظائف في اتجاه واحد.

يمكنك تشفير على الرغم من ذلك ، فإن بيانات التشويش ، لكنني لا أوصي بذلك.

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

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

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

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

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

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

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