পিএইচপি পাসওয়ার্ডগুলির জন্য হ্যাশ এবং লবণ সুরক্ষিত করুন


1174

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

এই প্রশ্নটি, "ডাবল হ্যাশিং" একটি পাসওয়ার্ড একবার হ্যাশ করার চেয়ে কম সুরক্ষিত? পরামর্শ দেয় যে একাধিকবার হ্যাশ করা ভাল ধারণা হতে পারে, তবে পৃথক ফাইলগুলির জন্য পাসওয়ার্ড সুরক্ষা কীভাবে প্রয়োগ করা যায়? নুন ব্যবহার করার পরামর্শ দেয়।

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

  1. হ্যাশিং প্রক্রিয়াটি পিএইচপি-তে অবশ্যই উপলব্ধ
  2. এটি অবশ্যই নিরাপদ হবে
  3. এটি লবণ ব্যবহার করতে পারে (এই ক্ষেত্রে, সমস্ত লবণগুলি কি সমানভাবে ভাল? ভাল লবণের উত্পাদন করার কোনও উপায় আছে কি?)

এছাড়াও, আমি কি ডাটাবেসে দুটি ক্ষেত্র সংরক্ষণ করতে পারি (উদাহরণস্বরূপ, MD5 এবং অন্য একটি SHA ব্যবহার করে)? এটি কি নিরাপদ বা নিরাপদ করে তুলবে?

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

সম্পর্কিত প্রশ্নগুলি যা আমার প্রশ্নকে পুরোপুরি অন্তর্ভুক্ত করে না:

পিএইচপি
সিম্পল পাসওয়ার্ড এনক্রিপশন এসএইচএ এবং এমডি 5 এর মধ্যে পার্থক্য কী কী
সংরক্ষণ করার নিরাপদ পদ্ধতি, এসপিএন এর পাসওয়ার্ড
আপনি কীভাবে টমক্যাট 5.5 তে নোনতা পাসওয়ার্ডগুলি প্রয়োগ করবেন?


13
ওপেনওয়াল.এইফপাসও খুব ভাল গ্রন্থাগার
আলফ্রেড

51
মোড 5 এখন পুরোপুরি অনিরাপদ
জকিউটিটোএডডম্বারস

3
আপনি এটি কী ব্যবহার করছেন তার উপর নির্ভর করে এটি রামধনু-ম্যাচ বা কেবল নিখরচায় এমডি 5 পাসওয়ার্ডগুলির পক্ষে অত্যন্ত তুচ্ছ, তবে শালীন সল্ট দিয়ে এটি পাসওয়ার্ডের সেটগুলিতে দ্রুত ক্র্যাকিংয়ের জন্য একটি রংধনু টেবিল তৈরি করা অত্যন্ত অবাস্তব, এবং প্রাণঘাতী শক্তি কোনও হ-হোপার নয়।
ক্রেগ রিঞ্জার

12
পিএইচপি 5.5+ এর একটি সুরক্ষিত পাসওয়ার্ড হ্যাশ রয়েছে যা php.net/manual/en/function.password-hash.php- এ
টেরেন্স জনসন

উত্তর:


982

অস্বীকৃতি : এই উত্তরটি ২০০৮ সালে লেখা হয়েছিল।

তার পর থেকে, পিএইচপি আমাদের password_hashএবং password_verifyএবং তাদের পরিচয় দেওয়ার পরে, তারা প্রস্তাবিত পাসওয়ার্ড হ্যাশিং এবং চেক করার পদ্ধতি।

উত্তরের তত্ত্বটি এখনও পড়া ভাল read

টি এল; ডিআর

কী করা উচিত না

  • ব্যবহারকারীরা পাসওয়ার্ডের জন্য কী অক্ষর প্রবেশ করতে পারে তা সীমাবদ্ধ করবেন না। কেবল বোকা লোকেরা এটি করে।
  • পাসওয়ার্ডের দৈর্ঘ্য সীমাবদ্ধ করবেন না। যদি আপনার ব্যবহারকারীরা এতে সুপার ক্যালিফেরাগিলিস্টিসিপিয়ালিডোসিয়াসের সাথে একটি বাক্য চান তবে তাদের এটি ব্যবহার থেকে বিরত রাখবেন না।
  • পাসওয়ার্ডে এইচটিএমএল এবং বিশেষ অক্ষরগুলি সজ্জিত বা পালাতে পারবেন না।
  • আপনার ব্যবহারকারীর পাসওয়ার্ড কখনও সরল-পাঠ্যে সংরক্ষণ করবেন না।
  • আপনার ব্যবহারকারীকে তার পাসওয়ার্ড হারিয়ে যাওয়া ব্যতীত কখনও কোনও পাসওয়ার্ড ইমেল করবেন না এবং আপনি একটি অস্থায়ী পাসওয়ার্ড প্রেরণ করেছেন।
  • কখনও না, কখনও কোনও উপায়ে পাসওয়ার্ড লগ ইন করুন।
  • SHA1 বা MD5 বা এমনকি SHA256 এর সাথে কখনও পাসওয়ার্ড হ্যাশ করবেন না ! আধুনিক ক্র্যাকারগুলি 60 এবং 180 বিলিয়ন হ্যাশ / সেকেন্ড (যথাক্রমে) ছাড়িয়ে যেতে পারে।
  • বিসিআরপিট এবং হ্যাশ () এর কাঁচা আউটপুট সাথে মিশ্রিত করবেন না , হয় হেক্স আউটপুট ব্যবহার করুন বা বেস 64-এনকোড ব্যবহার করুন। (এটি এমন কোনও ইনপুটটির ক্ষেত্রে প্রযোজ্য যাতে এতে কোনও দুর্বৃত্ত থাকতে পারে \0, যা সুরক্ষা গুরুতরভাবে দুর্বল করতে পারে))

করণীয়

  • আপনি যখন পারেন তখন স্ক্রিপ্ট ব্যবহার করুন; আপনি যদি না পারেন তবে bcrypt করুন।
  • আপনি SHA2 হ্যাশ সহ বিসিপি বা স্ক্রিপ্ট ব্যবহার করতে না পারলে PBKDF2 ব্যবহার করুন।
  • ডাটাবেস আপোস করার সময় প্রত্যেকের পাসওয়ার্ড পুনরায় সেট করুন।
  • একটি যুক্তিসঙ্গত 8-10 অক্ষর ন্যূনতম দৈর্ঘ্য প্রয়োগ করুন, কমপক্ষে কমপক্ষে 1 টি বড় অক্ষর, 1 ছোট ছোট অক্ষর, একটি সংখ্যা এবং একটি চিহ্ন প্রয়োজন require এটি পাসওয়ার্ডের এনট্রপিকে উন্নত করবে, ফলস্বরূপ ক্র্যাক করা আরও কঠিন করে তুলবে। (কিছু বিতর্কের জন্য "কী ভাল পাসওয়ার্ড দেয়?" বিভাগটি দেখুন))

কেন হ্যাশ পাসওয়ার্ড?

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

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

হোয়াইটহ্যাট সিকিউরিটির সিটিও জেরেমিয় গ্রসম্যান, সাম্প্রতিক পাসওয়ার্ড পুনরুদ্ধারের পরে হোয়াইট হ্যাট সিকিউরিটি ব্লগে বলেছেন যে তার পাসওয়ার্ড সুরক্ষাটি ব্রুট-ফোর্সের প্রয়োজন:

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

(জোর আমার।)

কী এক করে তোলে ভাল পাসওয়ার্ড যাহাই হউক না কেন?

এনট্রপি । (এমন নয় যে আমি র্যান্ডালের দৃষ্টিভঙ্গিতে সম্পূর্ণ সাবস্ক্রাইব করেছি))

সংক্ষেপে, এনট্রপি হ'ল পাসওয়ার্ডের মধ্যে কত পার্থক্য রয়েছে। যখন কোনও পাসওয়ার্ড কেবল রোমান অক্ষরগুলির ছোট হয়, কেবলমাত্র 26 টি অক্ষর। এটি খুব ভিন্নতা নয়। আলফা-সংখ্যাগত পাসওয়ার্ডগুলি 36 টি অক্ষরের সাথে আরও ভাল better তবে প্রতীক সহ, উচ্চ এবং নিম্নতর ক্ষেত্রে অনুমতি দেওয়া মোটামুটি 96 টি অক্ষর। এটি কেবলমাত্র চিঠির চেয়ে অনেক ভাল। একটি সমস্যা হ'ল, আমাদের পাসওয়ার্ডগুলিকে স্মরণীয় করে রাখতে আমরা নিদর্শনগুলি সন্নিবেশ করি। যা এনট্রপি হ্রাস করে। ওহো!

