এনপি সম্পূর্ণ সমস্যা ব্যবহার করে পাসওয়ার্ড হ্যাশিং


16

সাধারণভাবে ব্যবহৃত পাসওয়ার্ড হ্যাশিং অ্যালগরিদম আজকের মতো এইভাবে কাজ করে: পাসওয়ার্ডটি লবণ দিন এবং কেডিএফ এ খাওয়ান। উদাহরণস্বরূপ, 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 সমস্যার উদাহরণ উত্পন্ন করে।


দীর্ঘ এই পরিচয়ের পরে, অবশেষে আমার প্রশ্নগুলি:

  1. উপরের নির্মাণগুলি (যেমন প্রোটোটাইপে প্রয়োগ করা হয়েছে) সুরক্ষিত পাসওয়ার্ড হ্যাশিং হিসাবে কাজ করে বা কমপক্ষে আশাব্যঞ্জক দেখায়, সংশোধন করা যায় ইত্যাদি ইত্যাদি? তা না হলে কোথায় ব্যর্থ হয়?

  2. যেহেতু আমাদের কাছে 7 * সি (এন, 3) ধারা বেছে নিতে পারে, তাই পাসওয়ার্ড হ্যাশ হিসাবে ব্যবহারের জন্য উপযুক্ত নিরাপদ 3-স্যাট উদাহরণ তৈরির জন্য অন্য উপায় খুঁজে পাওয়া সম্ভব, সম্ভবত এলোমেলোকরণের সাহায্যে?

  3. প্রমাণিত সুরক্ষিত পাসওয়ার্ড হ্যাশিং স্কিমগুলি ডিজাইনের জন্য এনপি পূর্ণতা লাভের চেষ্টা করছে এবং ইতিমধ্যে কিছু ফলাফল পেয়েছে (ইতিবাচক বা নেতিবাচক)? কিছু ভূমিকা এবং লিঙ্ক খুব স্বাগত জানানো হবে।


সম্পাদনা করুন। আমি নীচের উত্তরটি @ ডিডাব্লু দ্বারা গ্রহণ করব, যিনি প্রথম উত্তর দিয়েছিলেন এবং সমস্যা কাঠামোর পাশাপাশি দরকারী সংস্থান সম্পর্কে দুর্দান্ত অন্তর্দৃষ্টি দিয়েছিলেন। এখানে চালু করা নিষ্কলুষ দফা নির্বাচন প্রকল্পটি (পাইথন প্রোটোটাইপ হিসাবে প্রয়োগ করা হয়েছে) কাজ করছে বলে মনে হয় না কারণ ছোট গ্রুপগুলিতে ভেরিয়েবল অ্যাসাইনমেন্টগুলি দ্রুত সংকুচিত করা সম্ভব। তবে সমস্যাটি এখনও রয়ে গেছে কারণ আমি এমন কোনও এনপিসি-থেকে-পাসওয়ার্ডহ্যাশিং হ্রাস কোনও কাজ করবে না এমন কোনও আনুষ্ঠানিক প্রমাণ দেখিনি। এমনকি এই নির্দিষ্ট 3-স্যাট হ্রাস সমস্যার জন্য, এমন দফা বাছাই করার বিভিন্ন উপায় থাকতে পারে যা আমি এখানে গণনা করতে চাই না। সুতরাং কোনও আপডেট এবং আলোচনা এখনও খুব স্বাগত।


আমি আপনার দফা প্রজন্ম সমাধানকারী SAT (pycosat ব্যবহার picosat) প্লাগ এখানে । নিটস = 300 এর জন্য সবচেয়ে দীর্ঘতম ক্লজগুলি তৈরি করা হয়, পাইকোস্যাটটি উদাহরণটিকে হত্যা করে। আমি ৩০০ এর বেশি পারিনি কারণ আপনার ক্লজ জেনারেশনটি আসলে অনেক দীর্ঘ। এছাড়াও, 0 ... 0 সর্বদা আপনার প্রজন্মের একটি সমাধান solution আপনার যদি সর্বদা এ জাতীয় 'সহজ' সমাধান থাকে তবে এটি কার্যকর হবে না।
জুলফ

উত্তর:


17

দুর্ভাগ্যক্রমে, এটি কাজ করছে বলে মনে হচ্ছে না (বিশদগুলির জন্য নীচে দেখুন), এবং এই ধরণের ধারণাটি একটি কার্যকর সুরক্ষিত স্কিম প্রদানের উপায় খুঁজে পাওয়া শক্ত বলে মনে হয়।

আপনার সাধারণ ধারণা নিয়ে সমস্যা

