আরগন 2 2015 এর পাসওয়ার্ড হ্যাশিং প্রতিযোগিতা জিতেছে। স্ক্রিপ্ট , বিক্রিপ্ট এবং পিবিকেডিএফ 2 পুরানো অ্যালগরিদম যা এখন কম পছন্দ করা হিসাবে বিবেচিত হয়, তবে এখনও মৌলিকভাবে সুরক্ষিত, সুতরাং যদি আপনার প্ল্যাটফর্মটি আরগন 2 এখনও সমর্থন করে না, তবে আপাতত অন্য একটি অ্যালগরিদম ব্যবহার করা ঠিক আছে।
সরাসরি কোনও ডাটাবেসে কোনও পাসওয়ার্ড সংরক্ষণ করবেন না। এটি এনক্রিপ্ট করবেন না: অন্যথায়, যদি আপনার সাইটটি লঙ্ঘন হয় তবে আক্রমণকারী ডিক্রিপশন কী পান এবং তাই সমস্ত পাসওয়ার্ডগুলি পেতে পারে। পাসওয়ার্ডগুলি হ্যাশ করা আবশ্যক ।
একটি পাসওয়ার্ড হ্যাশের একটি হ্যাশ টেবিল হ্যাশ বা ক্রিপ্টোগ্রাফিক হ্যাশ থেকে পৃথক বৈশিষ্ট্য রয়েছে। পাসওয়ার্ডে কখনই কোনও সাধারণ ক্রিপ্টোগ্রাফিক হ্যাশ যেমন MD5, SHA-256 বা SHA-512 ব্যবহার করবেন না। একটি পাসওয়ার্ড হ্যাশিং অ্যালগরিদম একটি লবণ ব্যবহার করে , যা অনন্য (অন্য কোনও ব্যবহারকারীর জন্য বা অন্য কারও ডেটাবেজে ব্যবহৃত হয় না)। লবণের প্রয়োজনীয়তা যাতে আক্রমণকারীরা কেবলমাত্র সাধারণ পাসওয়ার্ডের হ্যাশগুলির প্রাক-গণনা করতে না পারে: একটি লবণ দিয়ে, তাদের প্রতিটি অ্যাকাউন্টের জন্য গণনা পুনরায় চালু করতে হবে। একটি পাসওয়ার্ড হ্যাশিং অ্যালগরিদম অভ্যন্তরীণভাবে ধীর - আপনার সামর্থ্য হিসাবে যত ধীর। আঠালোতা আপনার চেয়ে আক্রমণকারীকে অনেক বেশি কষ্ট দেয় কারণ আক্রমণকারীকে অনেকগুলি বিভিন্ন পাসওয়ার্ড চেষ্টা করতে হয়। আরও তথ্যের জন্য, কীভাবে সুরক্ষিতভাবে পাসওয়ার্ডগুলি হ্যাশ করবেন তা দেখুন ।
একটি পাসওয়ার্ড হ্যাশ চারটি তথ্যকে এনকোড করে:
- একটি সূচক যা আলগোরিদিম ব্যবহৃত হয়। চঞ্চলতার জন্য এটি প্রয়োজনীয় : ক্রিপ্টোগ্রাফিক সুপারিশগুলি সময়ের সাথে সাথে পরিবর্তিত হয়। আপনাকে একটি নতুন অ্যালগরিদমে স্থানান্তর করতে সক্ষম হতে হবে।
- একটি অসুবিধা বা কঠোরতার সূচক। এই মানটি যত বেশি, হ্যাশ গণনা করার জন্য আরও বেশি গণনার প্রয়োজন। এটি পাসওয়ার্ড পরিবর্তন ফাংশনে একটি ধ্রুবক বা বৈশ্বিক কনফিগারেশন মান হওয়া উচিত, তবে কম্পিউটারগুলি দ্রুত বাড়ার সাথে সাথে এটি সময়ের সাথে সাথে বৃদ্ধি করা উচিত, সুতরাং আপনাকে প্রতিটি অ্যাকাউন্টের মান মনে রাখা দরকার। কিছু অ্যালগরিদমের একক সংখ্যাসূচক মান থাকে, আবার অন্যদের আরও প্যারামিটার থাকে (উদাহরণস্বরূপ, সিপিইউ ব্যবহার এবং র্যামের ব্যবহার আলাদাভাবে টিউন করা)।
- নুন। যেহেতু লবণ অবশ্যই বিশ্বব্যাপী অনন্য হতে হবে, তাই প্রতিটি অ্যাকাউন্টের জন্য এটি সংরক্ষণ করতে হবে। প্রতিটি পাসওয়ার্ড পরিবর্তনে এলোমেলোভাবে লবণ তৈরি করা উচিত।
- হ্যাশ যথাযথ, অর্থাৎ হ্যাশিং অ্যালগরিদমে গাণিতিক গণনার আউটপুট।
অনেক লাইব্রেরিতে একটি যুগল ফাংশন অন্তর্ভুক্ত থাকে যা এই তথ্যকে একক স্ট্রিং হিসাবে স্বাচ্ছন্দ্যে প্যাকেজ করে: এমন একটি যা অ্যালগরিদম সূচক, কঠোরতা সূচক এবং পাসওয়ার্ড নেয়, একটি এলোমেলো লবণ উত্পন্ন করে পুরো হ্যাশ স্ট্রিং দেয়; এবং ইনপুট হিসাবে একটি পাসওয়ার্ড এবং পুরো হ্যাশ স্ট্রিং নেয় এবং পাসওয়ার্ডটি সঠিক ছিল কিনা তা নির্দেশ করে একটি বুলিয়ান দেয় one কোনও সার্বজনীন মান নেই, তবে একটি সাধারণ এনকোডিং
$ অ্যালগরিদম $ পরামিতি $ লবণ $ আউটপুট
যেখানে algorithm
একটি সংখ্যা বা একটি সংক্ষিপ্ত আলফানিউমেরিক স্ট্রিং অ্যালগোরিদম পছন্দমত এনকোডিং, হয় parameters
একটি মুদ্রণযোগ্য স্ট্রিং, এবং salt
এবং output
সসীম ছাড়া করুন Base64- এনকোড করা হয় =
।
16 লাইট এবং আউটপুট জন্য 16 বাইট যথেষ্ট। (উদাহরণস্বরূপ আর্গন 2 এর জন্য সুপারিশগুলি দেখুন )) বেস 64 এ এনকোড করা হয়েছে, এটি প্রতিটি 21 টি অক্ষর। অন্যান্য দুটি অংশ অ্যালগরিদম এবং পরামিতিগুলির উপর নির্ভর করে তবে 20-40 অক্ষরগুলি সাধারণত বৈশিষ্ট্যযুক্ত। এটি মোট প্রায় ৮২ টি এএসসিআইআই অক্ষর ( CHAR(82)
এবং ইউনিকোডের প্রয়োজন নেই), আপনার যদি ক্ষেত্রটি পরে বড় করা কঠিন হয়ে যায় বলে মনে করেন তবে আপনাকে একটি সুরক্ষা মার্জিন যুক্ত করা উচিত।
আপনি যদি বাইনারি ফর্ম্যাটে হ্যাশটিকে এনকোড করেন তবে আপনি এটিকে অ্যালগরিদমের জন্য 1 বাইটে, কঠোরতার জন্য 1–4 বাইট (যদি কিছু পরামিতিগুলির হার্ড-কোড করেন), এবং লবণের জন্য আউটপুট এবং 16 টি বাইট পেতে পারেন , মোট 37 বাইটের জন্য। কমপক্ষে কয়েক জোড়া অতিরিক্ত বাইট পেতে 40 বাইট ( BINARY(40)
) বলুন । মনে রাখবেন যে এটি 8-বিট বাইট, মুদ্রণযোগ্য অক্ষর নয়, বিশেষত ক্ষেত্রটিতে নাল বাইট অন্তর্ভুক্ত থাকতে পারে।
নোট করুন যে হ্যাশটির দৈর্ঘ্য পুরোপুরি পাসওয়ার্ডের দৈর্ঘ্যের সাথে সম্পর্কিত নয়।