MD5 সংঘর্ষ উত্পাদন করার আগে কতগুলি এলোমেলো উপাদান রয়েছে?


164

আমি অ্যামাজন এস 3 এ একটি চিত্র গ্রন্থাগার পেয়েছি। প্রতিটি চিত্রের জন্য, আমি আমার সার্ভারে উত্স ইউআরএল এমডি 5 এবং একটি অনন্য ফাইলের নাম পেতে একটি টাইমস্ট্যাম্প। যেহেতু এস 3 এর উপ-ডিরেক্টরি থাকতে পারে না, তাই আমার এই সমস্ত চিত্র একক ফ্ল্যাট ফোল্ডারে সংরক্ষণ করতে হবে।

আমার তৈরি হওয়া এমডি 5 হ্যাশ মানের সংঘর্ষগুলি সম্পর্কে চিন্তা করার দরকার আছে কি?

বোনাস: এমডি 5 উত্পাদিত হ্যাশ মানটির সংঘর্ষগুলি দেখা শুরু করার আগে আমার কাছে কতগুলি ফাইল থাকতে পারে?



2
আক্ষরিক উত্তরটি হ'ল দ্বিতীয় ফাইলটিতে প্রথমটির মতো একই MD5 থাকতে পারে। তবে প্রতিকূলতা খুব ছোট।
রিক জেমস

উত্তর:


306

দুর্ঘটনাক্রমে সংঘর্ষের মাত্র দুটি হ্যাশ হওয়ার সম্ভাবনা 1/2 128 যা 340 অনিকিলিয়ন 282 ডিলিলিয়ন 366 নোনিলিয়ন 920 অক্টিলিয়ন 938 সেপটিলিয়ন 463 সেক্সটিলিয়ন 463 কুইন্টিলিয়ন 374 কোয়াড্রিলিয়ন 607 ট্রিলিয়ন 431 বিলিয়ন 768 মিলিয়ন 211 হাজার 456 এর মধ্যে 1।

তবে আপনি যদি সমস্ত হ্যাশ রাখেন তবে সম্ভাবনাটি জন্মদিনের প্যারাডক্সের জন্য কিছুটা বেশি ধন্যবাদ । অন্য কোনও হ্যাশের সাথে যে কোনও হ্যাশ সংঘর্ষের 50% সম্ভাবনা থাকার জন্য আপনার প্রয়োজন 2 64 হ্যাশ। এর অর্থ হ'ল একটি সংঘর্ষ পেতে, আপনাকে গড়ে 100 বছর ধরে প্রতি সেকেন্ডে 6 বিলিয়ন ফাইল হ্যাশ করতে হবে ।


20
"সংঘর্ষের সম্ভাবনা 1/2 ^ 64" - কী? সংঘর্ষের সম্ভাবনা ইতিমধ্যে হ্যাশ হওয়া আইটেমগুলির সংখ্যার উপর নির্ভরশীল, এটি কোনও নির্দিষ্ট সংখ্যা নয়। প্রকৃতপক্ষে, এটি হুবহু সমান 1 - sPn/s^n, sঅনুসন্ধানের জায়গার আকার ( 2^128এই ক্ষেত্রে) এবং nহ্যাশ হওয়া আইটেমের সংখ্যা। আপনি সম্ভবত 2^64যা ভাবছেন তা হ'ল এটির সংখ্যার ৫০% সম্ভাবনা থাকার জন্য আপনার MD5 হ্যাশের প্রয়োজন আনুমানিক সংখ্যা।
ব্লুরাজা - ড্যানি পিফ্লুঘুফুট

19
+1 কারণ আমি সর্বদা জানতে চেয়েছিলাম যে 999 ট্রিলিয়ন লোল কীভাবে গণনা করতে হবে (এবং ওহ হ্যাঁ, আপনার উত্তরটি তথ্যমূলক ছিল)
কেমিক্সনার

7
দুর্ভাগ্যক্রমে, আপনি এখনও সঠিক না। আপনি ধরে নিচ্ছেন যে হ্যাশ ফাংশনটি সত্যই এলোমেলো। এইটা না. এর অর্থ সংঘর্ষের সম্ভাবনা বেশি।
জর্জেন ফোগ

22
জর্জেনফোগ: এবং পদার্থবিজ্ঞানের সমস্ত আইনও "সঠিক নয়"। প্যাডেন্টিজমের এ জাতীয় স্তর অপ্রয়োজনীয় কারণ এটি কোনও অর্থবহ উপায়ে উত্তর পরিবর্তন করে না।
কর্নেল

