ব্লা ফিশ দিয়ে কীভাবে দীর্ঘ পাসওয়ার্ডগুলি (> 72 টি অক্ষর) হ্যাশ করবেন to


91

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

72 অক্ষরের সীমা

ব্লোফিশ কেবল প্রবেশ করা পাসওয়ার্ডের প্রথম 72 টি অক্ষর বিবেচনা করুন:

<?php
$password = "Wow. This is a super secret and super, super long password. Let's add some special ch4r4ct3rs a#d everything is fine :)";
$hash = password_hash($password, PASSWORD_BCRYPT);
var_dump($password);

$input = substr($password, 0, 72);
var_dump($input);

var_dump(password_verify($input, $hash));
?>

আউটপুটটি হ'ল:

string(119) "Wow. This is a super secret and super, super long password. Let's add some special ch4r4ct3rs a#d everything is fine :)"
string(72) "Wow. This is a super secret and super, super long password. Let's add so"
bool(true)

আপনি কেবল প্রথম 72 টি অক্ষর দেখতে পাচ্ছেন। টুইটার তাদের পাসওয়ার্ডগুলি ( https://shouldichangemypassword.com/twitter-hacked.php ) সংরক্ষণ করতে ব্লো ফিশ ওরফে বিক্রিপ্ট ব্যবহার করছে এবং অনুমান করুন: আপনার টুইটারের পাসওয়ার্ডটি একটি দীর্ঘ পাসওয়ার্ডে 72 টিরও বেশি অক্ষরের সাথে পরিবর্তন করুন এবং আপনি নিজের অ্যাকাউন্টে লগইন করতে পারবেন শুধুমাত্র প্রথম 72 টি অক্ষর প্রবেশ করানো হচ্ছে।

ব্লোফিশ এবং মরিচ

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

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

সুতরাং আমি মনে করি পাসওয়ার্ডটি পেপারিং করা অন্তত কোনও খারাপ পছন্দ নয়।

পরামর্শ

72 টিরও বেশি অক্ষরের (এবং মরিচ) পাসওয়ার্ডের জন্য ব্লোফিশ হ্যাশ পাওয়ার আমার পরামর্শটি হ'ল:

<?php
$pepper = "foIwUVmkKGrGucNJMOkxkvcQ79iPNzP5OKlbIdGPCMTjJcDYnR";

// Generate Hash
$password = "Wow. This is a super secret and super, super long password. Let's add some special ch4r4ct3rs a#d everything is fine :)";
$password_peppered = hash_hmac('sha256', $password, $pepper);
$hash = password_hash($password_peppered, PASSWORD_BCRYPT);

// Check
$input = substr($password, 0, 72);
$input_peppered = hash_hmac('sha256', $input, $pepper);

var_dump(password_verify($input_peppered, $hash));
?>

এটি এই প্রশ্নের উপর ভিত্তি করে : password_verifyপ্রত্যাবর্তন false

প্রশ্নটি

নিরাপদ উপায় কি? প্রথমে একটি SHA-256 হ্যাশ পাচ্ছেন (যা characters৪ টি অক্ষর দেয়) বা পাসওয়ার্ডের প্রথম 72 টি অক্ষর বিবেচনা করুন?

পেশাদাররা

  • ব্যবহারকারী কেবল প্রথম 72 টি অক্ষর প্রবেশ করে লগইন করতে পারবেন না
  • চরিত্রের সীমা ছাড়িয়ে আপনি মরিচ যোগ করতে পারেন
  • Hash_hmac এর আউটপুটটিতে সম্ভবত পাসওয়ার্ডের চেয়ে বেশি এনট্রপি থাকবে
  • পাসওয়ার্ড দুটি পৃথক ফাংশন দ্বারা hashes হয়

কনস

  • ব্লো ফিশ হ্যাশ তৈরি করতে কেবলমাত্র 64 টি অক্ষর ব্যবহৃত হয়


সম্পাদনা 1: এই প্রশ্নটি ব্লো ফিশ / বিসিক্রিপ্টের কেবল পিএইচপি ইন্টিগ্রেশন যুক্ত করে। মন্তব্যের জন্য ধন্যবাদ!


4
ব্লোফিশই কেবল পাসওয়ার্ড কেটে দেয় না, লোকেরা আসলে এটির চেয়ে নিরাপদ ভাবার জন্য বিভ্রান্ত করে। এখানে 8-চরিত্রের সীমাটির
ডোক

4
72-চরিত্রের কাটাটি ব্লোফিশ অ্যালগরিদমের মৌলিক, বা কেবল পিএইচপি বাস্তবায়ন? আইআইআরসি ব্লোফিশ ব্যবহারকারীর পাসওয়ার্ডগুলি এনক্রিপ্ট করার জন্য (কমপক্ষে কিছু) নিক্সেও ব্যবহৃত হয়।
ডগলাস বি স্ট্যাপল

4
বিষয়টি ব্লকফিশের নয়, ব্লোফিশের সাথে। আমি পাইথন এবং বিক্রিপ্টের সাথে এই সমস্যাটি পুনরুত্পাদন করতে পারি।
ব্লেন্ডার

@ ব্লেন্ডার: আপনার মন্তব্য এবং এটিতে আপনার কাজের জন্য ধন্যবাদ। ব্লোফিশ এবং বিক্রিপ্টের জন্য আমি পিএইচপি-তে বিভিন্ন ফাংশন খুঁজে পাইনি এবং যদিও সেগুলি একই। তবে পিএইচপি তে কি আমার পক্ষে কোনও পার্থক্য তৈরি করে না? আমি স্ট্যান্ডার্ড পিএইচপি ফাংশন ব্যবহার করতে পছন্দ করব।
ফ্রেডরিক কামার

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

উত্তর:


137

এখানে সমস্যাটি মূলত এন্ট্রপির সমস্যা। সুতরাং আসুন সেখানে সন্ধান শুরু করুন:

অক্ষর প্রতি এনট্রপি

বাইট প্রতি এনট্রপির বিটের সংখ্যা হ'ল:

  • হেক্স অক্ষর
    • বিট: 4
    • মান: 16
    • এন্ট্রপি 72 চরগুলিতে: 288 বিট
  • আলফা-সংখ্যাসূচক
    • বিট: 6
    • মান: 62
    • এন্ট্রপি 72 চরগুলিতে: 432 বিট
  • "সাধারণ" চিহ্ন
    • বিট: 6.5
    • মান: 94
    • এন্ট্রপি 72 চরগুলিতে: 468 বিট
  • ফুল বাইটস
    • বিটস: 8
    • মান: 255
    • এন্ট্রপি 72 চরগুলিতে: 576 বিট

সুতরাং, আমরা কীভাবে আচরণ করব তা নির্ভর করে আমরা কী ধরণের অক্ষর আশা করি।

প্রথম সমস্যা

আপনার কোডের সাথে প্রথম সমস্যাটি হ'ল আপনার "মরিচ" হ্যাশ ধাপটি হেক্স অক্ষরগুলি আউটপুট করছে (যেহেতু চতুর্থ প্যারামিটারটি hash_hmac()সেট করা নেই)।

অতএব, আপনার মরিচটি হ্যাশ করে, আপনি কার্যকরভাবে পাসওয়ার্ডে প্রাপ্ত সর্বাধিক এনট্রপিটি 2 এর একটি ফ্যাক্টর দ্বারা (576 থেকে 288 সম্ভাব্য বিটগুলি) কাটাচ্ছেন ।

দ্বিতীয় সমস্যা

তবে sha256শুধুমাত্র 256প্রথম স্থানে এনট্রপির বিট সরবরাহ করে। সুতরাং আপনি কার্যকরভাবে একটি সম্ভাব্য 576 বিট কেটে 256 বিট করতে পারেন। আপনার হ্যাশ ধাপ * তাত্ক্ষণিক *, খুব সংজ্ঞা দিয়ে পাসওয়ার্ডে কমপক্ষে 50% সম্ভাব্য এনট্রপি হারাবে।

আপনি আংশিকভাবে এটিকে স্যুইচ SHA512করেই সমাধান করতে পারেন , যেখানে আপনি কেবল উপলব্ধ এনট্রপিকে প্রায় 12% কমাতে চাইবেন। তবে এটি এখনও একটি তাত্পর্যপূর্ণ নয়। যে 12% একটি ফ্যাক্টর দ্বারা অনুমতি সংখ্যা হ্রাস 1.8e19। এটি একটি বড় সংখ্যা ... এবং এটাই হ'ল এটি হ্রাস করে ...

অন্তর্নিহিত সমস্যা

অন্তর্নিহিত সমস্যাটি হ'ল এখানে types২ টি অক্ষরের উপরে তিন ধরণের পাসওয়ার্ড রয়েছে। এই স্টাইল সিস্টেমটি তাদের উপর যে প্রভাব ফেলেছে তা খুব আলাদা হবে:

দ্রষ্টব্য: এখান থেকে আমি ধরে নিচ্ছি যে আমরা একটি মরিচ সিস্টেমের সাথে তুলনা করছি যা SHA512কাঁচা আউটপুট (হেক্স নয়) ব্যবহার করে।

  • উচ্চ এনট্রপি এলোমেলো পাসওয়ার্ড

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

    এই গোষ্ঠীর জন্য, আপনার হ্যাশিং ফাংশনটি তাদের উপলভ্য এনট্রপিকে উল্লেখযোগ্যভাবে হ্রাস করবে bcrypt

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

  • মাঝারি এনট্রপি এলোমেলো পাসওয়ার্ড

    এই গোষ্ঠীটি সাধারণ চিহ্ন সহ পাসওয়ার্ড ব্যবহার করছে তবে উচ্চ বাইট বা নিয়ন্ত্রণের অক্ষর নেই। এগুলি আপনার টাইপযোগ্য পাসওয়ার্ড।

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

    আমাকে এটা আবার বলতে দাও। এই শ্রেণীর পাসওয়ার্ডগুলির জন্য, এনট্রপি চালিয়ে যাওয়ার আগে আপনি কেবলমাত্র অতিরিক্ত 6 টি অক্ষর সংরক্ষণ করতে পারেন।

  • নিম্ন এনট্রপি অ-র্যান্ডম পাসওয়ার্ড

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

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

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

বাস্তব জগতে ফিরে যাও

এই ধরণের এনট্রপি গণনাগুলি সত্যিকারের বিশ্বে সত্যিই বেশি কিছু যায় আসে না। কী গুরুত্বপূর্ণ তা এনট্রপি অনুমান করা। আক্রমণকারীরা যা করতে পারে তা প্রত্যক্ষভাবে এটি ঘটে। এটিই আপনি সর্বোচ্চ করতে চান to

এনট্রপি অনুমান করার ক্ষেত্রে যে সামান্য গবেষণা রয়েছে, সেখানে কিছু পয়েন্ট রয়েছে যা আমি উল্লেখ করতে চাই।

একসাথে 72 টি সঠিক অক্ষর এলোমেলোভাবে অনুমান করার সম্ভাবনাগুলি খুব কম। এই সংঘর্ষের চেয়ে আপনি 21 বার পাওয়ারবল লটারি জয়ের সম্ভাবনা বেশি ... আমরা যে সংখ্যার কথা বলছি তার মধ্যে এটি কত বড়।

তবে আমরা এটি পরিসংখ্যানগতভাবে হোঁচট খেতে পারি না। বাক্যাংশের ক্ষেত্রে প্রথম characters২ টি অক্ষর একই হওয়ার সম্ভাবনা এলোমেলো পাসওয়ার্ডের চেয়ে পুরো অনেক বেশি। তবে এটি এখনও তুচ্ছভাবে কম (আপনার চরিত্রের 2.3 বিটের উপর ভিত্তি করে 5 বার পাওয়ারবল লটারি জয়ের সম্ভাবনা বেশি))