পাসওয়ার্ড এনট্রপি হয় আনুমানিক সহজে। এসকিআই অক্ষরের পুরো পরিসর (প্রায় 96 টি টাইপযোগ্য অক্ষর) ব্যবহার করে অক্ষর প্রতি 6.6 এর একটি এনট্রপি পাওয়া যায়, যা ভবিষ্যতের সুরক্ষার জন্য 8 পাসওয়ার্ডের পাসওয়ার্ডের জন্য এখনও খুব কম (52.679 বিট) রয়েছে। তবে সুসংবাদটি হ'ল: দীর্ঘতর পাসওয়ার্ড এবং ইউনিকোড অক্ষরযুক্ত পাসওয়ার্ডগুলি সত্যই একটি পাসওয়ার্ডের এনট্রপি বাড়িয়ে তোলে এবং ক্র্যাক করা আরও শক্ত করে তোলে।

ক্রিপ্টো স্ট্যাকএক্সচেঞ্জ সাইটে পাসওয়ার্ড এনট্রপি সম্পর্কিত দীর্ঘ আলোচনা রয়েছে । একটি ভাল গুগল অনুসন্ধানও প্রচুর ফলাফল ঘটাতে পারে।

মন্তব্যগুলিতে আমি @ পপনুডলসের সাথে কথা বলেছি, যিনি উল্লেখ করেছিলেন যে এক্স দৈর্ঘ্যের একটি অক্ষর, সংখ্যা, চিহ্ন ইত্যাদি দিয়ে এক্স দৈর্ঘ্যের একটি পাসওয়ার্ড নীতি প্রয়োগ করা পাসওয়ার্ড স্কিমটিকে আরও অনুমানযোগ্য করে প্রকৃতপক্ষে এনট্রপি হ্রাস করতে পারে। আমি একমত. যথাসম্ভব এলোমেলো র্যান্ডোমাস, সর্বদা নিরাপদ তবে কমপক্ষে স্মরণীয় সমাধান।

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

সেরা অনুশীলন

Bcrypt এবং scrypt বর্তমান সেরা অনুশীলন। স্ক্রিপ্ট সময়ক্রমে বিক্রিপ্টের চেয়ে ভাল হবে তবে এটি লিনাক্স / ইউনিক্স বা ওয়েবসার্ভার দ্বারা কোনও স্ট্যান্ডার্ড হিসাবে গ্রহণ করতে দেখেনি এবং এখনও পোস্ট করা অ্যালগরিদমের গভীরতর পর্যালোচনা নেই। তবে এখনও, অ্যালগরিদমের ভবিষ্যতটি আশাব্যঞ্জক বলে মনে হচ্ছে না। আপনি যদি রুবির সাথে কাজ করছেন তবে এমন একটি স্ক্রিপ্ট রত্ন রয়েছে যা আপনাকে সাহায্য করবে এবং নোড.জেসের এখন নিজস্ব স্ক্রিপ্ট প্যাকেজ রয়েছে। আপনি মাধ্যমে পারেন পিএইচপি Scrypt ব্যবহার করতে পারেন Scrypt এক্সটেনশন বা Libsodium এক্সটেনশন (উভয় PECL পাওয়া যায়)।

আমি অত্যন্ত ডকুমেন্টেশন পড়া সুপারিশ সমাধিগৃহ ফাংশন যদি আপনি বুঝতে bcrypt কীভাবে ব্যবহার করবেন তা চান বা আপনার নিজের একটি খোঁজার ভাল মোড়কের মত বা ব্যবহারের কিছু PHPASS আরো একটি উত্তরাধিকার বাস্তবায়নের। আমি কমপক্ষে 12 টি বৃত্তাকার ব্র্যাক্রিপ্টের প্রস্তাব দিই, যদি 15 থেকে 18 না হয়।

আমি যখন bcrypt জানতে পারলাম তখন bcrypt ব্যবহারের বিষয়ে আমার মতামত পরিবর্তন হয়েছিল যখন একটি পরিবর্তনশীল ব্যয় ব্যবস্থাপনার সাহায্যে bcrypt কেবল ব্লোফিশের মূল সময়সূচী ব্যবহার করে। পরেরটি আপনাকে ব্লো ফিশের ইতিমধ্যে ব্যয়বহুল মূল তফসিল বাড়িয়ে একটি পাসওয়ার্ডকে জোর করে চাপিয়ে দিতে খরচ বাড়াতে দেয়।

গড় অনুশীলন

আমি এই পরিস্থিতিটি প্রায় কল্পনাও করতে পারি না। পিএইচপিএসএস পিএইচপি 3.0.08 কে 5.3 এর মাধ্যমে সমর্থন করে, তাই এটি প্রায় প্রতিটি ইনস্টলেশন কল্পনাপ্রসূত on এবং এটি ব্যবহার করা উচিত যদি আপনি নিশ্চিতভাবে জানেন না যে আপনার পরিবেশ বিসিক্রিপ সমর্থন করে।

তবে ধরা যাক আপনি মোটেও bcrypt বা PHPASS ব্যবহার করতে পারবেন না। তখন কি?

আপনার পরিবেশ / অ্যাপ্লিকেশন / ব্যবহারকারী-ধারণা সহ্য করতে পারে এমন সর্বোচ্চ সংখ্যক রাউন্ডের সাথে PDKBF2 বাস্তবায়নের চেষ্টা করুন । আমি প্রস্তাবিত সর্বনিম্ন সংখ্যাটি 2500 রাউন্ড। এছাড়াও, যদি অপারেশনটিকে পুনরুত্পাদন করতে আরও শক্ত করে তুলতে পাওয়া যায় তবে hash_hmac () ব্যবহার নিশ্চিত করুন ।

ভবিষ্যতের অনুশীলনসমূহ

পিএইচপি 5.5 এ আসা একটি সম্পূর্ণ পাসওয়ার্ড সুরক্ষা লাইব্রেরি যা বিক্রিপ্টের সাথে কাজ করার কোনও ব্যথা দূরে রাখে। আমাদের বেশিরভাগ সাধারণ পরিবেশে বিশেষত পিএইচপি 5.2 এবং 5.3 এর সাথে আটকে আছে, বিশেষত ভাগ করা হোস্ট, @ ক্যারম্যাক্সেল আসন্ন এপিআইয়ের জন্য একটি সামঞ্জস্য স্তর তৈরি করেছে যা পিএইচপি 5.3.7 এর সাথে পিছনে সামঞ্জস্যপূর্ণ।

ক্রিপ্টোগ্রাফি পুনর্নির্মাণ এবং দাবি অস্বীকার

আসলে একটি হ্যাশ পাসওয়ার্ড ক্র্যাক করার জন্য প্রয়োজনীয় গণনার শক্তি বিদ্যমান নেই। কম্পিউটারগুলির পাসওয়ার্ডটিকে "ক্র্যাক" করার একমাত্র উপায় হ'ল এটি পুনরায় তৈরি করা এবং এটি সুরক্ষিত করার জন্য ব্যবহৃত হ্যাশিং অ্যালগরিদম অনুকরণ। হ্যাশের গতি রৈখিকভাবে এটি নিষ্ঠুর-জোর করার ক্ষমতার সাথে সম্পর্কিত। আরও খারাপ বিষয়, বেশিরভাগ হ্যাশ অ্যালগরিদমগুলি আরও দ্রুত সঞ্চালনের জন্য সহজেই সমান্তরাল করা যায়। এই কারণেই bcrypt এবং scrypt এর মতো ব্যয়বহুল প্রকল্পগুলি এত গুরুত্বপূর্ণ।

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

সবশেষে: আমি কোনও ক্রিপ্টোগ্রাফার নই। আমি যা কিছু বলেছি তা আমার মতামত, তবে আমি মনে করি এটি ভাল অল 'জ্ঞান ... এবং প্রচুর পড়ার উপর ভিত্তি করে। মনে রাখবেন, যতটা সম্ভব অসতর্ক হয়ে উঠুন, জিনিসগুলিকে যতটা সম্ভব অনুপ্রবেশ করা শক্ত করুন এবং তারপরে, আপনি এখনও যদি উদ্বিগ্ন থাকেন তবে আপনার কোড / সিস্টেম সম্পর্কে তারা কী বলেন তা দেখতে কোনও সাদা-টুপি হ্যাকার বা ক্রিপ্টোগ্রাফারের সাথে যোগাযোগ করুন।