এনপি-সম্পূর্ণ সমস্যার ভিত্তিতে ক্রিপ্টোগ্রাফির ভিত্তিতে চেষ্টা করার ভাবনাটি আপনি প্রথম নন। সমস্যাটি হ'ল এনপি-কঠোরতা কেবলমাত্র সবচেয়ে খারাপ ক্ষেত্রে দৃ ens়তা নিশ্চিত করে তবে ক্রিপ্টোগ্রাফিতে গড়-কেস কঠোরতা প্রয়োজন। এনপি-সম্পূর্ণ সমস্যার (যেমন, ন্যাপস্যাক ক্রিপ্টোসিস্টেমস) ক্রিপ্টোগ্রাফির ভিত্তিতে একাধিক প্রচেষ্টা করা হয়েছে, তবে সেগুলি ভাল ফলিত হয়নি। সাধারণত যা ঘটে তা হ'ল লোকেরা সাধারণত অ্যালগরিদমগুলি আবিষ্কার করেন যা প্রায়শই গড় কার্যকর (বা অ-তুচ্ছ সম্ভাবনা সহ) কার্যকর হয়, যদিও সবচেয়ে খারাপ ক্ষেত্রে তারা ক্ষতিকারক হয়; এটি ক্রিপ্টোটি ভাঙ্গতে যথেষ্ট, যদিও এটি এনপি-কঠোরতার বিরোধিতা করে না।

আমি বিষয়টি সম্পর্কে আরও পড়ার পরামর্শ দিচ্ছি। আপনি কিছু দরকারী শুরু পয়েন্ট জানতে পারেন ক্রিপ্টোগ্রাফি মধ্যে np-হার্ড সমস্যার তাত্পর্য , গড়-কেস জটিলতা খোলা একমুখী ফাংশন ছাড়া অন্য সমস্যার , Impagliazzo এর ওয়ার্ডস স্থিতি? , গড় ক্ষেত্রে হ্রাস সবচেয়ে খারাপ ক্ষেত্রে

আপনার বিশেষ প্রকল্পে সমস্যা

আপনার নির্দিষ্ট প্রস্তাব সম্পূর্ণরূপে নির্দিষ্ট করা হয়নি। কোনও স্কিম বিশ্লেষণ করতে আপনার কীভাবে এই স্কিমটি কাজ করে তা সম্পূর্ণরূপে উল্লেখ করতে হবে। আপনার ক্ষেত্রে এটি সাধারণভাবে উদাহরণস্বরূপ 7 টি ধারাগুলির মধ্যে 4 টি কীভাবে নির্বাচন করবেন তা পরিষ্কার নয়। (এবং একটি উদাহরণ উদাহরণ কোনও নির্দিষ্টকরণের বিকল্প নয় যা আপনি সাধারণভাবে কীভাবে করেন তা বর্ণনা করে))

এটি বলেছিল, আপনি কীভাবে এই বিবরণগুলি তাত্ক্ষণিক বিবেচনা করুন না কেন আপনার স্কিমটি ভঙ্গ করা সহজ হবে বলে মনে হয়। স্বজ্ঞাতভাবে, এতগুলি ধারা সহ 3 এসএটি দৃষ্টান্তগুলি সাধারণত সহজ। আরও সুনির্দিষ্টভাবে, আমি এমন একটি আক্রমণ বর্ণনা করব যা আপনার স্কিম দ্বারা উত্পন্ন 3SAT উদাহরণগুলির ধরণের সমাধান করে। প্রথমে পুনরুদ্ধার করার চেষ্টা করিএক্স0,এক্স1,এক্স2,এক্স3,এক্স4। কেবলমাত্র সেই ধারাগুলিতে ফোকাস করুন যা কেবলমাত্র সেই পরিবর্তনশীলগুলি উল্লেখ করে (এবং অন্য কোনও নয়)। এই জাতীয় 40 টি ধারা থাকতে হবে কারণ ভেরিয়েবলগুলির 3 টির একটি উপসেট চয়ন করার জন্য 10 টি উপায় রয়েছে। সেখানে25এই 5 টি ভেরিয়েবলের সম্ভাব্য অ্যাসাইনমেন্টগুলি, সুতরাং তাদের সকলের চেষ্টা করে দেখুন এবং 40 টি ধারাগুলির কোনও একটি লঙ্ঘন করে এমন কোনও অ্যাসাইনমেন্ট বাতিল করুন। আমি পূর্বাভাস দিচ্ছি যে এটি আপনাকে কেবলমাত্র একটি অ্যাসাইনমেন্টের সাথে ছেড়ে দেবে যা সমস্ত ধারাগুলির সাথে সামঞ্জস্যপূর্ণ।

(কেন? 3 টি ভেরিয়েবলের প্রতিটি উপসেটের জন্য, 4 টি ধারাগুলি কেবল এতটাই সঙ্কুচিত করে 1/2অ্যাসাইনমেন্টগুলির 4 টি ধারাগুলির সাথে সামঞ্জস্যপূর্ণ। আমাদের কাছে এই জাতীয় 10 টি সাবসেট রয়েছে, তাই তাত্ত্বিকভাবে আমরা সম্ভাবনাটি প্রত্যাশা করি যে কোনও ভুল অ্যাসাইনমেন্টটি 10 ​​টি সাবসেটের সাথে সুসংগত হবে1/210, এবং যেহেতু কেবল আছে 25-1সম্ভাব্য ভুল অ্যাসাইনমেন্ট, সম্ভবত তাদের মধ্যে প্রায় কোনওই এই পরীক্ষাগুলিতে টিকে থাকবে না। বা, একটি ভিন্নতর হিউরিস্টিক চেষ্টা করে দেখুন: যে কোনও ভুল অ্যাসাইনমেন্ট সম্ভাব্যতার সাথে একটি একক ধারা পূরণ করবে7/8, সুতরাং তাত্পর্যপূর্ণভাবে এটি সম্ভবত 40 টি ধারাগুলিকে সন্তুষ্ট করে এমন সম্ভাবনা (7/8)402-7.7। সুতরাং, সমস্ত 40 টি ধারাগুলির সাথে সামঞ্জস্যপূর্ণ ভুল কার্যভারের প্রত্যাশিত সংখ্যা is(25-1)×2-7.70.15। সুতরাং সাধারণত সমস্ত সঠিক অ্যাসাইনমেন্ট কেবলমাত্র সঠিক অ্যাসাইনমেন্টটি রেখেই মুছে ফেলা হয়)