20
সুতরাং আপনি বলছেন যে একটি সুযোগ আছে!
ভার্জিনিয়ান

27

এস 3 এর উপ-ডিরেক্টরি থাকতে পারে। কী নামে কেবল একটি "/" রাখুন এবং আপনি ফাইলগুলি পৃথক ডিরেক্টরিতে অ্যাক্সেস করতে পারবেন। আমি এগুলিকে এস 3-তে তাদের ব্যবহারকারীর আইডির ভিত্তিতে পৃথক ফোল্ডারে ব্যবহারকারী ফাইলগুলি সঞ্চয় করতে ব্যবহার করি।

উদাহরণস্বরূপ: "মাইবকেট / ব্যবহারকারী / 1234 / somefile.jpg"। এটি কোনও ফাইল সিস্টেমে ডিরেক্টরি হিসাবে ঠিক একই নয়, তবে এস 3 এপিআইতে এমন কিছু বৈশিষ্ট্য রয়েছে যা এটি প্রায় একইরূপে কাজ করতে দেয়। আমি এটি "ব্যবহারকারী / 1234 /" দিয়ে শুরু হওয়া সমস্ত ফাইলের তালিকা করতে জিজ্ঞাসা করতে পারি এবং এটি আমাকে "ডিরেক্টরিতে" ডিরেক্টরিতে সমস্ত ফাইল প্রদর্শন করবে।


7
এটি আমার মনে হয় এমন একটি বিষয়বস্তু হওয়া উচিত, কারণ এটি সংঘর্ষের সম্ভাবনা সম্পর্কে প্রশ্নের উত্তর দেয় না
ইয়ান ক্লার্ক

18

সুতরাং অপেক্ষা করুন, এটি:

md5(filename) + timestamp

বা:

md5(filename + timestamp)

যদি প্রাক্তন হয় তবে আপনি বেশিরভাগ জিইউইডি হওয়ার পথে এবং আমি এটি নিয়ে চিন্তা করব না। যদি পরে থাকে তবে কীভাবে আপনি শেষ পর্যন্ত সংঘর্ষে পড়বেন সে সম্পর্কে কার্গের পোস্টটি দেখুন।


1
টাইমস্ট্যাম্প সহ কীভাবে সংঘর্ষের সম্ভাবনা বাড়ানো যায় তা দয়া করে ব্যাখ্যা করুন
ব্র্যাড থমাস

14
@ ব্র্যাডথোমাস: এটি হয় না। সংঘর্ষের MD5 ঝুঁকিটি ফাইলের নাম অথবা ফাইলের নাম + টাইমস্ট্যাম্পের সংমিশ্রণে সমান। তবে প্রথম দৃশ্যে আপনার এমডি 5 এর সংঘর্ষ এবং একটি টাইমস্ট্যাম্প সংঘর্ষ উভয়ই দরকার।
ভিনসেন্ট হুবার্ট

2
এটি এখনও প্রতি মিনিটে দু'জন ব্যবহারকারীর সাথে সংঘর্ষের 2% (128 ^ 60) সম্ভাবনা ফেলেছে। আক্ষরিকভাবে ব্যবহারের অযোগ্য
বেরি এম।

2
@ ব্র্যাডথোমাস পরিষ্কার হতে: md5(filename) + timestampসংঘর্ষের ঝুঁকি ব্যাপকভাবে হ্রাস করে কারণ সামগ্রিকভাবে সংঘর্ষের জন্য আপনার ঠিক একই টাইমস্ট্যাম্পের জন্য এমডি 5 সংঘর্ষের প্রয়োজন হবে। md5(filename + timestamp)হিসাবে একই md5(filename), ধরে নেওয়া যে ফাইলের নামটি এলোমেলোভাবে শুরু হয়েছে (কারণ এলোমেলো কিছুতে আরও এলোমেলো যোগ করা কেবল পৃথক এমডি 5 ফলাফল পরিবর্তন করে এবং জন্মদিনের সমস্যাটি এখনও সমস্ত এমডি 5 হ্যাশ জুড়ে রয়েছে)।
রোবোক্যাট

10