9
আপনার পাসওয়ার্ড ডিবি যেভাবেই গোপনীয় বলে মনে করা হচ্ছে কোনও গোপনীয় সাহায্য করে না - যদি তারা সেই ডিবি ধরে রাখতে পারে তবে আপনি যে গোপনীয় ব্যবহার করছেন তাও তারা খুঁজে পেতে পারে। তবে এটি গুরুত্বপূর্ণ যে লবণ এলোমেলো।
ফ্র্যাঙ্কোডায়ায়ার

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

6
@ উইকড ব্রো, আমি আপনার সাথে তর্ক করছি না। আমাদের কাজের এই ক্ষেত্রটি কতটা বিশৃঙ্খলাবদ্ধ এবং জটিল তা কেবল দেখানো হচ্ছে। আমি একটি ছোট ওয়েবসাইটের কন্টেন্ট ম্যানেজমেন্ট সিস্টেম স্থাপনের জন্য সর্বশেষ, সর্বোপরি বুদ্ধিমান, সেরা অনুশীলনের দ্বারা প্রত্যাশা রেখে চলেছি। আমি এখনও এখানে শিখছি। ... প্রতিবার যখন আমি এমন কিছু পড়ি যা বোঝার মতো হয়ে যায়, আমি শীঘ্রই অন্য 5 টি পোস্টের সাথে এটি বিপরীত লক্ষ্য করি। সেই রাউন্ড-রাউন্ডটি দ্রুত
ঝিমঝিম হয়ে ওঠে

4
আকর্ষণীয় রিভিশন। ব্যবহারকারীর আইডি (বলুন, একটি স্বয়ংবৃদ্ধি বিগিন্ট) ভাল ননস? বা যেহেতু এটি এলোমেলো নয় তাই ভাল না? এছাড়াও, আমি ডাটাবেসে প্রতিটি ব্যবহারকারীর জন্য ননস সংরক্ষণ করতে হবে ... সাইটের কী + ননস + এইচএমএসি একাধিকবার পুনরাবৃত্তি হওয়া সল্টযুক্ত (ইউজার আইডি সহ) এর মধ্যে উন্নত সুরক্ষা সরবরাহ করে? একইভাবে, এইচএমএসি পুনরাবৃত্তি করা কি সুরক্ষার জন্য একাধিকবার ভাল?
লুস্কুবাল

4
ইমেলের মাধ্যমে একটি অস্থায়ী পাসওয়ার্ড প্রেরণের জন্য যে ব্যবহারকারীরা প্রথমবার এটি ব্যবহার করার সময় এটি পরিবর্তন করতে হবে এবং ইমেলের মাধ্যমে একটি "সুরক্ষিত" লিঙ্ক প্রেরণ করা যা তাদের পাসওয়ার্ড সেট করার অনুমতি দেয় এটিও সমান ঝুঁকিপূর্ণ। উভয় ক্ষেত্রেই যে কেউ ইমেলটি বাধা দেয় তারা অভিযুক্ত প্রাপক হিসাবে লিঙ্ক বা পাসওয়ার্ড ব্যবহার না করা অবধি অ্যাকাউন্টটি অ্যাক্সেস করতে পারে।
টিম গৌটিয়ার

138

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

  • পিএইচপি 5.5 বা উচ্চতর: পাসওয়ার্ড_হ্যাশ () ভাল মানের এবং পিএইচপি মূল অংশ।
  • পুরানো পিএইচপি সংস্করণ: ওপেনওয়ালের পিএইচপিএস লাইব্রেরি বেশিরভাগ কাস্টম কোডের চেয়ে অনেক ভাল - ওয়ার্ডপ্রেস, দ্রুপাল ইত্যাদিতে ব্যবহৃত হয়

বেশিরভাগ প্রোগ্রামারদের কেবল দুর্বলতার পরিচয় না দিয়ে নিরাপদে ক্রিপ্টো সম্পর্কিত কোড লেখার দক্ষতা নেই।

দ্রুত স্ব-পরীক্ষা: পাসওয়ার্ড প্রসারিত কী এবং আপনার কতটি পুনরাবৃত্তি ব্যবহার করা উচিত? উত্তরটি যদি আপনি না জানেন তবে আপনার ব্যবহার করা উচিত password_hash(), যেহেতু পাসওয়ার্ড প্রসারিত এখন অনেক দ্রুত সিপিইউ এবং জিপিইউ এবং এফপিজিএ ব্যবহারের ফলে প্রতি সেকেন্ডে কয়েক বিলিয়ন অনুমানের হারে পাসওয়ার্ড ফাটানোর জন্য (জিপিইউ সহ) )।

উদাহরণস্বরূপ, আপনি 5 ডেস্কটপ পিসিতে ইনস্টলিত 25 জিপিইউ ব্যবহার করে 6 ঘন্টার মধ্যে সমস্ত 8-অক্ষরের উইন্ডোজ পাসওয়ার্ড ক্র্যাক করতে পারেন । এটি হ'ল ব্রুট-ফোর্সিং, অর্থাত্ বিশেষ অক্ষর সহ প্রতিটি 8-অক্ষরের উইন্ডোজ পাসওয়ার্ড গণনা করা ও পরীক্ষা করা , এটি অভিধানের আক্রমণ নয়। এটি ২০১২ সালে ছিল, 2018 পর্যন্ত আপনি কম জিপিইউ ব্যবহার করতে পারেন বা 25 জিপিইউ দিয়ে দ্রুত ক্র্যাক করতে পারেন।

উইন্ডোজ পাসওয়ার্ডে অনেকগুলি রেইনবো টেবিল আক্রমণ রয়েছে যা সাধারণ সিপিইউতে চলে এবং খুব দ্রুত। এগুলি কারণ উইন্ডোজ এখনও তার পাসওয়ার্ডগুলিতে লবণ দেয় না বা প্রসারিত করে না , এমনকি উইন্ডোজ 10 -তেও মাইক্রোসফ্টের মতো ভুলটি করবেন না!

আরো দেখুন:

  • কেন যাওয়ার password_hash()বা phpassসর্বোত্তম উপায় সম্পর্কে আরও ভাল উত্তর
  • ভাল ব্লগ নিবন্ধ bcrypt, scrypt এবং PBKDF2 সহ প্রধান অ্যালগরিদমগুলির জন্য পুনরায় সংশোধিত 'কাজের কারণগুলি' (পুনরাবৃত্তির সংখ্যা) দিচ্ছে।

1
তবে এই সিস্টেমগুলি আরও সুপরিচিত এবং সম্ভবত ইতিমধ্যে আপস করা হয়েছে। আপনি নিজের কাজটি জানেন না যখন তা আপনার নিজের তৈরি করে be
JqueryToAddNumbers

14
পুনরায় "এই সিস্টেমগুলি আরও পরিচিত এবং সম্ভবত ইতিমধ্যে আপোস করা হয়েছে" - প্রমাণীকরণের জন্য একটি ভাল নকশা করা সিস্টেমটি "ইতিমধ্যে আপোস করা" হওয়ার কারণ নেই কারণ এটি আরও পরিচিত। Phpass এর মতো লাইব্রেরিগুলি বিশেষজ্ঞরা লিখেছেন এবং অনেক লোক বিশদ দ্বারা পর্যালোচনা করেছেন - এগুলি যে তারা সুপরিচিত তা বিভিন্ন ব্যক্তিদের দ্বারা বিশদ পর্যালোচনার পাশাপাশি রয়েছে এবং সম্ভবত তারা নিরাপদ বলে বোঝায়।
রিচভেল

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

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

1
@ রিচভেল - পাসওয়ার্ড_হ্যাশ () ফাংশন। পূর্বে উল্লিখিত হিসাবে, এটি পিএইচপি কোর (ওরফে / এক্সট্রা / স্ট্যান্ডার্ড) এ অন্তর্নির্মিত।
কিউবিকসফট

43

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


পাসওয়ার্ড হ্যাশিংয়ের জন্য নয়। আক্রমণকারীটিকে পাসওয়ার্ডটি পুনরুদ্ধার করতে কেবল একটি হ্যাশ ভাঙতে হবে। পয়েন্টটি এমডি 5 বা এসএএএ 1 এর পাসওয়ার্ডের দৃশ্যে কোনও ব্যবহারিক বিরতি উপলব্ধ না করায় যাইহোক।
ফ্র্যাঙ্কোডায়ার

