দুটি আলাদা স্ট্রিং কি একই এমডি 5 হ্যাশ কোড উত্পন্ন করতে পারে?


94

আমাদের প্রতিটি বাইনারি সম্পদের জন্য আমরা একটি এমডি 5 হ্যাশ তৈরি করি। কোনও নির্দিষ্ট বাইনারি সম্পদ ইতিমধ্যে আমাদের প্রয়োগে আছে কিনা তা পরীক্ষা করতে এটি ব্যবহার করা হয়। তবে এটি কি সম্ভব যে দুটি ভিন্ন বাইনারি সম্পদ একই এমডি 5 হ্যাশ তৈরি করে। সুতরাং এটি কি দুটি পৃথক স্ট্রিং একই এমডি 5 হ্যাশ তৈরি করে?

উত্তর:


93

এমনকি কয়েক বিলিয়ন সম্পত্তির সংকলনের জন্য , এলোমেলো সংঘর্ষের সম্ভাবনা তুচ্ছ-স্বল্প - আপনার এমন উদ্বেগ হওয়া উচিত নয়। জন্মদিনের প্যারাডক্স বিবেচনা করে , 2 ^ 64 (বা 18,446,744,073,709,551,616) সম্পদের একটি সেট দেওয়া, এই সেটের মধ্যে একক MD5 সংঘর্ষের সম্ভাবনা 50%। এই স্কেলটিতে, আপনি সম্ভবত Google কে স্টোরেজ ক্ষমতার দিক থেকে পরাজিত করবেন।

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

এছাড়াও, আক্রমণকারী যদি আপনার ডাটাবেসে কোনও বিদ্যমান সম্পত্তির সংঘর্ষ জালতে পারে তবে পদক্ষেপগুলি বিবেচনা করুন । এমডি 5 (২০১১ হিসাবে) এর বিরুদ্ধে এরূপ কোনও পরিচিত আক্রমণ ( প্রিমাইজ আক্রমণ ) না থাকলেও সংঘর্ষের আক্রমণ সম্পর্কিত বর্তমান গবেষণাটি প্রসারিত করে এটি সম্ভব হয়েছিল।

এগুলি যদি কোনও সমস্যা হিসাবে দেখা দেয় তবে আমি SHA-2 সিরিজের হ্যাশ ফাংশনগুলি (SHA-256, SHA-384 এবং SHA-512) দেখার পরামর্শ দিই। খারাপ দিকটি এটি সামান্য ধীর এবং হ্যাশ আউটপুট দীর্ঘ।


4
'দিনগুলি' এই মুহুর্তে একটি বিশাল উত্সাহ, এটি আমি যেমন বুঝতে পারি understand
নিক জনসন 15

4
সত্য, আমি আমার পোস্ট আপডেট করেছি। 2004 এলোমেলো সংঘর্ষের আক্রমণটি আসলেই খুব দ্রুত। 2007 MD5 প্রিফিক্স সংঘর্ষ আক্রমণ কয়েক দিন সময় নিতে পারে - তবে সাধারণত একজন আক্রমণকারীর পক্ষে অনেক বেশি কার্যকর
intgr

4
কোনও কাজের উদাহরণের জন্য রুবেনের উত্তর দেখুন যা কয়েক ঘন্টার মধ্যে দু'জন পৃথক এক্সিকিউটেবলের মধ্যে সংঘাত তৈরি করে। :)
নিক জনসন

38

এমডি 5 হ্যাশ ফাংশন - সুতরাং হ্যাঁ, দুটি পৃথক স্ট্রিং একেবারে সংঘর্ষিত MD5 কোড তৈরি করতে পারে।

বিশেষত, নোট করুন যে এমডি 5 কোডগুলির একটি নির্দিষ্ট দৈর্ঘ্য রয়েছে সুতরাং এমডি 5 কোডের সম্ভাব্য সংখ্যাটি সীমাবদ্ধ। স্ট্রিং সংখ্যা (যে কোনও দৈর্ঘ্যের) অবশ্যই স্পষ্টভাবে সীমাহীন তাই এটি যুক্তিযুক্তভাবে অনুসরণ করে যে সেখানে সংঘর্ষ থাকতে হবে।


12

হ্যা এটা সম্ভব. এটি আসলে একটি জন্মদিনের সমস্যা । তবে একই এমডি 5 হ্যাশযুক্ত দুটি এলোমেলোভাবে বেছে নেওয়া স্ট্রিংয়ের সম্ভাবনা খুব কম।

উদাহরণস্বরূপ এটি এবং এই প্রশ্নগুলি দেখুন ।


4
কি সম্ভাবনা? যে সংঘর্ষ? না, এটি 1 হবে, অর্থাত্ খুব উচ্চ। ;-)
কনরাড রুডল্ফ

