كم عدد العناصر العشوائية التي تنتج قبل الاصطدام MD5؟

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

هل أنا بحاجة للقلق بشأن التصادمات في قيمة تجزئة MD5 التي يتم إنتاجها؟

مكافأة: كم عدد الملفات التي يمكنني الحصول عليها قبل أن أبدأ في رؤية التصادمات في قيمة التجزئة التي تنتجها MD5؟

131
وأضاف المؤلف kenorb, مصدر
الإجابة الحرفية هي أن الملف الثاني يمكن أن يكون له نفس MD5 كالأول. ومع ذلك فإن الاحتمالات ضئيلة للغاية.
وأضاف المؤلف Rick James, مصدر

8 إجابة

احتمال اصطدام اثنين فقط من الاصطدام بطريق الخطأ هو 1/2 128 وهي 1 في 340 undecillion 282 decillion 366 nonillion 920 octillion 938 septillion 463 sextillion 463 quintillion 374 quadrillion 607 Trillion 431 بليون 768 مليون 211 456.

ومع ذلك ، إذا احتفظت بجميع التجزئات ، فإن الاحتمال يكون أعلى قليلاً بفضل تناقض عيد الميلاد . للحصول على فرصة بنسبة 50٪ لأي تجزئة تتصادم مع أي تجزئة أخرى ، يلزمك تجزئة 2 64 . وهذا يعني أنه للحصول على تصادم ، في المتوسط ​​، ستحتاج إلى تجزئة 6 مليار ملفات في الثانية لمدة 100 عام .

238
وأضاف
إذن أنت تقول أن هناك فرصة!
وأضاف المؤلف vargonian, مصدر
"احتمال الاصطدام هو 1/2 ^ 64" - ماذا؟ يعتمد احتمال الاصطدام على عدد العناصر التي تم تجزئتها بالفعل ، وهو ليس رقمًا ثابتًا. في الواقع ، تساوي بالضبط 1 - sPn/s ^ n ، حيث s هو حجم مساحة البحث ( 2 ^ 128 في هذه الحالة) ، و n هو عدد العناصر المجزأة. ما كنت أفكر به على الأرجح هو 2 ^ 64 ، وهو العدد التقريبي للعناصر التي ستحتاج إلى تجزئة MD5 للحصول على فرصة للتصادم بنسبة 50٪.
وأضاف المؤلف BlueRaja - Danny Pflughoeft, مصدر
JørgenFogh: وجميع قوانين الفيزياء "غير صحيحة" سواء. هذا المستوى من الحكمة ليس ضروريا لأنه لا يغير الإجابة بأي طريقة ذات معنى.
وأضاف المؤلف Kornel, مصدر
yaauie لا ، هذا مستحيل للغاية. أنا أتحدث عن توليد 2 ^ 64 التجزئة من أصل 2 ^ 128 منها. هذا هو واحد من كوادريليون في المئة من جميع التجزئات الممكنة التي تم توليدها.
وأضاف المؤلف Kornel, مصدر
@ BlueRaja-DannyPflughoeft هذا ما كان يدور في خلدي في الواقع. شكرا على التصحيح.
وأضاف المؤلف Kornel, مصدر
ConcernedOfTunbridgeWells: لقد أخذت تصحيحًا لمفارقة أعياد الميلاد ، وهذا هو السبب في أن الإجابة تكون بالمليارات ، وليس الكماليات. لم أتمكن من التحقق من الاحتمالية مع البرنامج النصي الخاص بك PV = 2 ** 128؛ SS = 2 ** 64 : OverflowError: long int كبير جدًا للتحويل إلى int
وأضاف المؤلف Kornel, مصدر
ليس صحيحا تماما. احتمال حدوث تصادم أكبر بكثير من هذا حيث قد يتصادم عنوان URL جديد مع أي عنصر موجود في الجدول. راجع هذا النشر (إخلاء المسئولية ، كتبت ذلك) لـ run-run إلى أسفل على الرياضيات ، ونص صغير python يمكن تكييفه لحساب احتمالية عدد معين من عناوين URL.
وأضاف المؤلف ConcernedOfTunbridgeWells, مصدر
لسوء الحظ ، أنت لا تزال غير صحيح. أنت على افتراض أن وظيفة التجزئة عشوائية حقا. ليس. هذا يعني أن احتمال الاصطدام أعلى.
وأضاف المؤلف Jørgen Fogh, مصدر
+1 لإضافة الحساب. هذا أكثر دقة قليلاً: http://www.google.com/search؟q=2^64٪2F100* (ثانية + لكل عام)
وأضاف المؤلف Mathias Bynens, مصدر
(وهذا يعني أنه للحصول على تصادم ، في المتوسط ​​، ستحتاج إلى تجزئة 6 مليارات ملف في الثانية لمدة 100 سنة) ؛ غير صحيح. هذا يعني أنه بحلول الوقت قمت بتجزئة 6 مليارات ملف في الثانية لمدة 100 عام ، فإن 50٪ من التجزئة التي تقوم بتوليدها سوف تتصادم مع التجزئات التي تم إنشاؤها مسبقًا.
وأضاف المؤلف yaauie, مصدر
+1 لأنني أردت دائمًا معرفة كيفية احتساب ما يزيد عن 999 تريليون لول (ونعمًا ، كانت إجابتك مفيدة)
وأضاف المؤلف Kmeixner, مصدر
حدسي إذا تجاهلنا مفارقة عيد الميلاد وننظر فقط إلى حل تقريبي: أضف 2 ^ 64 إلى قائمة. الآن إضافة واحد أكثر تجزئة لتلك القائمة. يحتوي هذا التصنيف على رمز 1/2 ^ 128 مرة 2 ^ 64 للتصادم ، أي أن هناك تجزئة أخرى بها 1/2 ^ 64 </كود> فرصة الاصطدام. الآن إضافة آخر 2 ^ 64 تجزئ إلى القائمة ويجب أن تحصل على تصادم. افعل نفس الحساب لـ 2 ^ 63 (ولاحظ 2 ^ 63 + 2 ^ 63 = 2 ^ 64 ).
وأضاف المؤلف robocat, مصدر

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