ব্যবহারিকভাবে

ব্যবহারিকভাবে, এটি আসলে কিছু যায় আসে না। প্রথম 72 টি অক্ষরটি সঠিকভাবে অনুমান করার কারও সম্ভাবনা, যেখানে উত্তরোত্তররা উল্লেখযোগ্য পার্থক্য রাখে এটি এতটা চিন্তিত নয়। কেন?

ঠিক আছে, যাক আপনি একটি বাক্য গ্রহণ করছেন। যদি ব্যক্তি প্রথম 72 টি অক্ষর সঠিকভাবে পেতে পারে তবে সেগুলি সত্যিই ভাগ্যবান (সম্ভবত না), অথবা এটি একটি সাধারণ বাক্যাংশ। যদি এটি একটি সাধারণ বাক্যাংশ হয় তবে কেবলমাত্র এটি পরিবর্তন করতে হবে।

একটি উদাহরণ নেওয়া যাক। আসুন বাইবেলের একটি উদ্ধৃতি নিই (কেবল কারণ এটি দীর্ঘ পাঠের সাধারণ উত্স, অন্য কোনও কারণে নয়):

তোমরা প্রতিবেশীর বাড়ী লোভ করবে না। “তোমাদের প্রতিবেশীর স্ত্রী, তার চাকর বা দাসী, তার গরু বা গাধা বা কোনও প্রতিবেশীর সম্পত্তি লোভ করো না।