2
দুঃখিত, আমি দুটি উত্তর দুটি হ্যাশ ব্যবহার করার পরামর্শ হিসাবে আপনার উত্তরটি ভুলভাবে পড়েছি ... আপনি আসলেই সঠিক। দুটি হ্যাশ ব্যবহার করা পাসওয়ার্ডের ক্ষেত্রে সিস্টেমকে দুর্বল করে, কারণ তাদের কেবল দুর্বল হ্যাশটিই ভাঙতে হবে।
ফ্র্যাঙ্কোডায়ার

40

পিএইচপি 5.5 হিসাবে, পিএইচপি-তে পাসওয়ার্ড, পাসওয়ার্ড_হ্যাশ () এবং পাসওয়ার্ড_ওয়ারিফাই () এবং হ্যাশিং যাচাই করার জন্য সহজ, সুরক্ষিত ফাংশন রয়েছে

$password = 'anna';
$hash = password_hash($password, PASSWORD_DEFAULT);
$expensiveHash = password_hash($password, PASSWORD_DEFAULT, array('cost' => 20));

password_verify('anna', $hash); //Returns true
password_verify('anna', $expensiveHash); //Also returns true
password_verify('elsa', $hash); //Returns false

যখন password_hash()ব্যবহৃত হয়, এটি একটি এলোমেলো লবণ উত্পন্ন করে এবং এটি আউটপুটযুক্ত হ্যাশের সাথে অন্তর্ভুক্ত হয় (ব্যবহৃত ব্যয় এবং অ্যালগরিদম সহ)) password_verify()তারপরে এটি হ্যাশ পড়ে এবং ব্যবহৃত লবণ এবং এনক্রিপশন পদ্ধতি নির্ধারণ করে এবং সরবরাহিত সরলখরার পাসওয়ার্ডের বিপরীতে এটি যাচাই করে।

প্রদান PASSWORD_DEFAULTনির্দেশ করে পিএইচপি পিএইচপি এর ইনস্টল করা সংস্করণ ডিফল্ট হ্যাশ অ্যালগরিদম ব্যবহার করতে। হুবহু কোন অ্যালগরিদম এর অর্থ ভবিষ্যতের সংস্করণগুলিতে সময়ের সাথে সাথে পরিবর্তনের উদ্দেশ্যে, যাতে এটি সর্বদা শক্তিশালী উপলব্ধ অ্যালগরিদমগুলির মধ্যে একটি হয়ে যায়।

ক্রমবর্ধমান ব্যয় (যা 10 এ ডিফল্ট হয়েছে) হ্যাশটিকে প্রাণঘাতী করা শক্ত করে তোলে তবে হ্যাশগুলি উত্পন্ন করা এবং সেগুলির বিরুদ্ধে পাসওয়ার্ড যাচাই করা আপনার সার্ভারের সিপিইউয়ের জন্য আরও কাজ করবে।

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


33

যদিও প্রশ্নের উত্তর দেওয়া হয়েছে, আমি কেবল আবার বলতে চাই যে হ্যাশিংয়ের জন্য ব্যবহৃত লবণের এলোমেলো হওয়া উচিত এবং প্রথম উত্তরের পরামর্শ মতো ইমেল ঠিকানার মতো নয়।

আরও ব্যাখ্যা এখানে পাওয়া যায়: http://www.pivotalsecurity.com/blog/password-hashing-salt-should-it-be-random/

সম্প্রতি আমি একটি আলোচনা করেছি যে অনুমানযোগ্য বা পরিচিত লবণের সাথে লবণের চেয়ে এলোমেলো বিটের সাথে লবণযুক্ত পাসওয়ার্ড হ্যাশগুলি আরও সুরক্ষিত কিনা whether আসুন দেখুন: সিস্টেমে স্টোরেজ পাসওয়ার্ডের সাথে যদি সিস্টেমটি এলোমেলো লবণ সঞ্চয় করে তা আপস করা হয়, আক্রমণকারীটির হ্যাশের পাশাপাশি লবণেরও অ্যাক্সেস থাকবে, তাই লব এলোমেলো হোক বা না হোক, তাতে কিছু যায় আসে না। আক্রমণকারী হ্যাশ ফাটানোর জন্য প্রাক-গণিত রেইনবো টেবিল তৈরি করতে পারে। এখানে আকর্ষণীয় অংশটি আসে- প্রাক-গণিত টেবিলগুলি তৈরি করা এত তুচ্ছ নয়। আসুন আমরা ডাব্লুপিএ সুরক্ষা মডেলের উদাহরণ গ্রহণ করি। আপনার ডাব্লুপিএ পাসওয়ার্ড আসলে ওয়্যারলেস অ্যাক্সেস পয়েন্টে কখনই পাঠানো হয় না। পরিবর্তে, এটি আপনার এসএসআইডি (নেটওয়ার্কের নাম- যেমন লিংকাইস, ড্লিংক ইত্যাদি) দিয়ে হ্যাশ করা হয়েছে। এটি এখানে কীভাবে কাজ করে তার একটি খুব ভাল ব্যাখ্যা। হ্যাশ থেকে পাসওয়ার্ড পুনরুদ্ধার করতে, আপনার পাসওয়ার্ডের পাশাপাশি লবণ (নেটওয়ার্কের নাম) জানতে হবে। চার্চ অফ ওয়াইফাই এরই মধ্যে প্রাক-গণিত হ্যাশ টেবিল রয়েছে যার শীর্ষস্থানীয় 1000 এসএসআইডি এবং প্রায় 1 মিলিয়ন পাসওয়ার্ড রয়েছে। সমস্ত টেবিলের আকার প্রায় 40 জিবি। আপনি তাদের সাইটে যেমন পড়তে পারেন, এই টেবিলগুলি তৈরি করতে কেউ 3 দিনের জন্য 15 টি FGPA অ্যারে ব্যবহার করেছে। ধরে নিচ্ছেন ভুক্তভোগী এসএসআইডিটিকে “a387csf3 as এবং পাসওয়ার্ড হিসাবে“ 123456 as হিসাবে ব্যবহার করছে, তা কি এই টেবিলগুলির দ্বারা ক্র্যাক হবে? না! .. এটা হতে পারে না. এমনকি পাসওয়ার্ডটি দুর্বল হলেও, টেবিলগুলিতে এসএসআইডি a387csf3 এর জন্য হ্যাশ নেই। এলোমেলো লবণের সৌন্দর্য এটি। এটি প্রাক-গণিত টেবিলগুলিতে সাফল্য অর্জনকারী ক্র্যাকারকে বাধা দেবে। এটি কি একটি নির্ধারিত হ্যাকার থামাতে পারে? সম্ভবত না. তবে এলোমেলো লবণের সাহায্যে অতিরিক্ত স্তর প্রতিরক্ষা সরবরাহ করে। আমরা এই বিষয়ে থাকাকালীন, আসুন একটি পৃথক সিস্টেমে এলোমেলো সল্ট সংরক্ষণের অতিরিক্ত সুবিধা নিয়ে আলোচনা করা যাক। পরিস্থিতি # 1: পাসওয়ার্ড হ্যাশগুলি সিস্টেমে এক্সে সংরক্ষণ করা হয় এবং হ্যাশিংয়ের জন্য ব্যবহৃত লবণের মানগুলি সিস্টেম ওয়াইয়ে সংরক্ষণ করা হয় These এই লবণের মানগুলি অনুমানযোগ্য বা জ্ঞাত (উদাহরণস্বরূপ ব্যবহারকারীর নাম) পরিস্থিতি # 2: পাসওয়ার্ড হ্যাশগুলি সিস্টেম এক্স এবং লবণের মানগুলিতে ব্যবহৃত হয় হ্যাশিং সিস্টেম ওয়াইতে সংরক্ষণ করা হয় These এই লবণের মানগুলি এলোমেলো। যদি সিস্টেম এক্স আপোস করা হয়েছে, যেমন আপনি অনুমান করতে পারেন, পৃথক সিস্টেমে এলোমেলো লবণ ব্যবহারের বিশাল সুবিধা রয়েছে (পরিস্থিতি # 2)। আক্রমণকারীকে হ্যাশগুলি ক্র্যাক করতে সক্ষম হওয়ার জন্য অতিরিক্ত মানগুলি অনুমান করতে হবে। যদি একটি 32 বিট লবণ ব্যবহৃত হয়, অনুমান করা প্রতিটি পাসওয়ার্ডের জন্য 2 ^ 32 = 4,294,967,296 (প্রায় 4.2 বিলিয়ন) পুনরাবৃত্তির প্রয়োজন হবে। পাসওয়ার্ড হ্যাশগুলি সিস্টেম এক্স-তে সংরক্ষণ করা হয় এবং হ্যাশিংয়ের জন্য ব্যবহৃত লবণের মানগুলি সিস্টেম ওয়াইতে সংরক্ষণ করা হয় These এই লবণের মানগুলি অনুমানযোগ্য বা পরিচিত (উদাহরণস্বরূপ ব্যবহারকারী নাম) পরিস্থিতি # 2: পাসওয়ার্ড হ্যাশগুলি সিস্টেম এক্স-তে সংরক্ষণ করা হয় এবং হ্যাশিংয়ের জন্য ব্যবহৃত লবণের মানগুলি সংরক্ষণ করা হয় সিস্টেম ওয়াই। এই লবণের মানগুলি এলোমেলো। যদি সিস্টেম এক্স আপোস করা হয়েছে, যেমন আপনি অনুমান করতে পারেন, পৃথক সিস্টেমে এলোমেলো লবণ ব্যবহারের বিশাল সুবিধা রয়েছে (পরিস্থিতি # 2)। আক্রমণকারীকে হ্যাশগুলি ক্র্যাক করতে সক্ষম হওয়ার জন্য অতিরিক্ত মানগুলি অনুমান করতে হবে। যদি একটি 32 বিট লবণ ব্যবহৃত হয়, অনুমান করা প্রতিটি পাসওয়ার্ডের জন্য 2 ^ 32 = 4,294,967,296 (প্রায় 4.2 বিলিয়ন) পুনরাবৃত্তির প্রয়োজন হবে। পাসওয়ার্ড হ্যাশগুলি সিস্টেম এক্স-তে সংরক্ষণ করা হয় এবং হ্যাশিংয়ের জন্য ব্যবহৃত লবণের মানগুলি সিস্টেম ওয়াইতে সংরক্ষণ করা হয় These এই লবণের মানগুলি অনুমানযোগ্য বা পরিচিত (উদাহরণস্বরূপ ব্যবহারকারী নাম) পরিস্থিতি # 2: পাসওয়ার্ড হ্যাশগুলি সিস্টেম এক্স-তে সংরক্ষণ করা হয় এবং হ্যাশিংয়ের জন্য ব্যবহৃত লবণের মানগুলি সংরক্ষণ করা হয় সিস্টেম ওয়াই। এই লবণের মানগুলি এলোমেলো। যদি সিস্টেম এক্স আপোস করা হয়েছে, যেমন আপনি অনুমান করতে পারেন, পৃথক সিস্টেমে এলোমেলো লবণ ব্যবহারের বিশাল সুবিধা রয়েছে (পরিস্থিতি # 2)। আক্রমণকারীকে হ্যাশগুলি ক্র্যাক করতে সক্ষম হওয়ার জন্য অতিরিক্ত মানগুলি অনুমান করতে হবে। যদি একটি 32 বিট লবণ ব্যবহৃত হয়, অনুমান করা প্রতিটি পাসওয়ার্ডের জন্য 2 ^ 32 = 4,294,967,296 (প্রায় 4.2 বিলিয়ন) পুনরাবৃত্তির প্রয়োজন হবে। এই লবণের মানগুলি এলোমেলো। যদি সিস্টেম এক্স আপোস করা হয়েছে, যেমন আপনি অনুমান করতে পারেন, পৃথক সিস্টেমে এলোমেলো লবণ ব্যবহারের বিশাল সুবিধা রয়েছে (পরিস্থিতি # 2)। আক্রমণকারীকে হ্যাশগুলি ক্র্যাক করতে সক্ষম হওয়ার জন্য অতিরিক্ত মানগুলি অনুমান করতে হবে। যদি একটি 32 বিট লবণ ব্যবহৃত হয়, অনুমান করা প্রতিটি পাসওয়ার্ডের জন্য 2 ^ 32 = 4,294,967,296 (প্রায় 4.2 বিলিয়ন) পুনরাবৃত্তির প্রয়োজন হবে। এই লবণের মানগুলি এলোমেলো। যদি সিস্টেম এক্স আপোস করা হয়েছে, যেমন আপনি অনুমান করতে পারেন, পৃথক সিস্টেমে এলোমেলো লবণ ব্যবহারের বিশাল সুবিধা রয়েছে (পরিস্থিতি # 2)। আক্রমণকারীকে হ্যাশগুলি ক্র্যাক করতে সক্ষম হওয়ার জন্য অতিরিক্ত মানগুলি অনুমান করতে হবে। যদি একটি 32 বিট লবণ ব্যবহৃত হয়, অনুমান করা প্রতিটি পাসওয়ার্ডের জন্য 2 ^ 32 = 4,294,967,296 (প্রায় 4.2 বিলিয়ন) পুনরাবৃত্তির প্রয়োজন হবে।


