سؤال

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

أنا لست مهتمًا كثيرًا بالتشفير ولكن إذا لم أكن واضحًا بدرجة كافية فسأحاول التعديل/التعليق لتوضيح أي أسئلة.

في محاولة للإيجاز، البيئة هي شيء من هذا القبيل:

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

  • وجود قاعدة بيانات لا يمكنك الوصول إليها لعدد من الحقول، على سبيل المثال لنفترض "العنوان" وهو نص/varchar كالمعتاد.

  • لا يمكنك الوصول إلى المفتاح لفك تشفير المعلومات، وجميع المعلومات تصل إلى قاعدة البيانات المشفرة بالفعل.

المشكلة الرئيسية هي شيء من هذا القبيل، كيفية إجراء الاستعلامات باستمرار على قاعدة البيانات، فمن المستحيل القيام بأشياء مثل "حيث العنوان مثل '%F§YU/´~#JKSks23%'".(إذا كان هناك أي شخص لديه إجابة لهذا فلا تتردد في إطلاق النار عليه).

ولكن هل هو موافق للقيام به where address='±!NNsj3~^º-:'؟أم أنها ستستهلك قاعدة البيانات بالكامل؟

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

هل يمكن لأي شخص أن يوجهني في الاتجاه لمواصلة التفكير في الأمر؟


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

مجرد تغذية بعض المعلومات:

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

الحل المحتمل للسماح بالمطابقة شبه الجزئية:

  • كلمة المرور + اثنين من الحقول العامة للمستخدم هي في الواقع مفتاح التشفير.للمصادقة، الفكرة هي تشفير قيمة ثابتة ومقارنتها داخل قاعدة البيانات.
  • إنشاء مجموعة جديدة من الجداول حيث يتم تخزين المعلومات بطريقة تحليلية، وهذا يعني شيئًا مثل:سيصبح "4th Street" صفين مشفرين (واحد لـ "4th" والآخر لـ "Street").وهذا من شأنه أن يسمح بالفعل بالمطابقة شبه الجزئية حيث يمكن إجراء البحث بالفعل على الجداول المنفصلة.

سؤال جديد:

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

ما بعد النص:لم أقبل إجابة Cade Roux فقط للسماح بإجراء مزيد من المناقشة وخاصة الإجابة المحتملة على السؤال الجديد.

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

المحلول

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

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

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

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

نصائح أخرى

لماذا لا تقوم بتشفير القرص الذي يحتوي على جداول قاعدة البيانات، وتشفير اتصالات قاعدة البيانات، والسماح لقاعدة البيانات بالعمل بشكل طبيعي؟

[لا أفهم حقًا السياق/القيود التي تتطلب هذا المستوى من جنون العظمة]

يحرر:"قيود القانون" ايه؟أتمنى ألا تكون متورطًا في أي شيء غير قانوني، فأنا أكره أن أكون شريكًا غير مقصود...؛-)

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

قبل بضعة أشهر واجهت نفس المشكلة:يتم تشفير قاعدة البيانات بأكملها (باستثناء الفهارس) وتظهر مشكلة التطابقات الجزئية.

لقد بحثت في الإنترنت بحثًا عن حل، ولكن يبدو أنه ليس هناك الكثير مما يمكنني فعله حيال ذلك سوى "الحل البديل".

الحل الذي اعتمدته أخيرًا هو:

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

  2. قم بإجراء المطابقة الجزئية مرة أخرى لهذا الجدول المؤقت واحصل على المعرفات.

  3. الاستعلام عن الجدول الحقيقي لتلك المعرفات وإرجاع النتيجة.

  4. قم بإسقاط الجدول المؤقت.

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

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

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

$salt = "123-=asd";
$address = "3412 g ave";

$sql = "INSERT INTO addresses (address) VALUES ('" . md5($salt . $address) . "')";
mysql_query($sql);

ثم، للتحقق من صحة العنوان في المستقبل:

$salt = "123-=asd";
$address = "3412 g ave";

$sql = "SELECT address FROM addresses WHERE address = '" . md5($salt . $address) . "'";
$res = mysql_query($sql);
if (mysql_fetch_row($res))
    // exists
else
    // does not

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

http://en.wikipedia.org/wiki/MD5

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

إذا لم تتمكن من القيام بذلك، ولا تريد زيادة النفقات في الواجهة الأمامية، فيمكنك إنشاء مكون في النهاية الخلفية، يعمل في الخادم، ويقوم بمعالجة البيانات المشفرة.

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

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