এটি 180 টি অক্ষর। 73rd চরিত্র gদ্বিতীয় neighbor's। যদি আপনি এটি অনুমান করে থাকেন তবে আপনি সম্ভবত থামছেন না nei, তবে বাকী আয়াতটি চালিয়ে যাচ্ছেন (যেহেতু পাসওয়ার্ডটি সম্ভবত ব্যবহার করা হতে পারে)। অতএব, আপনার "হ্যাশ" তেমন কিছু যোগ করেনি।

বিটিডাব্লু: আমি একদম বাইবেলের উক্তিটি ব্যবহারের পক্ষে পরামর্শ দিচ্ছি না। আসলে, ঠিক বিপরীত।

উপসংহার

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

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

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

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

এটি আমার কমপক্ষে 0.02 ডলার (অথবা সম্ভবত $ 0.02 এরও বেশি উপায়) ...

যতক্ষণ না "গোপন" গোলমরিচ ব্যবহার করছেন:

একটি হ্যাশ ফাংশনটি বিসিআরপিতে খাওয়ানোর জন্য আক্ষরিক কোনও গবেষণা নেই। সুতরাং, এটি একেবারেই অস্পষ্ট নয় যদি কোনও "পেপ্পার্ড" হ্যাশকে বিক্রিপটে খাওয়ানো কখনই অজানা দুর্বলতার কারণ হয়ে দাঁড়ায় (আমরা জানি যে hash1(hash2($value))এটি করা সংঘর্ষ প্রতিরোধের এবং প্রাক আক্রমণাত্মক আক্রমণগুলির চারপাশে উল্লেখযোগ্য দুর্বলতা প্রকাশ করতে পারে)।