على سبيل المثال: "mybucket/users/1234/somefile.jpg". ليس بالضبط نفس الدليل في نظام الملفات ، ولكن تحتوي واجهة برمجة تطبيقات S3 على بعض الميزات التي تجعلها تعمل تقريبًا. ويمكنني أن أطلب من قائمة جميع الملفات التي تبدأ مع "المستخدمين/1234 /" ، وسوف تظهر لي كل الملفات في هذا "الدليل".

22
وأضاف
يجب أن يكون هذا محتوى أعتقد أنه لا يجيب على السؤال عن احتمال حدوث تصادم
وأضاف المؤلف Ian Clark, مصدر

لذا انتظر ، هل هو:

md5(filename) + timestamp

أو:

md5(filename + timestamp)

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

16
وأضاف
BradThomas: إنه لا يفعل ذلك. خطر الاصطدام MD5 هو نفسه سواء كان على اسم الملف أو مزيج من الطابع الزمني filename +. ولكن في السيناريو الأول ، يجب أن يكون لديك تصادم MD5 وتصادم للطابع الزمني.
وأضاف المؤلف Vincent Hubert, مصدر
هذا لا يزال يترك فرصة 2 ^ (128 ^ 60) من التكاثر مع اثنين من المستخدمين في الدقيقة الواحدة. حرفيا غير قابلة للاستخدام.
وأضاف المؤلف Berry M., مصدر
يرجى توضيح كيفية تضمين الطابع الزمني لفرصة الاصطدام
وأضاف المؤلف Brad Thomas, مصدر
BradThomas لتكون أكثر وضوحًا: md5 (اسم الملف) + timestamp تقلل من خطر الاصطدام بشكل كبير لأنك ستحتاج إلى اصطدام md5 لنفس الطابوق بالضبط ليحدث تصادمًا بشكل عام. md5 (filename + timestamp) هو نفسه md5 (filename) ، بافتراض أن اسم الملف عشوائي للبدء (لأن إضافة المزيد من العشوائية إلى شيء عشوائي فقط يغير md5 فردي ونتيجة لمشكلة عيد الميلاد لا تزال موجودة في جميع تجزئات md5).
وأضاف المؤلف robocat, مصدر

والقاعدة التقريبية الأولية للتصادم هي الجذر التربيعي لمجموعة القيم. من المفترض أن يبلغ طول حزمة MD5 sig 128 بت ، لذا من المحتمل أن تشاهد تصادمات تتجاوز 2 ^ 64 صورة.

10
وأضاف
en.wikipedia.org/wiki/Birthday_Problem بعض المعلومات الإضافية عن المشكلة.
وأضاف المؤلف Georg Schölly, مصدر
ربما تعني 128 بت ، وليس 2 ^ 128. :-)
وأضاف المؤلف JesperE, مصدر

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