7
আক্রমণকারী লবণ পেলেও, একটি "সাইটসাল্ট: ইউজারসাল্ট: পাসওয়ার্ড" স্ট্রিং এখনও পূর্বনির্ধারিত টেবিলগুলির বিরুদ্ধে প্রতিরোধী, যেহেতু আক্রমণকারীকে প্রতিটি ব্যবহারকারীর জন্য টেবিল তৈরি করতে হবে (সুতরাং আক্রমণটি আরও ধীর হয়ে যায়), যদি না নির্দিষ্ট ব্যবহারকারী অবশ্যই না হন লক্ষ্যবস্তু করা হচ্ছে ...
লুস্কুবাল

"আক্রমণকারী লবণ পেলেও একটি" সাইটসাল্ট: ইউজারসাল্ট: পাসওয়ার্ড "স্ট্রিং এখনও পূর্বনির্ধারিত টেবিলের বিরুদ্ধে প্রতিরোধী", সম্পূর্ণরূপে সম্মত Regarding আমার বক্তব্যটি হ'ল সাইটসাল্ট যদি এলোমেলো এবং দীর্ঘ তৈরি করা হয় তবে সিস্টেমটি এর চেয়ে বেশি সুরক্ষিত করে তুলবে (সাইটসাল্ট) অনুমানযোগ্য। আমি কিছু লোককে ইমেল আইডি ইত্যাদি লবণ হিসাবে ব্যবহারের পরামর্শ দিচ্ছি এবং আমি তা নিরুৎসাহিত করি।
গৌরব কুমার

আমি যা লিখেছিলাম তা আপনি মিস করেছেন। আমি একটি র্যান্ডম ননস, রেকর্ড সহ সঞ্চিত, ইমেল ঠিকানা PLUS ব্যবহার করতে বলেছি। ইমেল ঠিকানাটি যুক্ত হ্যাকারটির কাজ করার জন্য অতিরিক্ত এনট্রপি তৈরি করে। আমি তখন থেকে আমার উত্তরটি bcrypt এর পক্ষে আবার লিখেছি।
রবার্ট কে

28

আমি কেবল উল্লেখ করতে চাই যে পিএইচপি 5.5 এর মধ্যে একটি পাসওয়ার্ড হ্যাশিং এপিআই রয়েছে যা চারপাশে মোড়ক সরবরাহ করে crypt()। এই এপিআই পাসওয়ার্ড হ্যাশগুলি হ্যাশিং, যাচাইকরণ এবং পুনঃভাগের কাজটিকে উল্লেখযোগ্যভাবে সরল করে। লেখক পিএইচপি 5.3.7 এবং তার পরে এবং এখনই এটি ব্যবহার করতে চান তাদের জন্য, একটি সামঞ্জস্যতা প্যাক (একক পাসওয়ার্ড.পিএইচপি ফাইলের আকারে যা আপনি কেবল requireব্যবহার করতে পারেন) প্রকাশ করেছেন।

এটি কেবলমাত্র আপাতত বিসিআরওয়াইপিটি সমর্থন করে, তবে এটি অন্য পাসওয়ার্ড হ্যাশিং কৌশলগুলিকে অন্তর্ভুক্ত করার জন্য সহজেই বাড়ানো হবে এবং কারণ কৌশল এবং ব্যয় হ্যাশের অংশ হিসাবে সংরক্ষণ করা হয়েছে, আপনার পছন্দসই হ্যাশিং কৌশল / ব্যয় পরিবর্তনের ফলে বর্তমান হ্যাশগুলি অকার্যকর হবে না স্বয়ংক্রিয়ভাবে, বৈধকরণের সময় সঠিক কৌশল / ব্যয় ব্যবহার করবেন। আপনি যদি নিজের মত স্পষ্টভাবে সংজ্ঞায়িত না করেন তবে এটি "সুরক্ষিত" লবণের উত্পাদনও পরিচালনা করে।

