Password Hashing এবং Salting গাইড ও নোট

Database Tutorials - পিএইচপি মাইএসকিউএল আই (PHP MySQL) - Security এবং Best Practices
358

১. Password Hashing কী?

Password Hashing হলো একটি নিরাপত্তা পদ্ধতি যেখানে ব্যবহারকারীর পাসওয়ার্ডটি সরাসরি সঞ্চয় করার পরিবর্তে, তার একটি একমুখী এনক্রিপ্টেড (hashed) রূপ সঞ্চয় করা হয়। পাসওয়ার্ড হ্যাশিং সিস্টেমটির উদ্দেশ্য হলো পাসওয়ার্ডটি সহজে পুনরুদ্ধার করা না যায়, অর্থাৎ এটি একদম "one-way" প্রক্রিয়া। একবার পাসওয়ার্ড হ্যাশ হয়ে গেলে, সেটি পূর্বের অবস্থায় ফিরিয়ে আনা সম্ভব নয়।

যেহেতু পাসওয়ার্ডটি "হ্যাশ" করা থাকে, এটি সিস্টেমের নিরাপত্তা বাড়ায়, কারণ কেউ যদি ডেটাবেসে প্রবেশ করতে সক্ষমও হয়, তবুও পাসওয়ার্ডটি ফিরিয়ে নিতে পারবে না।

২. Salting কী?

Salting হলো একটি নিরাপত্তা প্রক্রিয়া যেখানে পাসওয়ার্ড হ্যাশ করার আগে একটি র্যান্ডম ভ্যালু (salt) যোগ করা হয়। এটি পাসওয়ার্ডের সাথে একত্রিত হয়ে নতুন একটি হ্যাশ তৈরি করে। স্যাল্টিংয়ের উদ্দেশ্য হলো একই পাসওয়ার্ডের জন্য বিভিন্ন হ্যাশ তৈরি করা, যাতে "rainbow tables" ব্যবহার করে সহজে পাসওয়ার্ড ভাঙ্গা না যায়।

প্রতিটি ব্যবহারকারীর জন্য একটি ইউনিক স্যাল্ট তৈরি করা হয়, যা সেই ব্যবহারকারীর পাসওয়ার্ডের সাথে যুক্ত করা হয়। এর ফলে একই পাসওয়ার্ডে বিভিন্ন ব্যবহারকারীর জন্য আলাদা হ্যাশ তৈরি হয়।


৩. PHP-এ Password Hashing এবং Salting

PHP-এ পাসওয়ার্ড হ্যাশিং এবং স্যাল্টিং করার জন্য বিল্ট-ইন ফাংশন রয়েছে। password_hash() এবং password_verify() হল সবচেয়ে জনপ্রিয় এবং নিরাপদ পদ্ধতি।

৩.১ password_hash() ফাংশন

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

সিনট্যাক্স:

$hashed_password = password_hash($password, PASSWORD_DEFAULT);

এখানে, $password হলো ব্যবহারকারীর পাসওয়ার্ড এবং PASSWORD_DEFAULT হলো হ্যাশিং অ্যালগরিদম (বর্তমানে bcrypt)।

উদাহরণ:

<?php
$password = "my_secure_password";
$hashed_password = password_hash($password, PASSWORD_DEFAULT);

echo $hashed_password; // হ্যাশ করা পাসওয়ার্ড
?>

password_hash() স্বয়ংক্রিয়ভাবে একটি ইউনিক স্যাল্ট তৈরি করে এবং সেটি পাসওয়ার্ডের সাথে মিশিয়ে হ্যাশ করে। এই পদ্ধতি অত্যন্ত নিরাপদ এবং সহজ।

৩.২ password_verify() ফাংশন

পাসওয়ার্ড হ্যাশিংয়ের পর, ব্যবহারকারীর প্রদত্ত পাসওয়ার্ড এবং ডাটাবেসে সঞ্চিত হ্যাশের সাথে তুলনা করতে password_verify() ফাংশন ব্যবহার করা হয়। এটি হ্যাশের সাথে পাসওয়ার্ড মিলিয়ে দেখে এবং সঠিক কিনা তা যাচাই করে।

সিনট্যাক্স:

if (password_verify($password, $hashed_password)) {
    echo "Password is correct.";
} else {
    echo "Invalid password.";
}

উদাহরণ:

<?php
// ডাটাবেস থেকে হ্যাশ পাওয়া যাবে এখানে
$stored_hashed_password = '$2y$10$BzX98xDHTwnzE9OwZ3wJKjNjlX.J8o.BM7xWlZSl3evNxbi/qfzfS'; // উদাহরণ হিসেবে

$password = "my_secure_password";

if (password_verify($password, $stored_hashed_password)) {
    echo "Password is correct.";
} else {
    echo "Invalid password.";
}
?>

এখানে, password_verify() ফাংশনটি প্রদত্ত পাসওয়ার্ড এবং সঞ্চিত হ্যাশ তুলনা করে যদি দুটি মেলে, তবে এটি true রিটার্ন করে।