ঠিক আছে। একই এমডি 5 হ্যাশ সহ দুটি স্ট্রিং অবশ্যই রয়েছে।
শার্পথুথ

4
আমি এটিকে কবুতরের ছিদ্র সমস্যা হিসাবে জানি।
ড্যানিয়েল এ। হোয়াইট

জন্মদিনের সমস্যাটি কেবল একটি সংঘর্ষের স্বতন্ত্রতা নিয়ে উদ্বেগ প্রকাশ করে। প্রমাণ জন্য হতে হবে এক যদি আপনি চান Pidgeon গর্ত নীতি
জে।

যদি আমি পারতাম তবে আপনার উত্তরটি আমি দুবার ভোট দিয়ে দেব। সম্ভাবনার কতটা "নিম্ন" আমরা কথা বলছি?
অ্যালেক্স স্পেন্সার

10

হ্যাঁ, অবশ্যই: এমডি 5 হ্যাশের একটি সীমাবদ্ধ দৈর্ঘ্য রয়েছে, তবে এমডি 5-হ্যাশ হতে পারে এমন অসীম সম্ভাব্য অক্ষরের স্ট্রিং রয়েছে।


10

হ্যাঁ, এটি সম্ভব যে দুটি পৃথক স্ট্রিং একই এমডি 5 হ্যাশ কোড উত্পন্ন করতে পারে।

হেক্স স্ট্রিংয়ে খুব অনুরূপ বাইনারি বার্তা ব্যবহার করে এখানে একটি সাধারণ পরীক্ষা দেওয়া হচ্ছে:

$ echo '4dc968ff0ee35c209572d4777b721587d36fa7b21bdc56b74a3dc0783e7b9518afbfa200a8284bf36e8e4b55b35f427593d849676da0d1555d8360fb5f07fea2' | xxd -r -p | tee >/dev/null >(md5) >(sha1sum)
c6b384c4968b28812b676b49d40c09f8af4ed4cc  -
008ee33a9d58b51cfeb425b0959121c9

$ echo '4dc968ff0ee35c209572d4777b721587d36fa7b21bdc56b74a3dc0783e7b9518afbfa202a8284bf36e8e4b55b35f427593d849676da0d1d55d8360fb5f07fea2' | xxd -r -p | tee >/dev/null >(md5) >(sha1sum)
c728d8d93091e9c7b87b43d9e33829379231d7ca  -
008ee33a9d58b51cfeb425b0959121c9

তারা বিভিন্ন SHA-1 যোগফল তৈরি করে তবে একই MD5 হ্যাশ মান। দ্বিতীয়ত স্ট্রিংগুলি খুব অনুরূপ, সুতরাং তাদের মধ্যে পার্থক্য খুঁজে পাওয়া মুশকিল।

পার্থক্যটি নিম্নলিখিত কমান্ড দ্বারা পাওয়া যাবে:

$ diff -u <(echo 4dc968ff0ee35c209572d4777b721587d36fa7b21bdc56b74a3dc0783e7b9518afbfa200a8284bf36e8e4b55b35f427593d849676da0d1555d8360fb5f07fea2 | fold -w2) <(echo 4dc968ff0ee35c209572d4777b721587d36fa7b21bdc56b74a3dc0783e7b9518afbfa202a8284bf36e8e4b55b35f427593d849676da0d1d55d8360fb5f07fea2 | fold -w2)
--- /dev/fd/63  2016-02-05 12:55:04.000000000 +0000
+++ /dev/fd/62  2016-02-05 12:55:04.000000000 +0000
@@ -33,7 +33,7 @@
 af
 bf
 a2
-00
+02
 a8
 28
 4b
@@ -53,7 +53,7 @@
 6d
 a0
 d1
-55
+d5
 5d
 83
 60

উপরের সংঘর্ষের উদাহরণটি মার্ক স্টিভেন্স থেকে নেওয়া: এমডি 5 , 2012 এর জন্য একক-ব্লক সংঘর্ষ ; তিনি সোর্স কোড ( কাগজের বিকল্প লিঙ্ক ) সহ তার পদ্ধতিটি ব্যাখ্যা করেছেন ।


আরেকটি পরীক্ষা:

$ echo '0e306561559aa787d00bc6f70bbdfe3404cf03659e704f8534c00ffb659c4c8740cc942feb2da115a3f4155cbb8607497386656d7d1f34a42059d78f5a8dd1ef' | xxd -r -p | tee >/dev/null >(md5) >(sha1sum)
756f3044edf52611a51a8fa7ec8f95e273f21f82  -
cee9a457e790cf20d4bdaa6d69f01e41

$ echo '0e306561559aa787d00bc6f70bbdfe3404cf03659e744f8534c00ffb659c4c8740cc942feb2da115a3f415dcbb8607497386656d7d1f34a42059d78f5a8dd1ef' | xxd -r -p | tee >/dev/null >(md5) >(sha1sum)
6d5294e385f50c12745a4d901285ddbffd3842cb  -
cee9a457e790cf20d4bdaa6d69f01e41