এপিআই চারটি ফাংশন প্রকাশ করে:

  • password_get_info() - প্রদত্ত হ্যাশ সম্পর্কে তথ্য প্রদান করে
  • password_hash() - একটি পাসওয়ার্ড হ্যাশ তৈরি করে
  • password_needs_rehash()- প্রদত্ত হ্যাশ প্রদত্ত বিকল্পগুলির সাথে মেলে কিনা তা পরীক্ষা করে। হ্যাশটি আপনার বর্তমান কৌশল / ব্যয় স্কিমের সাথে সামঞ্জস্য করে কিনা তা পরীক্ষা করতে দরকারী যদি প্রয়োজন হয় তবে আপনাকে পুনঃস্থাপনের অনুমতি দেয়
  • password_verify() - যাচাই করে যে একটি পাসওয়ার্ড হ্যাশের সাথে মেলে

এই মুহুর্তে এই ফাংশনগুলি PASSWORD_BCRYPT এবং PASSWORD_DEIFULT পাসওয়ার্ড ধ্রুবকগুলি গ্রহণ করে, যা এই মুহূর্তে প্রতিশব্দ, পার্থক্য হচ্ছে যে PASSWORD_DEFAULT "নতুন, শক্তিশালী হ্যাশিং অ্যালগরিদমগুলি সমর্থন করলে নতুন পিএইচপি প্রকাশে পরিবর্তিত হতে পারে" " PASSWORD_DEFAULT এবং login_needs_rehash () ব্যবহার করে লগইনে (এবং প্রয়োজনে পুনরায় পুনঃস্থাপন করা) আপনার হ্যাশগুলি আপনার পক্ষে কোনও কাজ করার সামান্য কারণেই হিংসাত্মক আক্রমণে যুক্তিসঙ্গতভাবে স্থিতিস্থাপক তা নিশ্চিত করা উচিত।

সম্পাদনা: আমি ঠিক বুঝতে পেরেছিলাম যে এটি রবার্ট কে এর উত্তরে সংক্ষেপে উল্লেখ করা হয়েছে। আমি এই উত্তরটি এখানে রেখে যাব কারণ আমি মনে করি এটি কীভাবে কাজ করে এবং এটি সুরক্ষা জানেন না তাদের জন্য এটি যেভাবে ব্যবহারের সহজতরতা দেয় সে সম্পর্কে কিছুটা আরও বেশি তথ্য সরবরাহ করে।


19

আমি Phpass ব্যবহার করছি যা একটি সাধারণ এক-ফাইলের পিএইচপি ক্লাস যা প্রায় প্রতিটি পিএইচপি প্রকল্পে খুব সহজেই প্রয়োগ করা যেতে পারে। আরও দেখুন এইচ

ডিফল্টরূপে এটি শক্তিশালী উপলব্ধ এনক্রিপশন ব্যবহার করে যা Phpass এ প্রয়োগ করা হয়, যা bcryptওয়ার্ডপ্রেসের মতো ফ্রেমওয়ার্কের পিছনে সামঞ্জস্যতা প্রদানের জন্য MD5 তে অন্য এনক্রিপশনে ফিরে আসে।

ফিরে আসা হ্যাশটি এটি ডাটাবেসে সংরক্ষণ করা যেতে পারে। হ্যাশ উত্পাদনের জন্য নমুনা ব্যবহার হ'ল:

$t_hasher = new PasswordHash(8, FALSE);
$hash = $t_hasher->HashPassword($password);

পাসওয়ার্ড যাচাই করতে, কেউ এটি ব্যবহার করতে পারেন:

$t_hasher = new PasswordHash(8, FALSE);
$check = $t_hasher->CheckPassword($password, $hash);

14

মনে রাখার মতো ঘটনা

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

সার্ভার

PORTS

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

ব্যবহারকারীর নাম

বিশ্বের যা কিছু ভাল তা ব্যবহারকারীর নাম অ্যাডমিন, রুট বা অনুরূপ কিছু ব্যবহার করবেন না। এছাড়াও আপনি যদি ইউনিক্স ভিত্তিক সিস্টেমে থাকেন তবে রুট অ্যাকাউন্টটি লগইন অ্যাক্সেসযোগ্য করে তুলবেন না, এটি সর্বদা কেবল সুডো হওয়া উচিত।

পাসওয়ার্ড

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

তথ্যশালা

সার্ভার

আদর্শভাবে আপনি পৃথক সার্ভারে আপনার ডিবি এবং অ্যাপ্লিকেশন চান। ব্যয়ের কারণে এটি সবসময় সম্ভব হয় না তবে এটি কিছুটা সুরক্ষার অনুমতি দেয় কারণ আক্রমণকারীকে সিস্টেমে সম্পূর্ণরূপে অ্যাক্সেসের জন্য দুটি পদক্ষেপ অতিক্রম করতে হবে।

USER কে

আপনার অ্যাপ্লিকেশনটির সর্বদা ডিবি অ্যাক্সেস করার নিজস্ব অ্যাকাউন্ট থাকে এবং কেবল এটির জন্য প্রয়োজনীয় সুযোগ-সুবিধাগুলি দিন।

তারপরে আপনার জন্য একটি পৃথক ব্যবহারকারী অ্যাকাউন্ট রয়েছে যা সার্ভারে কোথাও সঞ্চিত নয়, এমনকি অ্যাপ্লিকেশনেও নয়।

সর্বদা পছন্দ করুন এই মূল বা অনুরূপ কিছু না।

পাসওয়ার্ড

সমস্ত ভাল পাসওয়ার্ড সহ একই নির্দেশিকা অনুসরণ করুন। একই সিস্টেমে কোনও সার্ভার বা ডিবি অ্যাকাউন্টে একই পাসওয়ার্ড পুনরায় ব্যবহার করবেন না।

পিএইচপি

পাসওয়ার্ড

আপনার ডিবিতে কখনই পাসওয়ার্ড সংরক্ষণ করবেন না, পরিবর্তে হ্যাশ এবং অনন্য লবণ সংরক্ষণ করুন, পরে কেন তা ব্যাখ্যা করব।

হ্যাশ

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