৪. Salting with password_hash()

যেহেতু password_hash() স্বয়ংক্রিয়ভাবে একটি স্যাল্ট তৈরি করে এবং হ্যাশিংয়ের সময় এটি যোগ করে, আলাদা করে স্যাল্ট তৈরির প্রয়োজন হয় না। তবে যদি আপনি স্যাল্ট নিজে তৈরি করতে চান, তাও সম্ভব।

নিজস্ব স্যাল্ট তৈরি করে হ্যাশিং করা:

<?php
$password = "my_secure_password";

// স্যাল্ট তৈরি করা
$salt = bin2hex(random_bytes(32)); // 32 বাইটের স্যাল্ট

// স্যাল্টের সাথে পাসওয়ার্ড মিলিয়ে হ্যাশ করা
$hashed_password = password_hash($password . $salt, PASSWORD_DEFAULT);

echo "Hashed password: " . $hashed_password;
?>

এখানে, random_bytes() ফাংশন দিয়ে একটি র্যান্ডম স্যাল্ট তৈরি করা হয়েছে, যা 32 বাইটের একটি ইউনিক ভ্যালু হবে। এই স্যাল্টটি পাসওয়ার্ডের সাথে যোগ করে হ্যাশ করা হয়েছে।


৫. MySQL-এ Password হ্যাশ এবং স্যাল্ট সঞ্চয় করা

MySQL ডেটাবেসে পাসওয়ার্ড সঞ্চয় করতে, আপনি পাসওয়ার্ডটি হ্যাশ করার পর স্যাল্টের সাথে সঞ্চয় করতে পারেন। উদাহরণস্বরূপ, টেবিলের মধ্যে পাসওয়ার্ড হ্যাশ এবং স্যাল্ট দুটি আলাদাভাবে রাখা হয়।

টেবিল তৈরি:

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(255) NOT NULL,
    password_hash VARCHAR(255) NOT NULL,
    salt VARCHAR(255) NOT NULL
);

PHP-এ স্যাল্ট এবং হ্যাশ ইনসার্ট করা:

<?php
// ইউজারের পাসওয়ার্ড
$password = "my_secure_password";

// স্যাল্ট তৈরি করা
$salt = bin2hex(random_bytes(32));

// পাসওয়ার্ড হ্যাশ করা
$password_hash = password_hash($password . $salt, PASSWORD_DEFAULT);

// ডেটাবেসে সঞ্চয় করা
$conn = new mysqli("localhost", "root", "", "my_database");
$sql = "INSERT INTO users (username, password_hash, salt) VALUES (?, ?, ?)";
$stmt = $conn->prepare($sql);
$stmt->bind_param("sss", $username, $password_hash, $salt);
$stmt->execute();

$stmt->close();
$conn->close();
?>

এখানে, পাসওয়ার্ডের সাথে স্যাল্ট যোগ করে হ্যাশ করা হয়েছে এবং উভয় (হ্যাশ এবং স্যাল্ট) ডেটাবেসে ইনসার্ট করা হয়েছে।


৬. পাসওয়ার্ড হ্যাশিং এবং স্যাল্টিং এর সুবিধা

  1. নিরাপত্তা বৃদ্ধি: পাসওয়ার্ড হ্যাশিং এবং স্যাল্টিংয়ের মাধ্যমে ডেটাবেসে পাসওয়ার্ড সঞ্চয় করার সময়, প্রকৃত পাসওয়ার্ড কখনও সঞ্চিত থাকে না।
  2. Rainbow Table Attack থেকে সুরক্ষা: স্যাল্টিংয়ের মাধ্যমে, একই পাসওয়ার্ডের জন্য বিভিন্ন হ্যাশ তৈরি হয়, যা rainbow table attacks থেকে সুরক্ষা দেয়।
  3. একটি শক্তিশালী এবং সহজ পদ্ধতি: password_hash() এবং password_verify() ফাংশনগুলি সহজেই ব্যবহৃত হয় এবং অটোমেটিকালি স্যাল্ট এবং হ্যাশ তৈরি করে, যা নিরাপত্তা নিশ্চিত করে।

PHP-এ পাসওয়ার্ড হ্যাশিং এবং স্যাল্টিং ব্যবহার করা একটি অত্যন্ত গুরুত্বপূর্ণ নিরাপত্তা কৌশল। এটি ব্যবহারের মাধ্যমে, আপনি ব্যবহারকারীর পাসওয়ার্ডকে সুরক্ষিত রাখতে পারেন এবং ডেটাবেসে পাসওয়ার্ড সঞ্চয়ের সময় নিরাপত্তা ঝুঁকি কমাতে পারেন। PHP-এর বিল্ট-ইন password_hash() এবং password_verify() ফাংশনগুলি এই প্রক্রিয়াটি সহজ এবং নিরাপদ করে তোলে।

Content added By
Promotion

Are you sure to start over?

Loading...