বিভিন্ন SHA-1 যোগফল, একই MD5 হ্যাশ।

পার্থক্যটি একটি বাইটে রয়েছে:

$ diff -u <(echo 0e306561559aa787d00bc6f70bbdfe3404cf03659e704f8534c00ffb659c4c8740cc942feb2da115a3f4155cbb8607497386656d7d1f34a42059d78f5a8dd1ef | fold -w2) <(echo 0e306561559aa787d00bc6f70bbdfe3404cf03659e744f8534c00ffb659c4c8740cc942feb2da115a3f415dcbb8607497386656d7d1f34a42059d78f5a8dd1ef | fold -w2)
--- /dev/fd/63  2016-02-05 12:56:43.000000000 +0000
+++ /dev/fd/62  2016-02-05 12:56:43.000000000 +0000
@@ -19,7 +19,7 @@
 03
 65
 9e
-70
+74
 4f
 85
 34
@@ -41,7 +41,7 @@
 a3
 f4
 15
-5c
+dc
 bb
 86
 07

উপরের উদাহরণটি তাও জি এবং ডেনগুও ফেং থেকে অভিযোজিত: কেবলমাত্র একটি একক ব্লক বার্তা , ২০১০ ব্যবহার করে এমডি 5 সংঘর্ষ রচনা করুন


সম্পর্কিত:


4

হ্যা এটা সম্ভব. একে হ্যাশ সংঘর্ষ বলে

এই বলে যে, এমডি 5 এর মতো অ্যালগরিদমগুলি সংঘর্ষের সম্ভাবনা হ্রাস করার জন্য ডিজাইন করা হয়েছে।

এমডি 5- তে উইকিপিডিয়া এন্ট্রি এমডি 5 এর কয়েকটি দুর্বলতা ব্যাখ্যা করে, যা সম্পর্কে আপনার সচেতন হওয়া উচিত।


4

শুধু আরও তথ্যপূর্ণ হতে। গণিতের দৃষ্টিকোণ থেকে, হ্যাশ ফাংশনগুলি ইনজেকশন নয় ।
এর অর্থ হ'ল প্রারম্ভিক সেট এবং ফলস্বরূপ একটির মধ্যে 1 থেকে 1 (তবে একটি উপায়) সম্পর্ক নেই।

উইকিপিডিয়ায় বাইজেকশন

সম্পাদনা: সম্পূর্ণ ইনজেকটিভ হ্যাশ ফাংশন উপস্থিত থাকতে: একে একে বলা হয় পারফেক্ট হ্যাশিং


4
আউটপুট আকার ইনপুট আকারের চেয়ে ছোট হলে কোনও হ্যাশিংয়ের উপযুক্ত নেই function
পাওলো ইবারম্যান

3

হ্যাঁ, এটা! সংঘর্ষজনিতএকত্রিকরণ হবে একটি সম্ভাবনা হতে (যদিও ঝুঁকি খুবই ছোট)। যদি তা না হয় তবে আপনার কাছে একটি কার্যকর কার্যকর সংক্ষেপণ পদ্ধতি থাকবে!

সম্পাদনা : কনরাড রুডল্ফ যেমন বলেছেন: সম্ভাব্য সীমাহীন ইনপুটটির একটি সীমিত আউটপুট (32 হেক্স অক্ষর) এ রূপান্তরিত সীমার সীমাহীন সংঘর্ষের ফলাফল হবে


3

অন্য লোকেরা যেমন বলেছে, হ্যাঁ, দুটি ভিন্ন ইনপুটগুলির মধ্যে সংঘর্ষ হতে পারে। তবে আপনার ব্যবহারের ক্ষেত্রে, আমি দেখতে পাচ্ছি না যে সমস্যা হচ্ছে। আমি অত্যন্ত সন্দেহ করি যে আপনি সংঘর্ষে চলে যাবেন - আমি আগের চাকরিতে বেশ কয়েকটি চিত্রের (জেপিজি, বিটম্যাপ, পিএনজি, কাঁচা) ফর্ম্যাটের কয়েক হাজার ইমেজ ফাইলের ফিঙ্গারপ্রিন্টের জন্য এমডি 5 ব্যবহার করেছি এবং আমার কোনও সংঘর্ষ হয়নি ।

তবে, যদি আপনি কোনও ধরণের ডেটা ফিঙ্গারপ্রিন্টের চেষ্টা করছেন, সম্ভবত আপনি দুটি হ্যাশ অ্যালগরিদম ব্যবহার করতে পারেন - দুটি ইন-ইলেক্টোর একই ফলাফলের ফলে দুটি ভিন্ন অ্যালগরিদম অসম্ভব।