7
وأضاف
باستخدام الملح من شأنه أن يعتني مشكلة هندسية المستخدم ، أليس كذلك؟
وأضاف المؤلف StackOverflowed, مصدر
يعتمد ذلك على كيفية تطبيق الملح. قد تحتاج إلى أن تكون بادئة للبيانات التي يوفرها المستخدم ، أو من الأفضل أن تكون مفتاح HMAC. ربما لا تزال فكرة جيدة لممارسة الدفاع في العمق رغم ذلك.
وأضاف المؤلف bdonlan, مصدر
لاحظ أنه بالرغم من أن SHA256 يبلغ طوله 256 بت ، يمكنك التعامل مع مخاطر الاصطدامات بطول المفتاح الذي تقوم بتخزينه عن طريق قطع SHA256 إلى عدد أقل من وحدات البت ، على سبيل المثال. استخدام SHA256 ولكن اقتطاعه إلى 128 بت (وهو أكثر أمانًا من استخدام MD5 على الرغم من أن لديهم نفس عدد وحدات البت).
وأضاف المؤلف robocat, مصدر

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

3
وأضاف
المشكلة الوحيدة التي لدي مع مثال taylors هو أنه إذا كان شخص ما يحصل على نسخة من قاعدة البيانات الخاصة بك على الأرجح أنها يمكن معرفة أرقام بطاقات الائتمان باستخدام جدول قوس قزح ...
وأضاف المؤلف Sam Saffron, مصدر
في حين أنني لن أختار استخدام MD5 لبطاقات الائتمان ، فإن جدول راينبو لجميع أرقام بطاقات الائتمان الصالحة بين 10،000،000 (8 أرقام هي أصغر بطاقة ائتمان طولية رأيتها) و 9999،999،999،999،999 (أكبر عدد من 16 رقم) لا يزال كبيرًا جدول لتوليد. ربما هناك طرق أسهل لسرقة تلك الأرقام.
وأضاف المؤلف acrosman, مصدر

اصطدام MD5 غير محتمل للغاية. إذا كان لديك 9 تريليون MD5s ، فهناك فرصة واحدة فقط في 9 تريليون أنه سيكون هناك تصادم.

0
وأضاف
العديد من الإجابات الأخرى تتحدث عن احتمالية حدوث تصادم عند إضافة بند واحد واحد . أعتقد أن إجابتي أكثر فائدة لأنها تتحدث عن احتمال وجود الجدول بأكمله.
وأضاف المؤلف Rick James, مصدر

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

0
وأضاف
قد يكون هناك بالطبع الكثير من الأشياء السيئة الأخرى التي يمكن أن تحدث باحتمالية 1/2 ^ 128. قد لا ترغب في استبعاد هذا واحد للقلق.
وأضاف المؤلف Will Dean, مصدر
لا يمكنك أن تكون جاداً ستحتاج إلى تجزئة 6 مليارات ملف في الثانية ، كل ثانية لمدة 100 سنة للحصول على فرصة جيدة للتصادم. حتى إذا كنت غير محظوظ جدًا ، فمن المحتمل أن يستغرق الأمر أكثر من كامل سعة S3 المستخدمة لفترة أطول من العمر البشري.
وأضاف المؤلف Kornel, مصدر
أسوأ شيء يمكن أن يحدث هنا هو أنه يمكنك الحصول على صورة. لعدد صغير نسبيا لا تقلق. الآن إذا كان برنامجك يتحكم في الطيار الآلي بهبوط طائرة ، هذه قصة أخرى.
وأضاف المؤلف Jim C, مصدر
من المرجح أكثر من المليارات من المرات أن تفشل قاعدة البيانات الخاصة بك ونسخها الاحتياطية. التصادمات لا تستحق القلق بشأنها.
وأضاف المؤلف Artelius, مصدر
استخدام وقت منع الاصطدام بناء مخبأ لوضع الخادم الخاص بك! هذه النيازك المزعجة يمكن أن تضربك (من غير المحتمل جدا ، ولكن ممكن) ، لذلك ستحتاج إلى دعم مأوى النيزك من التسول.
وأضاف المؤلف polvoazul, مصدر
قد يستغرق الأمر 100 عام للحصول على فرصة 50٪ للتصادم في ملفات 6G/ثانية. لديك فرصة جيدة لعقد الاصطدام في وقت سابق.
وأضاف المؤلف user327961, مصدر