হ্যাশ ও এনক্রিপশন কি এবং কোনটা কি কাজে লাগে?

বিভাগ: জানা-অজানা


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

প্রথমে জেনে নিই হ্যাশ (Hash) ও এনক্রিপশন (Encryption) হল ক্রিপ্টোগ্রাফী (cryptography) এর দু'টি বিষয়। হ্যাশ ও এনক্রিপশন দু'টোর প্রয়োগক্ষেত্র ও প্রসেস ভিন্ন। কঠিন হয়ে যাচ্ছে? একটু সহজ করে বলি-

হ্যাশ

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

হ্যাশিং পদ্ধতি ব্যবহার করে কোন ডাটাকে একবার হ্যাশ করে পরিবর্তন করা হলে তা আর মূল ডাটাতে রুপান্তর করা সম্ভব হয় না। কারণ হ্যাশ ফাংশন ব্যবহার করে আপনি যত বড় বা ছোট ইনপুকে হ্যাশ করেন না কেন এটি সবসময় Fixed-length signature তৈরী করে। md5 অ্যালগরিদম ব্যবহার করলে আপনি যে কোন ইনপুটের জন্য 32 ক্যারেক্টার আউটপুট পাবেন, sha256 ব্যবহার করলে 64 ক্যারেক্টার আউটপুট পাবেন। উদাহারণ দিয়ে বলি-

hasing-process.png

1 কে md5 ব্যবহার করে যদি হ্যাশ করলে আউটপুন হবে c4ca4238a0b923820dcc509a6f75849b যেদি ৩২ ক্যারেক্টারের একটি স্টিং।
12345 কে md5 দিয়ে হ্যাশ করলেও ৩২ ক্যারেক্টারের আউটপুট হবে 827ccb0eea8a706c4c34a16891f84e7b
I love Bangladesh কে md5 দিয়ে হ্যাশ করলেও ৩২ ক্যারেক্টারের আউটপুট হবে 73f077f68d709f170eafb8b347be3932
আপনিও টেস্ট করে দেখতে পারেন এইখান থেকে http://www.sha1-online.com/


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

এনক্রিপশন (Encryption)

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

হ্যাশ-এনক্রিপশন কোনটি কেন ও কখন ব্যবহার করবেন

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

 


এই রকম আরো পোষ্ট