সেখানে প্রচুর ভাল হ্যাশিং ফাংশন রয়েছে ( password_hash, hashইত্যাদি ...) তবে হ্যাশ কার্যকর হওয়ার জন্য আপনাকে একটি ভাল অ্যালগরিদম নির্বাচন করতে হবে। (বিসিআরপিট এবং এর অনুরূপ হ'ল শালীন অ্যালগরিদম))

যখন হ্যাশিংয়ের গতি কী, ব্রুট ফোর্সের আক্রমণগুলির তুলনায় ধীর তত বেশি প্রতিরোধী।

হ্যাশিংয়ের অন্যতম সাধারণ ভুল হ্যাশগুলি ব্যবহারকারীদের পক্ষে অনন্য নয়। এটি মূলত কারণ লবণগুলি স্বতন্ত্রভাবে উত্পন্ন হয় না।

salting

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

আপনি যখন লবণ তৈরি করেন তা নিশ্চিত করুন যে এটি পাসওয়ার্ডের পক্ষে সল্টিংয়ের পক্ষে স্বতন্ত্র, তারপরে সম্পূর্ণ ডিগ্রি করা হ্যাশ এবং লবণ আপনার ডিবিতে সংরক্ষণ করুন। এটি কী করবে তা এটি তৈরি করে যাতে আক্রমণকারীকে অ্যাক্সেস পাওয়ার আগে পৃথকভাবে প্রতিটি লবণ এবং হ্যাশ ক্র্যাক করতে হয়। এর অর্থ আক্রমণকারীটির জন্য আরও অনেক বেশি কাজ এবং সময়।

ব্যবহারকারীর পাসওয়ার্ড তৈরি হচ্ছে

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

ব্যবহারকারীকে একটি সুরক্ষিত পাসওয়ার্ড তৈরি করুন, এটি সহজ এবং সর্বদা করা উচিত, ব্যবহারকারী শেষ পর্যন্ত এর জন্য কৃতজ্ঞ হবেন।

পরিশেষে, আপনি যে সুরক্ষা ব্যবস্থা গ্রহণ করেন না সেগুলি 100% সুরক্ষিত নয়, সুরক্ষার জন্য প্রযুক্তি যত বেশি উন্নত হবে আক্রমণ তত বেশি উন্নত হয়। তবে এই পদক্ষেপগুলি অনুসরণ করা আপনার সাইটকে আরও সুরক্ষিত এবং আক্রমণকারীদের পিছনে যেতে কম আকাঙ্ক্ষিত করে তুলবে।

এখানে একটি পিএইচপি ক্লাস যা সহজেই একটি পাসওয়ার্ডের জন্য একটি হ্যাশ এবং লবণ তৈরি করে

http://git.io/mSJqpw


1
আপনার শালীন হ্যাশ অ্যালগরিদমের তালিকা থেকে আপনার SHA512 টি স্ট্রাইক করা উচিত, কারণ এটি খুব দ্রুত। এটি কেবলমাত্র PBKDF2 এর সাথে একত্রে ব্যবহার করুন। বিসিক্রিপ ব্লোফিশের উপর ভিত্তি করে, ব্লো ফিশ নিজেই এনক্রিপশনের জন্য একটি অ্যালগরিদম, হ্যাশিংয়ের জন্য নয়।
মার্টিনস্টোকেলি

1
আপনি ডিবিতে এলোমেলো লবণ কীভাবে সংরক্ষণ করবেন? আমি মনে করি আপনি এটি হ্যাশ করবেন না (যাচাইকরণের জন্য ব্যবহার করা যাবে না) বা পরিষ্কারভাবে সঞ্চয় করবেন না (আক্রমণকারী যদি ডিবি পড়তে পারেন তবে প্রকৃত কোনও সুবিধা নেই)। সুতরাং, আপনি এটি কিভাবে?
ইয়াজেল

ডাব্লুএমফ্রান্সিয়া লিখেছেন: "সল্টিং পাসওয়ার্ডে একটি এলোমেলো স্ট্রিং যুক্ত করে যাতে ডিবিতে অনুরূপ পাসওয়ার্ড একই রকম দেখা যায় না"। এটি আমার কাছে অর্থবোধ করে না। ডিবিতে হ্যাশগুলি ইতিমধ্যে স্বতন্ত্র দেখা দেবে কারণ এটি হ্যাশ ফাংশনগুলির সম্পত্তি।
H2ONaCl

ডাব্লুএমফ্যান্সিয়া একটি ধ্রুবক লবণের বিষয়ে লিখেছেন: "একবার আক্রমণকারী একটি পাসওয়ার্ড লবণের সন্ধান করে তার সকলের জন্য লবণ থাকে"। একই কথা বলা যেতে পারে যে হ্যাকার যদি সনাক্ত করে যে কোন ডিবি ক্ষেত্রটি লবণ, তবে তার সকলের জন্য লবণ রয়েছে। যেহেতু একটি ধ্রুবক লবণ সম্ভবত ডিবিতে থাকবে না, এটি একটি ধ্রুবক লবণের পক্ষে ভাল।
H2ONaCl

অবশ্যই, এই মন্তব্যগুলি ব্যবহারকারীর জন্য এলোমেলো লবণের জন্য নয় প্রতি প্রয়োগে একটি লবণের চেয়ে ভাল নয়। এটা বেশি ভাল.
H2ONaCl

12

গুগল বলেছে যে SHA256 পিএইচপি-তে উপলব্ধ।

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


13
B৪ বিট কি কারও পক্ষে যথেষ্ট?
কোনারাক

@ কেনারাক, আমি ২০ বছর পর আবার ফিরে আসব। :) তবে হ্যাঁ SHA256 সত্যিই উপলব্ধ। SHA256 কতটা সুরক্ষিত তা আপনি যদি জানতে চান তবে আপনি এটি পরীক্ষা করে দেখতে চাইতে পারেন: সিকিউরিটি.স্ট্যাকেক্সেঞ্জার
প্রশ্নস / ৯০০৪ /

8

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


2
একাধিক হ্যাশিং অভিধান এবং হিংস্র আক্রমণগুলির বিরুদ্ধেও সুরক্ষা দেয় - যেমন এটি কেবল তাদের গণনা করতে আরও বেশি সময় নেয়।
frankodwyer

6
ডাবল হ্যাশিং আপনাকে উল্লেখযোগ্য সুবিধা দেয় না তবে মাল্টি রাউন্ড হ্যাশিং পুনরাবৃত্তিগুলি অভিধান এবং ব্রুস ফোর্সের আক্রমণগুলির বিরুদ্ধে এখনও একটি সম্ভাব্য প্রতিরক্ষা। শিল্প শক্তি পাসওয়ার্ড হ্যাশ 1000+ রাউন্ড ব্যবহার করে। পিকেসিএস # 5 এর পিবিকেডিএফ 1 সর্বনিম্ন 1000 রাউন্ডের পরামর্শ দেয়।
বার্ক ডি ডেমির

8

আমি এই বিষয়ে এখানে নিখুঁত বিষয়টি পেয়েছি: https://crackstation.net/hashing-security.htm , আমি চাইছিলাম আপনি এর থেকে উপকার পাবেন, এখানে উত্স কোডটিও সময় ভিত্তিক আক্রমণটির বিরুদ্ধে প্রতিরোধ সরবরাহ করেছিল।

<?php
/*
 * Password hashing with PBKDF2.
 * Author: havoc AT defuse.ca
 * www: https://defuse.ca/php-pbkdf2.htm
 */

// These constants may be changed without breaking existing hashes.
define("PBKDF2_HASH_ALGORITHM", "sha256");
define("PBKDF2_ITERATIONS", 1000);
define("PBKDF2_SALT_BYTES", 24);
define("PBKDF2_HASH_BYTES", 24);

define("HASH_SECTIONS", 4);
define("HASH_ALGORITHM_INDEX", 0);
define("HASH_ITERATION_INDEX", 1);
define("HASH_SALT_INDEX", 2);
define("HASH_PBKDF2_INDEX", 3);

function create_hash($password)
{
    // format: algorithm:iterations:salt:hash
    $salt = base64_encode(mcrypt_create_iv(PBKDF2_SALT_BYTES, MCRYPT_DEV_URANDOM));
    return PBKDF2_HASH_ALGORITHM . ":" . PBKDF2_ITERATIONS . ":" .  $salt . ":" . 
        base64_encode(pbkdf2(
            PBKDF2_HASH_ALGORITHM,
            $password,
            $salt,
            PBKDF2_ITERATIONS,
            PBKDF2_HASH_BYTES,
            true
        ));
}

function validate_password($password, $good_hash)
{
    $params = explode(":", $good_hash);
    if(count($params) < HASH_SECTIONS)
       return false; 
    $pbkdf2 = base64_decode($params[HASH_PBKDF2_INDEX]);
    return slow_equals(
        $pbkdf2,
        pbkdf2(
            $params[HASH_ALGORITHM_INDEX],
            $password,
            $params[HASH_SALT_INDEX],
            (int)$params[HASH_ITERATION_INDEX],
            strlen($pbkdf2),
            true
        )
    );
}

// Compares two strings $a and $b in length-constant time.
function slow_equals($a, $b)
{
    $diff = strlen($a) ^ strlen($b);
    for($i = 0; $i < strlen($a) && $i < strlen($b); $i++)
    {
        $diff |= ord($a[$i]) ^ ord($b[$i]);
    }
    return $diff === 0; 
}

/*
 * PBKDF2 key derivation function as defined by RSA's PKCS #5: https://www.ietf.org/rfc/rfc2898.txt
 * $algorithm - The hash algorithm to use. Recommended: SHA256
 * $password - The password.
 * $salt - A salt that is unique to the password.
 * $count - Iteration count. Higher is better, but slower. Recommended: At least 1000.
 * $key_length - The length of the derived key in bytes.
 * $raw_output - If true, the key is returned in raw binary format. Hex encoded otherwise.
 * Returns: A $key_length-byte key derived from the password and salt.
 *
 * Test vectors can be found here: https://www.ietf.org/rfc/rfc6070.txt
 *
 * This implementation of PBKDF2 was originally created by https://defuse.ca
 * With improvements by http://www.variations-of-shadow.com
 */
function pbkdf2($algorithm, $password, $salt, $count, $key_length, $raw_output = false)
{
    $algorithm = strtolower($algorithm);
    if(!in_array($algorithm, hash_algos(), true))
        die('PBKDF2 ERROR: Invalid hash algorithm.');
    if($count <= 0 || $key_length <= 0)
        die('PBKDF2 ERROR: Invalid parameters.');

    $hash_length = strlen(hash($algorithm, "", true));
    $block_count = ceil($key_length / $hash_length);

    $output = "";
    for($i = 1; $i <= $block_count; $i++) {
        // $i encoded as 4 bytes, big endian.
        $last = $salt . pack("N", $i);
        // first iteration
        $last = $xorsum = hash_hmac($algorithm, $last, $password, true);
        // perform the other $count - 1 iterations
        for ($j = 1; $j < $count; $j++) {
            $xorsum ^= ($last = hash_hmac($algorithm, $last, $password, true));
        }
        $output .= $xorsum;
    }

    if($raw_output)
        return substr($output, 0, $key_length);
    else
        return bin2hex(substr($output, 0, $key_length));
}
?>