আপনি ইতিমধ্যে একটি গোপন কী ("মরিচ") সংরক্ষণ করার কথা বিবেচনা করে বিবেচনা করছেন, কেন এটি ভালভাবে অধ্যয়ন এবং বোঝার উপায়ে ব্যবহার করবেন না? হ্যাশ সংরক্ষণের আগে কেন এনক্রিপ্ট করবেন না?

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

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

দ্রষ্টব্য: আপনি যদি এটি করা চয়ন করেন তবে একটি লাইব্রেরি ব্যবহার করুন। পিএইচপি-র জন্য, আমি জেন্ডার ফ্রেমওয়ার্ক 2 এর প্যাকেজটিকে দৃ strongly ়ভাবে প্রস্তাব দিই Zend\Crypt। এই বর্তমান সময়ে আমি কেবলমাত্র এটিই প্রস্তাব করব। এটি দৃ strongly়ভাবে পর্যালোচনা করা হয়েছে, এবং এটি আপনার জন্য সমস্ত সিদ্ধান্ত নেয় (যা খুব ভাল জিনিস) ...

কিছুটা এইরকম:

use Zend\Crypt\BlockCipher;

public function createHash($password) {
    $hash = password_hash($password, PASSWORD_BCRYPT, ["cost"=>$this->cost]);

    $blockCipher = BlockCipher::factory('mcrypt', array('algo' => 'aes'));
    $blockCipher->setKey($this->key);
    return $blockCipher->encrypt($hash);
}