সংঘর্ষের জন্য থাম্বের মোটামুটি নিয়ম হল মানগুলির ব্যাপ্তির বর্গমূল। আপনার এমডি 5 সিগটি সম্ভবত 128 বিট দীর্ঘ, সুতরাং আপনি 2 ^ 64 চিত্রের ওপরে এবং তার বাইরে সংঘর্ষ দেখতে পাচ্ছেন।


1
আপনার সম্ভবত সম্ভবত 128 বিট, 2 2 128 নয়। :-)
জেস্পের

5
en.wikedia.org/wiki/ জন্মদিনের_প্রব্লেম সমস্যাটি সম্পর্কে আরও কিছু তথ্য।
জর্জি স্কলি

7

যদিও এলোমেলো এমডি 5 এর সংঘর্ষ অত্যন্ত বিরল, আপনার ব্যবহারকারীরা যদি ফাইল সরবরাহ করতে পারেন (যা ভার্বাটিম সংরক্ষণ করা হবে) তবে তারা সংঘর্ষের প্রকৌশলী করতে পারে। এটি হ'ল তারা ইচ্ছাকৃতভাবে একই MD5sum কিন্তু দুটি ডেটা দিয়ে দুটি ফাইল তৈরি করতে পারে। আপনার অ্যাপ্লিকেশনটি এই কেসটি বুদ্ধিমান উপায়ে পরিচালনা করতে পারে তা নিশ্চিত করুন বা SHA-256 এর মতো শক্তিশালী হ্যাশ ব্যবহার করতে পারেন Make


একটি লবণ ব্যবহার করে ব্যবহারকারী প্রকৌশল সমস্যা যত্ন নিতে হবে, না?
স্ট্যাকওভারফ্লো 16

এটি কীভাবে লবণ প্রয়োগ করা হয় তার উপর নির্ভর করে। এটি ব্যবহারকারীর সরবরাহিত ডেটার উপসর্গ হওয়া বা এটি এইচএমএসি-র জন্য আরও ভাল কী হওয়া দরকার। যদিও গভীরতার সাথে প্রতিরক্ষা অনুশীলন করা এখনও এটি একটি ভাল ধারণা।
বিডনলান

দ্রষ্টব্য যদিও SHA256 দীর্ঘ 256 বিট দীর্ঘ, আপনি SHA256 থেকে কম বিট কাটা দ্বারা যে স্টোর করছেন তার দৈর্ঘ্যের সাথে সংঘর্ষের ঝুঁকিটি বাণিজ্য করতে পারেন উদাহরণস্বরূপ SHA256 ব্যবহার করুন তবে এটি 128 বিটকে ছেঁটে ফেলুন (যা এমডি 5 ব্যবহারের চেয়েও বেশি সুরক্ষিত) যদিও তাদের বিটগুলির একই সংখ্যা রয়েছে)।
রোবোকট

5

সংঘর্ষের কারণে এমডি 5 নিয়ে ভাল প্রচারিত সমস্যা থাকলেও, এলোমেলো তথ্যের মধ্যে অনিয়মিত সংঘর্ষ অত্যন্ত বিরল । অন্যদিকে, আপনি যদি ফাইলের নামটি নিয়ে হাঁসফাঁস করেন তবে তা এলোমেলো ডেটা নয় এবং আমি দ্রুত সংঘর্ষের আশা করব।


টেলরদের উদাহরণ হিসাবে আমার কেবল সমস্যাটি হ'ল যদি কেউ আপনার ডাটাবেসের একটি অনুলিপি পেয়ে থাকে তবে তারা রেইনবো টেবিল ব্যবহার করে ক্রেডিট কার্ডের সংখ্যাগুলি বের করে ফেলতে পারে ...
স্যাম সাফ্রন

1
যদিও আমি ক্রেডিট কার্ডের জন্য এমডি 5 ব্যবহার করতে চাই না, 10,000,000 এর মধ্যে সমস্ত বৈধ ক্রেডিট কার্ড সংখ্যার একটি রেইনবো টেবিল (আমি দেখেছি সবচেয়ে ছোট দৈর্ঘ্যের ক্রেডিট কার্ড হিসাবে 8 টি সংখ্যা) এবং 9,999,999,999,999,999 (বৃহত্তম 16 সংখ্যা নম্বর) এখনও বড় উত্পন্ন টেবিল। এই সংখ্যাগুলি চুরি করার সম্ভবত আরও সহজ উপায় আছে।
অ্যাক্রোসম্যান

1