এটি 5 টি ভেরিয়েবলের প্রতিটি গ্রুপের জন্য পুনরাবৃত্তি করা যেতে পারে, স্বতন্ত্রভাবে প্রতিটিটির জন্য অনন্য সন্তোষজনক কার্যভারটি পুনরুদ্ধার করে। যদি কোনও অস্পষ্টতা থাকে তবে প্রার্থীর অ্যাসাইনমেন্টগুলি অন্যান্য ধারাগুলির বিরুদ্ধে পরীক্ষা করা যায়।

এইভাবে, আমরা দেখতে পাই যে একটি দক্ষ অ্যালগরিদম রয়েছে যা সাধারণত আপনার পদ্ধতি দ্বারা উত্পন্ন 3SAT দৃষ্টান্তের শ্রেণিটি সমাধান করবে। এটি সমস্ত 3 এসএটি দৃষ্টান্তগুলিকে সমাধান করবে না, তবে আপনি যে উদাহরণগুলি উত্পন্ন করেন তার একটি বিশেষ কাঠামো থাকে এবং এটি সেই বিশেষ কাঠামোর সাহায্যে উদাহরণস্বরূপ কার্যকরভাবে সমাধান করে। এটি পয়েন্টটি ভালভাবে তুলে ধরে: 3SAT এর কিছু উদাহরণ অন্যের চেয়ে সহজ এবং 3SAT এর কঠোরতা (সবচেয়ে খারাপ ক্ষেত্রে জটিলতায়) আপনি যে বিশেষ উদাহরণগুলি উত্পন্ন করেন তার কঠোরতা বা গড় 3SAT উদাহরণের কঠোরতা সম্পর্কে খুব কম বা কিছুই বলে না।


একটি রেফারেন্স বাস্তবায়ন রয়েছে যা একটি সম্পূর্ণ বৈশিষ্ট হিসাবে কাজ করে। এই প্রথম প্রয়াসে, স্কিমটি সত্যিই সহজ। আমি পাসওয়ার্ডের পরিবর্তে 001, 010, 100 এবং 111 দেবে এমন 4 টি ধারাটি কেবলই বেছে নিয়েছি। এটি প্রতিটি অনুচ্ছেদের জন্য 8 টির মধ্যে 4 টি বৈধ সংমিশ্রণ দেয়।
সাইকেল 16

আপনি সম্ভবত সঠিক বলেছেন যে এই দ্রুত যদিও অনেকগুলি শৃঙ্খলা দেয় যা সমাধানটিকে দ্রুত সঙ্কুচিত করে তোলে। তবে আমরা ও (এন ^ 3) ধারাগুলি দিয়ে শুরু করি এবং কোনটি রাখতে হবে তা চয়ন করতে আমরা মুক্ত। ট্রিপলগুলি স্বাধীন নাও হতে পারে। সুতরাং আমি ভাবছি যে অনুচ্ছেদগুলি এমন কোনও প্যাটার্ন দিয়ে বেছে নেওয়া হয়েছে যা সহজেই সমস্যাগুলির উদাহরণগুলি সরিয়ে দেওয়ার চেষ্টা করে, আপনার তাত্ত্বিক বিশ্লেষণ এখনও আছে কিনা।
সাইকেল চালক

1
তবে আরও মজার বিষয় হল মোটামুটি কথা বলতে গেলে, আমাদের কোনও গড়-কেস এনপিসি সমস্যা নেই?
সাইকেল চালক

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

2
একটি তাত্ক্ষণিক পরীক্ষাটি হ'ল একটি স্যাট সমাধানকারীতে আপনার দৃষ্টান্ত চেষ্টা করে। আমি মনে করি যে স্যাট সলভারগুলি আপনার দৃষ্টান্তগুলিতে দক্ষ হবে তবে আমি আপনার অনুমানটি বোঝার চেষ্টা করিনি। একটি 10000 ভেরিয়েবল উদাহরণ উত্পন্ন করার চেষ্টা করুন এবং একটি স্যাট সলভার চালিত করুন (উপায় দ্বারা, প্যাডিং / সল্টিং ব্যতীত পাসওয়ার্ডগুলি আরও ছোট হবে ...)
হল্ফ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.