public function verifyHash($password, $hash) {
    $blockCipher = BlockCipher::factory('mcrypt', array('algo' => 'aes'));
    $blockCipher->setKey($this->key);
    $hash = $blockCipher->decrypt($hash);

    return password_verify($password, $hash);
}

এবং এটি উপকারী কারণ আপনি সমস্ত অ্যালগরিদমগুলি এমনভাবে ব্যবহার করছেন যা ভালভাবে বোঝা যায় এবং ভালভাবে অধ্যয়ন করা হয় (তুলনামূলকভাবে অন্তত)। মনে রাখবেন:

যে কোনও ব্যক্তি, সবচেয়ে ক্লাসহীন অপেশাদার থেকে সেরা ক্রিপ্টোগ্রাফার পর্যন্ত, একটি অ্যালগরিদম তৈরি করতে পারে যা সে নিজেই ভেঙে দিতে পারে না।


6
এই বিস্তারিত উত্তরের জন্য আপনাকে অনেক ধন্যবাদ। এটি সত্যিই আমাকে সাহায্য করে!
ফ্রেডেরিক কামার 16'13

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

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

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

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

5

পেপারিং পাসওয়ার্ডগুলি অবশ্যই করা ভাল জিনিস, তবে কেন তা দেখা যাক।

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

তাহলে মরিচ আসলে কী সাহায্য করে? মরিচটি যতক্ষণ না গোপন থাকে, ততক্ষণ এটি অভিধানের আক্রমণ থেকে দুর্বল পাসওয়ার্ডগুলিকে সুরক্ষা দেয়। পাসওয়ার্ডটি 1234তখন এমন কিছু হয়ে উঠত 1234-p*deDIUZeRweretWy+.O। এই পাসওয়ার্ডটি কেবলমাত্র দীর্ঘ নয়, এটিতে বিশেষ অক্ষর রয়েছে এবং এটি কোনও অভিধানের অংশ হবে না।

এখন আমরা অনুমান করতে পারি যে আমাদের ব্যবহারকারীরা কী পাসওয়ার্ড ব্যবহার করবে, সম্ভবত আরও বেশি ব্যবহারকারী দুর্বল পাসওয়ার্ড প্রবেশ করবে, কারণ users৪-72২ অক্ষরের মধ্যে পাসওয়ার্ড ব্যবহারকারীরাই আছেন (আসলে এটি খুব বিরল হবে)।

আর একটি বিষয় হ'ল ব্রুট-জোর করার সীমা। Sha256 হ্যাশ ফাংশনটি 256 বিট আউটপুট বা 1.2E77 সংমিশ্রণগুলি ফিরিয়ে দেবে, এটি জিপিইউর জন্য এমনকি ব্রুট-ফোর্সিংয়ের পক্ষে অনেক বেশি (যদি আমি সঠিকভাবে গণনা করি তবে এটি একটি জিপিইউতে প্রায় 2E61 বছর প্রয়োজন হবে 2013)। সুতরাং আমরা মরিচ প্রয়োগ করার ক্ষেত্রে কোনও প্রকৃত অসুবিধা পাই না। হ্যাশ-মানগুলি নিয়মতান্ত্রিক না হওয়ার কারণে আপনি সাধারণ নিদর্শনগুলির সাথে ব্রুট-জোর করা গতি করতে পারবেন না।

পিএস যতদূর আমি জানি, 72 অক্ষরের সীমা বিসিক্রিপ্টের নিজেই অ্যালগরিদমের সাথে নির্দিষ্ট। আমি যে উত্তরটি পেয়েছি তা হ'ল এটি

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


আপনার পিপিএস সম্পর্কিত, আমি কেবল এটিই বলতে পারি: হ্যাঁ, তিনি কাটা না থাকা পাসওয়ার্ডটি কাটা কাটা পাসওয়ার্ডটি যাচাই করতে পারবেন এবং এখনও পেতে পারেন true। এই প্রশ্নটি এটাই। : একবার দেখে নিজেকে আছে viper-7.com/RLKFnB
Sliq

