সাধারণভাবে ব্যবহৃত পাসওয়ার্ড হ্যাশিং অ্যালগরিদম আজকের মতো এইভাবে কাজ করে: পাসওয়ার্ডটি লবণ দিন এবং কেডিএফ এ খাওয়ান। উদাহরণস্বরূপ, PBKDF2-HMAC-SHA1 ব্যবহার করে পাসওয়ার্ড হ্যাশিং প্রক্রিয়াটি হয় DK = PBKDF2(HMAC, Password, Salt, ...)
। যেহেতু এইচএমএসি হ'ল প্যাডেড কীগুলি সহ একটি 2-রাউন্ড হ্যাশিং, এবং এসএএএ 1 ক্রমবিন্যাস, শিফট, আবর্তন এবং বিটওয়াইজ অপারেশনগুলির একটি সিরিজ, মূলত, পুরো প্রক্রিয়াটি একটি নির্দিষ্ট উপায়ে সংগঠিত কিছু প্রাথমিক ক্রিয়াকলাপ। এটি সুস্পষ্ট নয়, মৌলিকভাবে তারা গণনা করা কতটা কঠিন difficult সম্ভবত এই কারণেই ওয়ান-ওয়ে ফাংশনগুলি এখনও একটি বিশ্বাস এবং আমরা দেখেছি historতিহাসিকভাবে গুরুত্বপূর্ণ কিছু ক্রিপ্টোগ্রাফিক হ্যাশ ফাংশনগুলি অনিরাপদ এবং অবহিত হয়ে পড়েছে।
আমি ভাবছিলাম যে এনপি-র সম্পূর্ণ সমস্যাগুলি হ্যাশ পাসওয়ার্ডগুলিতে একেবারে নতুন উপায়ে ব্যবহার করা সম্ভব, এটি আরও শক্তিশালী তাত্ত্বিক ভিত্তি দেওয়ার আশায়। মূল ধারণাটি হ'ল ধরুন, পি! = এনপি (যদি পি == এনপি হয় তবে কোনও ওডাব্লুএফ তাই বর্তমান স্কিমগুলিও ভেঙে যায় না), এনপিসি সমস্যা হওয়ার অর্থ উত্তরটি যাচাই করা সহজ তবে গণনা করা শক্ত। এই সম্পত্তিটি পাসওয়ার্ড হ্যাশিংয়ের প্রয়োজনীয়তার সাথে ভাল ফিট করে। যদি আমরা পাসওয়ার্ডটিকে কোনও এনপিসি সমস্যার উত্তর হিসাবে দেখি তবে আমরা এনপিসি সমস্যাটিকে হিসাবে হিসাবে সংরক্ষণ করতে পারি অফলাইনে আক্রমণের মোকাবেলায় পাসওয়ার্ডের হ্যাশ : পাসওয়ার্ড যাচাই করা সহজ তবে ক্র্যাক করা শক্ত।
ক্যাভ্যাটটি হ'ল, একই পাসওয়ার্ডটি এনপিসি সমস্যার একাধিক উদাহরণে ম্যাপ করা যেতে পারে, সম্ভবত তাদের সবগুলিই সমাধান করা শক্ত নয়। এই গবেষণার প্রথম পদক্ষেপ হিসাবে, আমি 3-স্যাট সমস্যার উত্তর হিসাবে বাইনারি স্ট্রিংটি ব্যাখ্যা করার চেষ্টা করছিলাম এবং 3-স্যাট সমস্যার একটি দৃষ্টান্ত তৈরি করার চেষ্টা করছিলাম যাতে বাইনারি স্ট্রিংটি একটি সমাধান is এর সহজতম আকারে, বাইনারি স্ট্রিংটিতে 3 টি বিট রয়েছে: x_0, x_1, x_2। তারপরে 2 ^ 3 == 8 টি ধারা রয়েছে:
000 ( (x_0) v (x_1) v (x_2) )
--------------------------------------
001 ( (x_0) v (x_1) v NOT(x_2) )
010 ( (x_0) v NOT(x_1) v (x_2) )
011 ( (x_0) v NOT(x_1) v NOT(x_2) )
100 ( NOT(x_0) v (x_1) v (x_2) )
101 ( NOT(x_0) v (x_1) v NOT(x_2) )
110 ( NOT(x_0) v NOT(x_1) v (x_2) )
111 ( NOT(x_0) v NOT(x_1) v NOT(x_2) )
ধরুন বাইনারি স্ট্রিংটি 000. তারপরে 8 টির মধ্যে কেবল 1 টি ধারাটি মিথ্যা (প্রথমটি)। যদি আমরা প্রথম ধারাটি এবং বাকি 7 টি ধারা বাদ দিই, তবে 000 এটি ফলাফলের সূত্রের সমাধান। সুতরাং আমরা যদি সূত্রটি সঞ্চয় করি তবে আমরা 000 টি যাচাই করতে পারি।
সমস্যাটি হ'ল একটি 3-বিট স্ট্রিংয়ের জন্য, যদি আপনি সেখানে 7 টি পৃথক ধারা দেখেন, তবে আপনি তাত্ক্ষণিকভাবে বুঝতে পারবেন কোনটি অনুপস্থিত এবং এটি বিটগুলি প্রকাশ করবে।
সুতরাং পরে আমি তাদের মধ্যে 3 টি ফেলে দেওয়ার সিদ্ধান্ত নিয়েছি, কেবলমাত্র 4 টি 001, 010, 100 এবং 111 দ্বারা চিহ্নিত রেখেছি This এটি কখনও কখনও সংঘর্ষের পরিচয় দেয় তবে সমস্যার সমাধান কম তুচ্ছ করে তোলে। সংঘর্ষগুলি সর্বদা ঘটে না, তবে যখন ইনপুটটিতে আরও বিট থাকে তখন তারা অবশ্যই অদৃশ্য হয়ে যায়।
সম্পাদনা করুন। সাধারণ ক্ষেত্রে যেখানে বাইনারি স্ট্রিং (000, 001, ..., 111) এর যে কোনও একটি হতে পারে, এখনও 8 টি ধারা রয়েছে যেখানে 7 টি সত্য এবং 1 টি মিথ্যা। 4 টি ধারাটি চয়ন করুন যা সত্যের মান দেয় (001, 010, 100, 111) এটি নীচে প্রোটোটাইপ বাস্তবায়নে প্রতিফলিত হয়।
সম্পাদনা করুন। নীচে @ ডিডাব্লু দ্বারা দেখানো উত্তর হিসাবে, ক্লজগুলি বেছে নেওয়ার এই পদ্ধতির ফলে নির্দিষ্ট পরিমাণের ভেরিয়েবলগুলির সেটগুলিতে অনেকগুলি ক্লজ তৈরি হতে পারে যা তাদের মানগুলি দ্রুত সংকুচিত করা সম্ভব করে। মোট 7 * সি (এন, 3) ধারাগুলির মধ্যে ধারাগুলি বেছে নেওয়ার বিকল্প পদ্ধতি রয়েছে। উদাহরণস্বরূপ: প্রদত্ত ভেরিয়েবলগুলির সেট থেকে বিভিন্ন সংখ্যক ধারা বেছে নিন এবং এটি কেবল সংলগ্ন ভেরিয়েবলগুলির জন্য করুন ((x_0, x_1, x_2), (x_1, x_2, x_3), (x_2, x_3, x_4), .. ।) এবং এইভাবে একটি চক্রের পরিবর্তে একটি চক্র গঠন করে। এই পদ্ধতিটি সম্ভবত কার্যকরভাবে কাজ করছে না কারণ অন্তর্নিহিতভাবে আপনি অনুচ্ছেদ ব্যবহার করে অ্যাসাইনমেন্ট ব্যবহার করে সমস্ত দফা সন্তুষ্ট করতে পারবেন কিনা তা পরীক্ষা করতে পারেন। সুতরাং সামগ্রিক কাঠামো ব্যাখ্যা করে এটি সহজ করার জন্য আসুন বর্তমান পদ্ধতিটি সহজভাবে ব্যবহার করা যাক।
একটি এন-বিট স্ট্রিংয়ের জন্য ধারাগুলির সংখ্যা 4 * সি (এন, 3) = 4 * এন * (এন - 1) * (এন - 2) / 6 = ও (এন ^ 3), যার অর্থ আকার কাটা পাসওয়ার্ডের আকারের বহুপদী yn
পাইথনে এখানে একটি প্রোটোটাইপ বাস্তবায়ন রয়েছে । এটি ব্যবহারকারীর ইনপুট বাইনারি স্ট্রিং থেকে 3-SAT সমস্যার উদাহরণ উত্পন্ন করে।
দীর্ঘ এই পরিচয়ের পরে, অবশেষে আমার প্রশ্নগুলি:
উপরের নির্মাণগুলি (যেমন প্রোটোটাইপে প্রয়োগ করা হয়েছে) সুরক্ষিত পাসওয়ার্ড হ্যাশিং হিসাবে কাজ করে বা কমপক্ষে আশাব্যঞ্জক দেখায়, সংশোধন করা যায় ইত্যাদি ইত্যাদি? তা না হলে কোথায় ব্যর্থ হয়?
যেহেতু আমাদের কাছে 7 * সি (এন, 3) ধারা বেছে নিতে পারে, তাই পাসওয়ার্ড হ্যাশ হিসাবে ব্যবহারের জন্য উপযুক্ত নিরাপদ 3-স্যাট উদাহরণ তৈরির জন্য অন্য উপায় খুঁজে পাওয়া সম্ভব, সম্ভবত এলোমেলোকরণের সাহায্যে?
প্রমাণিত সুরক্ষিত পাসওয়ার্ড হ্যাশিং স্কিমগুলি ডিজাইনের জন্য এনপি পূর্ণতা লাভের চেষ্টা করছে এবং ইতিমধ্যে কিছু ফলাফল পেয়েছে (ইতিবাচক বা নেতিবাচক)? কিছু ভূমিকা এবং লিঙ্ক খুব স্বাগত জানানো হবে।
সম্পাদনা করুন। আমি নীচের উত্তরটি @ ডিডাব্লু দ্বারা গ্রহণ করব, যিনি প্রথম উত্তর দিয়েছিলেন এবং সমস্যা কাঠামোর পাশাপাশি দরকারী সংস্থান সম্পর্কে দুর্দান্ত অন্তর্দৃষ্টি দিয়েছিলেন। এখানে চালু করা নিষ্কলুষ দফা নির্বাচন প্রকল্পটি (পাইথন প্রোটোটাইপ হিসাবে প্রয়োগ করা হয়েছে) কাজ করছে বলে মনে হয় না কারণ ছোট গ্রুপগুলিতে ভেরিয়েবল অ্যাসাইনমেন্টগুলি দ্রুত সংকুচিত করা সম্ভব। তবে সমস্যাটি এখনও রয়ে গেছে কারণ আমি এমন কোনও এনপিসি-থেকে-পাসওয়ার্ডহ্যাশিং হ্রাস কোনও কাজ করবে না এমন কোনও আনুষ্ঠানিক প্রমাণ দেখিনি। এমনকি এই নির্দিষ্ট 3-স্যাট হ্রাস সমস্যার জন্য, এমন দফা বাছাই করার বিভিন্ন উপায় থাকতে পারে যা আমি এখানে গণনা করতে চাই না। সুতরাং কোনও আপডেট এবং আলোচনা এখনও খুব স্বাগত।