এটি কতটা সম্ভব তা আসলেই কিছু যায় আসে না; এটা সম্ভব. এটি আপনার প্রথম দুটি জিনিস হ্যাশ হতে পারে (খুব অসম্ভব, তবে সম্ভব), সুতরাং আপনাকে শুরু থেকেই সংঘর্ষগুলি সমর্থন করতে হবে।


36
অবশ্যই আরও অনেক খারাপ জিনিস থাকতে পারে যা 1/2 ^ 128 এর সম্ভাব্যতার সাথে ঘটতে পারে। উদ্বেগের জন্য আপনি এটি একা-নাও করতে চাইতে পারেন।
ডিন হবে Will

2
এখানে সবচেয়ে খারাপ ঘটনাটি হ'ল আপনি একটি ফটো পেতে পারেন। অপেক্ষাকৃত কম সংখ্যার জন্য আমি চিন্তা করব না। এখন যদি আপনার সফ্টওয়্যারটি বিমানের অবতরণে কোনও স্ব-পাইলট নিয়ন্ত্রণ করে, তবে অন্য একটি গল্প বলে।
জিম সি

9
আপনি সিরিয়াস হতে পারবেন না। সংঘর্ষের ভাল সুযোগ পাওয়ার জন্য আপনার প্রতি সেকেন্ডে 6 বিলিয়ন ফাইল হ্যাশ করতে হবে, প্রতি 100 সেকেন্ডের জন্য প্রতি সেকেন্ডে। এমনকি যদি আপনি খুব দুর্ভাগ্য হন তবে এটি সম্ভবত মানবজীবনের চেয়ে বেশি সময় ধরে ব্যবহৃত এস 3 এর সম্পূর্ণ ক্ষমতা থেকে বেশি গ্রহণ করবে।
কর্নেল

12
আপনার ডেটাবেস এবং এর ব্যাকআপগুলি সমস্ত ব্যর্থ হওয়ার সম্ভাবনা কয়েকশো গুণ বেশি। সংঘর্ষগুলি উদ্বিগ্ন হওয়ার মতো নয়।
আর্টিলিয়াস

5
আপনার সার্ভার লাগাতে বাঙ্কার তৈরি করার সময় সংঘর্ষ প্রতিরোধের সময়টি ব্যবহার করুন! এই উদ্বেগপূর্ণ উল্কাগুলি আপনাকে আঘাত করতে পারে (খুব সম্ভবত সম্ভাব্য, তবে সম্ভব), তাই আপনাকে ভিক্ষা থেকে উল্কা আশ্রয় সমর্থন করতে হবে।
polvoazul 22'18

1

MD5 সংঘর্ষ অত্যন্ত সম্ভাবনা নেই। আপনার যদি 9 ট্রিলিয়ন এমডি 5 থাকে তবে কেবলমাত্র একটি সুযোগ আছে 9 ট্রিলিয়ন যে একটি সংঘর্ষের হবে।


1
অন্যান্য উত্তরসমূহ অনেকেই একটি সংঘর্ষের যখন যোগ করার সম্ভাব্যতা সম্পর্কে কথা বলতে এক টি আইটেম। আমি মনে করি আমার উত্তরটি আরও কার্যকর কারণ এটি সম্ভবত পুরো টেবিলটির ডুপ ডুবিয়ে থাকার বিষয়ে কথা বলে।
রিক জেমস

1
এর MD5 এর সাথে কোনও সম্পর্ক নেই এবং এটি সঠিক নয়। এটি বলার মতো যে আপনার কাছে যদি 9 ট্রিলিয়ন বিড়াল থাকে তবে 9 ট্রিলিয়নের মধ্যে 1 টির সম্ভাবনা রয়েছে যে অন্য কারও একটির মতো বিড়াল রয়েছে। এখানে মূল সমস্যাটি হ'ল আপনি একাধিক মান সহ একই হ্যাশ পেতে পারেন।
জুনাস আলহোনেন

@ জুনাসআলহোনেন - হ্যাঁ, এটি সত্য। এবং প্রচুর দরিদ্র লোকেরা আর যে কোনও লটারির টিকিট কিনতে পারে না তা অজুহাত হিসাবে ব্যবহার করে।
রিক জেমস

ধন্যবাদ, এটি আসলে একটি খুব দরকারী পরিসংখ্যান। 9 ট্রিলিয়ন আইটেম সন্নিবেশ করানোর ফলে একটি সংঘর্ষ হয়েছিল। ধন্যবাদ।
টম পি।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.