@ পানিক - সমস্যাটি বিসিক্রিপ্ট হ্যাশের গণনা নয়, এটি আগে এইচএমএসি। এসএএএ হ্যাশ তৈরির জন্য, ওপি সম্পূর্ণ দৈর্ঘ্যের পাসওয়ার্ড ব্যবহার করে এবং ফলাফলটি বিসিক্রিপ্টের জন্য ইনপুট হিসাবে ব্যবহার করে। যাচাইকরণের জন্য, তিনি এসএইচএ হ্যাশ গণনা করার আগে পাসওয়ার্ডটি কেটে ফেলেন, তারপরে বিসিক্রিপ্টের জন্য ইনপুট হিসাবে এই সম্পূর্ণ ভিন্ন ফলাফলটি ব্যবহার করে। এইচএমএসি যে কোনও দৈর্ঘ্যের ইনপুট গ্রহণ করে।
মার্টিনস্টোকেলি

2

Bcrypt ব্যয়বহুল ব্লোফিশ কী সেটআপ অ্যালগরিদমের উপর ভিত্তি করে একটি অ্যালগরিদম ব্যবহার করে।

Bcrypt এর জন্য প্রস্তাবিত 56 বাইট পাসওয়ার্ড সীমা (নাল টার্মিনেশন বাইট সহ) ব্লোফিশ কী এর 448 বিটের সীমা সম্পর্কিত। এই সীমা অতিক্রমকারী কোনও বাইট পুরোপুরি ফলাফলের হ্যাশে মিশ্রিত হয় না। Bcrypt পাসওয়ার্ডগুলিতে 72 বাইট পরম সীমাটি তাই কম প্রাসঙ্গিক, যখন আপনি সেই বাইটগুলি দ্বারা ফলাফলের হ্যাশের প্রকৃত প্রভাব বিবেচনা করেন।

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

অবশ্যই, পাসওয়ার্ড টেবিলটি লঙ্ঘন না হওয়ার ক্ষেত্রে, কেবলমাত্র হ্যাকারদের ব্যবহারকারীর অ্যাকাউন্ট লক করার আগে, ব্যবহারকারীর 55 বাইট পাসওয়ার্ড অনুমান করার জন্য আমাদের দশটি চেষ্টা করার অনুমতি দেওয়া উচিত;)

যদি আপনি 55 বাইটের চেয়ে দীর্ঘতর একটি পাসওয়ার্ড প্রাক-হ্যাশ করার সিদ্ধান্ত নেন, তবে আপনার SHA-384 ব্যবহার করা উচিত, কারণ এতে সীমা ছাড়িয়ে না গিয়ে বৃহত্তম আউটপুট রয়েছে।


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

ধন্যবাদ @ জাফ আপনি কি আমাকে এর একটি উদাহরণ দেখিয়ে দিতে সক্ষম? এটি আকর্ষণীয় লাগে।
ফিল

[ড্রাফ্ট নিস্টের বিশেষ প্রকাশনার 800-63 বি ডিজিটাল প্রমাণীকরণ নির্দেশিকা] ( পেজ.নিস্ট.gov/800-63-3/ sp800-63b.html ), 5.1.1.2। মুখস্থ গোপনীয় যাচাইকারীদের: যাচাইকারীদের স্বেচ্ছাসেবী (যেমন, পর্যায়ক্রমে) পরিবর্তন করার প্রয়োজন নেই । জিম ফেন্টন দ্বারা আরও ভাল পাসওয়ার্ড প্রয়োজনীয়তা দেখুন ।
zaph

4
জিনিসটি হ'ল প্রায়শই ব্যবহারকারীকে কোনও পাসওয়ার্ড পরিবর্তন করতে হয় সবচেয়ে খারাপ পাসওয়ার্ড পছন্দগুলি ফলে সুরক্ষা হ্রাস করে। ব্যবহারকারীর কাছে সীমিত পরিমাণে ভাল স্মরণীয় পাসওয়ার্ড রয়েছে এবং এগুলি শেষ হয়ে যায়, হয় হয় খারাপ পাসওয়ার্ড বেছে নেওয়া বা এটি পোস্টের নোটগুলিতে লিখে রাখা হয় কীবোর্ডের নীচে আটকে থাকা ইত্যাদি
zaph
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.