আপনি আমাদেরকে সমাধান কোন ব্যবহার ছাড়া কোন ব্যবহার দিতে
মাইকেল

6

আমি সাধারণত SHA1 এবং লবণ ব্যবহারকারীর আইডি (অথবা কিছু অন্যান্য ব্যবহারকারী-নির্দিষ্ট তথ্যের টুকরো) দিয়ে ব্যবহার করি এবং কখনও কখনও আমি অতিরিক্ত ধ্রুবক লবন ব্যবহার করি (তাই আমার লবণের 2 অংশ রয়েছে)।

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


2
ধ্রুব নুন একটি দুর্দান্ত ধারণা নয় ... সম্ভবত মারাত্মক ত্রুটি নয় তবে এটি অযথা স্কিমকে দুর্বল করে।
ফ্র্যাঙ্কোডায়ায়ার

MD5 এবং SHA1 দ্রুত, তাই এটি একটি খারাপ ডায়া।
কোডসইনচওস

4

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

লবণের ধারণাটি হ্যাশিংয়ের ফলাফলগুলিকে ভারসাম্য থেকে দূরে ফেলেছে, তাই বলে। উদাহরণস্বরূপ, এটি খালি স্ট্রিংয়ের MD5- হ্যাশ হিসাবে পরিচিত d41d8cd98f00b204e9800998ecf8427e। সুতরাং, যদি যথেষ্ট পরিমাণে কোনও স্মৃতিযুক্ত কেউ সেই হ্যাশটি দেখতে পান এবং জেনে রাখেন যে এটি একটি খালি স্ট্রিংয়ের হ্যাশ। তবে যদি স্ট্রিংটি সল্ট হয় (তবে স্ট্রিং "দিয়ে বলুন MY_PERSONAL_SALT), 'খালি স্ট্রিং' (অর্থাৎ" MY_PERSONAL_SALT") এর হ্যাশ হয়ে যায় aeac2612626724592271634fb14d3ea6, তাই ব্যাকট্র্যাসের কাছে স্পষ্ট নয়। আমি যা বলতে চাইছি, তা না করে যে কোনও লবণ ব্যবহার করা ভাল । অতএব, কোন লবণ ব্যবহার করবেন তা জানার পক্ষে এটি খুব বেশি গুরুত্বপূর্ণ নয় ।

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

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


টার্গেট সাইটে খুব বেশি সংবেদনশীল কিছু থাকা উচিত নয় (এটি কোনও ব্যাংক নয়) তবে তারপরেও আমি এটি সুরক্ষিত করতাম।
লুস্কুবাল

1
ডাবল হ্যাশিং ফলাফলের স্থান হ্রাস করে না। পুনরাবৃত্ত হ্যাশিং অভিধান এবং ব্রেট ফোর্স আক্রমণের বিরুদ্ধে একটি সাধারণ নিয়ন্ত্রণ (এটি আপনার পাসওয়ার্ড চেকিংকে ধীরে ধীরে ধীরে ধীরে কমিয়ে দেয়) them
ফ্র্যাঙ্কোডোয়ার

2
@ ফ্র্যাঙ্কডোয়ার: হ্যাঁ, এটি খারাপ। sha1(sha1($foo))কার্যকরভাবে আউটপুট স্পেস হ্রাস করে, কারণ অভ্যন্তরীণ ফাংশনের যে কোনও সংঘর্ষ স্বয়ংক্রিয়ভাবে বাইরের দিকের সংঘর্ষে পরিণত হবে। অবক্ষয়টি লিনিয়ার, তবে এটি এখনও উদ্বেগের বিষয়। পুনরাবৃত্তির হ্যাশিং পদ্ধতিগুলি প্রতিটি রাউন্ডে ডেটা ফিড করে, যেমন $hash = sha1(sha1($salt . $password) . $salt)। তবে এটি এখনও ভাল নয় ... পিবিকেডিএফ 2 বা ব্র্যাক্রিপ্টের সাথে লেগে থাকুন ...
ircmaxell

-7

ঠিক আছে ফিটিতে আমাদের লবণের নুনের প্রয়োজন অবশ্যই স্বাদযুক্ত যাতে এটি তৈরি করা যায়

   /**
     * Generating string
     * @param $size
     * @return string
     */
    function Uniwur_string($size){
        $text = md5(uniqid(rand(), TRUE));
        RETURN substr($text, 0, $size);
    }

এছাড়াও sha512 ব্যবহার করে আমাদের আইশম দরকার যা এটি সর্বোত্তম এবং এটি পিএইচপিতে রয়েছে

   /**
     * Hashing string
     * @param $string
     * @return string
     */
    function hash($string){
        return hash('sha512', $string);
    }

সুতরাং এখন আমরা নিরাপদ পাসওয়ার্ড তৈরি করতে এই ফাংশনগুলি ব্যবহার করতে পারি

// generating unique password
$password = Uniwur_string(20); // or you can add manual password
// generating 32 character salt
$salt = Uniwur_string(32);
// now we can manipulate this informations

// hashin salt for safe
$hash_salt = hash($salt);
// hashing password
$hash_psw = hash($password.$hash_salt);

এখন আমাদের ডাটাবেসে আমাদের $ hash_psw ভেরিয়েবল মান এবং $ লবণের পরিবর্তনশীল সংরক্ষণ করতে হবে

এবং অনুমোদনের জন্য আমরা একই পদক্ষেপগুলি ব্যবহার করব ...

এটি আমাদের ক্লায়েন্টদের পাসওয়ার্ডগুলি নিরাপদ করার সর্বোত্তম উপায় ...

শেষ 2 টি পদক্ষেপের জন্য আপনি নিজের অ্যালগরিদম ব্যবহার করতে পারেন ... তবে আপনি যখন ব্যবহারকারীকে অনুমোদনের প্রয়োজন তখন ভবিষ্যতে আপনি এই হ্যাশ পাসওয়ার্ডটি তৈরি করতে পারবেন তা নিশ্চিত করুন ...


4
এই প্রশ্নটি পাসওয়ার্ডের জন্য হ্যাশ সম্পর্কে ছিল। sha512পাসওয়ার্ড সুরক্ষার জন্য 1 টি কার্যকর করা (এমনকি যদি নোনতা দেওয়া হয়) তবে এটি যথেষ্ট ভাল নয় বলে বিবেচিত হয়। (আরএনজি ক্রিপ্টোগ্রাফিকভাবে সুরক্ষিত নয়, সুতরাং এটি পাসওয়ার্ড তৈরির জন্য ব্যবহার করা ঝুঁকিপূর্ণ)।
লুস্কুবাল

2
আপনি কী করছেন তা আপনার কোনও ধারণা নেই। এই পোস্টে শীর্ষস্থানীয় উত্তরগুলি পড়ুন এবং আপনি দেখতে পাচ্ছেন কেন আপনার কোডটি কেবল অনিরাপদ নয়, তবে তা বোঝায় না।
ক্রিপ্টিক ツ

ঠিক আছে. আমার কোডটি নিরাপদ নয়। তাহলে আমাকে জানতে দিন কেন আপনি আপনার অ্যালগরিদমে ony sha256 ব্যবহার করছেন ??? আমি জানি যে sha512 সেরা এটি কেন ব্যবহার করবেন না ???
শালভসফট

1
@ শালভাসফট শ্যাঁ 1212 সাধারণ উদ্দেশ্যে হ্যাশিংয়ের জন্য বেশ ভাল, তবে পাসওয়ার্ড সুরক্ষার জন্য খুব নির্দিষ্ট বৈশিষ্ট্যযুক্ত হ্যাশগুলির প্রয়োজন হয় ( উদাহরণস্বরূপ, "ধীর হওয়া" আশ্চর্যরকম ভাল জিনিস , এবং sha512 বেশ দ্রুত)। কিছু লোক পাসওয়ার্ড হ্যাশিং ফাংশন তৈরি করতে sha512 কে বিল্ডিং ব্লক হিসাবে ব্যবহার করেছেন, তবে আজকাল প্রস্তাবিত পদ্ধতির "বিসিক্রিপ ব্যবহার করুন এবং স্ক্রিপ্টে নজর রাখুন"।
লুস্কুবাল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.