4
আসলে, যদি কোনও আক্রমণকারী একটি হ্যাশ অ্যালগরিদমের সাথে সংঘর্ষ তৈরি করতে পারে, তবে তিনি এটি দ্বিতীয় অ্যালগরিদমের জন্য সংঘর্ষ পেতেও ব্যবহার করতে পারেন। এটি সম্প্রতি ক্রিপ্টো.স্ট্যাকেক্সেঞ্জারে আমার প্রশ্নে আলোচনা হয়েছিল ।
পাওলো ইবারম্যান

2

আমি বুঝতে পেরেছি এটি পুরানো, তবে ভেবেছি আমার সমাধানে অবদান রাখব। সম্ভাব্য দুটি হ্যাশ সমন্বয় রয়েছে ^ এবং এইভাবে একটি জন্মদিনের প্যারাডক্সের 2 ^ 64 সম্ভাবনা। যদিও নীচের সমাধানটি সংঘর্ষের সম্ভাবনা দূর করবে না, এটি অবশ্যই খুব পরিমাণে ঝুঁকি হ্রাস করবে।

2^64 = 18,446,744,073,709,500,000 possible combinations

আমি যা করেছি তা হ'ল ইনপুট স্ট্রিংয়ের ভিত্তিতে কয়েকটি হ্যাশ একসাথে রেখেছি যাতে আপনি নিজের হ্যাশটিকে বিবেচনা করেন ...

সুতরাং এর জন্য আমার সিউডো কোডটি হ'ল:

Result = Hash(string) & Hash(Reverse(string)) & Hash(Length(string))

এটি একটি সংঘর্ষের ব্যবহারিক অসম্ভবতা। তবে আপনি যদি অতি অদ্ভুত হতে চান এবং এটিটি না ঘটতে পারেন, এবং সঞ্চয় স্থানটি কোনও সমস্যা নয় (না হয় চক্রের গণনাও) ...

Result = Hash(string) & Hash(Reverse(string)) & Hash(Length(string)) 
         & Hash(Reverse(SpellOutLengthWithWords(Length(string)))) 
         & Hash(Rotate13(string)) Hash(Hash(string)) & Hash(Reverse(Hash(string)))

ঠিক আছে, সবচেয়ে পরিষ্কার সমাধান নয়, তবে এটি আপনাকে এখন আরও অনেক খেলায় পেয়েছে যে আপনি কখনই সংঘর্ষের মধ্যে পড়বেন। আমি এই শব্দটির সমস্ত বাস্তব ইন্দ্রিয়গুলিতে অসম্পূর্ণতা ধরে নিতে পারি।

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

এখন সম্ভাব্য সংমিশ্রণগুলি উল্লেখযোগ্যভাবে উঠে গেছে। এটি আপনাকে পেতে পারে এমন কতগুলি সংমিশ্রণে আপনি দীর্ঘ সময় ব্যয় করতে পেরেছিলেন, তাত্ত্বিকভাবে আমি এটি বলব যে এটি আপনাকে উপরের উদ্ধৃত সংখ্যার চেয়ে স্বাক্ষর করে তুলবে

2^64 (or 18,446,744,073,709,551,616) 

আরও একশত অঙ্ক বা সম্ভবত এর দ্বারা এটি আপনাকে দিতে পারে তাত্ত্বিক সর্বোচ্চ

ফলাফলযুক্ত স্ট্রিংয়ের সম্ভাব্য সংখ্যা:

528294531135665246352339784916516606518847326036121522127960709026673902556724859474417255887657187894674394993257128678882347559502685537250538978462939576908386683999005084168731517676426441053024232908211188404148028292751561738838396898767036476489538580897737998336


1

আমি মনে করি আমাদের প্রয়োজনীয়তা অনুসারে হ্যাশিং অ্যালগরিদম নির্বাচন করার বিষয়ে আমাদের যত্নবান হওয়া দরকার কারণ হ্যাশের সংঘর্ষগুলি আমার প্রত্যাশার মতো বিরল নয়। আমি সম্প্রতি আমার প্রকল্পে হ্যাশের সংঘর্ষের একটি খুব সাধারণ ঘটনা পেয়েছি। আমি হ্যাশিংয়ের জন্য xxhash এর পাইথন র‍্যাপার ব্যবহার করছি। লিঙ্ক: https://github.com/ewencp/pyhashxx

s1 = 'mdsAnalysisResult105588'
s2 = 'mdsAlertCompleteResult360224'
pyhashxx.hashxx(s1) # Out: 2535747266
pyhashxx.hashxx(s2) # Out: 2535747266

এটি সিস্টেমে একটি খুব জটিল ক্যাচিং সমস্যা সৃষ্টি করেছিল, তারপরে আমি শেষ পর্যন্ত দেখতে পেলাম যে এটির একটি হ্যাশ সংঘর্ষ।

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