তথ্যের একটি আঙুলের ছাপ
একটি হ্যাশ ফাংশন যেকোনো ইনপুট (একটি শব্দ, একটি নথি, একটি 4 GB ভিডিও) নিয়ে তাকে ছোট, বাঁধা দৈর্ঘ্যের একটি স্ট্রিংয়ে বদলে দেয়, যাকে হ্যাশ, ডাইজেস্ট বা চেকসাম বলে। একই ইনপুট সবসময়ই একই হ্যাশ দেয়, আর ছোট্ট একটি বদলও একেবারে আলাদা একটি হ্যাশ দেয়:
| ইনপুট | SHA-256 হ্যাশ |
hello | 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 |
Hello | 185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969 |
hello! | ce06092fb948d9ffac7d1a376e404b26b7575bcc11ee05a4615fef4fec3a308b |
একটি বড় হাতের অক্ষর কিংবা একটি বিস্ময়চিহ্নই ফলের প্রতিটি অক্ষর বদলে দেয়। হ্যাশ বানান-এ নিজেই দেখে নিন।
একটি ভালো হ্যাশ ফাংশনকে কী ভালো করে
- নির্ধারিত: একই ইনপুট যেকোনো কম্পিউটারেই সবসময় একই হ্যাশ দেয়।
- একমুখো: হ্যাশ থেকে পিছিয়ে ইনপুটে ফেরা যায় না।
- সংঘর্ষ-রোধী: একই হ্যাশের দুটি আলাদা ইনপুট খুঁজে পাওয়া কাজে অসম্ভবই হওয়া উচিত।
- হিসাব করতে দ্রুত — চেকসামে তা কাজে দেয়, আর সেই কারণেই দ্রুত হ্যাশ পাসওয়ার্ডের জন্য ভুল (তা নিয়ে নিচে আরও)।
হ্যাশ করা এনক্রিপশন নয়
এনক্রিপশন দুমুখো: চাবি থাকলে আপনি আসলটি ফিরে পান। একটি হ্যাশের কোনো চাবি নেই আর তা উল্টে ফেরানো যায় না। তা কেবল কিছু মিলছে কি না দেখতে দেয়। Base64 আবার আলাদা: তা নিছক একটি এনকোডিং, আর যে কেউ তা ডিকোড করতে পারে।
চেনা অ্যালগরিদমগুলো
| অ্যালগরিদম | দৈর্ঘ্য | অবস্থা |
| MD5 | 128 বিট (32 হেক্স অক্ষর) | 2004 সাল থেকে ভাঙা; কেবল ঘটনাক্রমে নষ্ট হওয়া ধরতেই চলে |
| SHA-1 | 160 বিট (40 হেক্স অক্ষর) | ভাঙা: প্রথম সত্যিকারের সংঘর্ষ প্রকাশ পায় 2017 সালে |
| SHA-256 | 256 বিট (64 হেক্স অক্ষর) | নিরাপদ; আজকের আদর্শ বাছাই |
| SHA-512 | 512 বিট (128 হেক্স অক্ষর) | নিরাপদ; 64-বিট কম্পিউটারে প্রায়ই SHA-256-র চেয়ে দ্রুত |
প্রত্যেকটিতে hello শব্দটি এই রকম:
- MD5:
5d41402abc4b2a76b9719d911017c592 - SHA-1:
aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d - SHA-256:
2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
MD5 আর SHA-1-এর বেলায় “ভাঙা” মানে কী
MD5 আর SHA-1-এর জন্য গবেষকেরা জেনেবুঝে একই হ্যাশের দুটি আলাদা ফাইল বানিয়ে ফেলতে পারেন। একজন আক্রমণকারী তা কাজে লাগিয়ে একটি নিরীহ ফাইলের জায়গায় একই চেকসামের একটি ক্ষতিকর ফাইল বসিয়ে দিতে পারেন, কিংবা একটি সই-করা নথি জাল করতে পারেন। দুটিই এই অর্থে ভাঙা নয় যে সেগুলো উল্টে ফেরানো যায়, আর এলোমেলোভাবে নষ্ট হলে হ্যাশ এখনো বদলে যায়, তাই একটি MD5 চেকসাম এখনো মাঝপথে ভেঙে পড়া একটি নামানো ফাইল ধরে ফেলে। সে কেবল এটুকুই প্রমাণ করতে পারে না যে ফাইলটিতে কেউ হাত দেয়নি।
SHA-256 আর SHA-512 পড়ে SHA-2 পরিবারে, যা প্রকাশ পায় 2001 সালে, আর তাদের ওপরে কাজে লাগার মতো কোনো আক্রমণ জানা নেই। 2015 সালে মানদণ্ড হওয়া SHA-3 একটি আলাদা নকশা, যা বিকল্প হিসেবে রাখা।
হ্যাশ কোথায় কাজে লাগে
- নামানো ফাইল পরখ করা: নির্মাতারা তাঁদের ফাইলের SHA-256 প্রকাশ করেন; আপনারটি মিলে গেলে তা হুবহু একই। দেখুন একটি চেকসাম কীভাবে যাচাই করবেন।
- ডিজিটাল সই আর HTTPS সার্টিফিকেট: নথি বা সার্টিফিকেটটির হ্যাশ নেওয়া হয়, আর ওই হ্যাশেই সই করা হয়।
- Git: প্রতিটি কমিট আর ফাইল তার হ্যাশেই চেনা যায়। Git অনেকদিন SHA-1 ব্যবহার করেছে আর এখন SHA-256-র সমর্থনও জুড়েছে।
- বিটকয়েন আর অন্য ব্লকচেইন: ব্লকগুলো SHA-256 দিয়ে একটির সঙ্গে আরেকটি শিকলে বাঁধা।
- একই ফাইলের অনুলিপি খোঁজা: একই SHA-256-র দুটি ফাইল আসলে একই ফাইল।
হ্যাশ আর পাসওয়ার্ড
ওয়েবসাইটের কখনোই আপনার পাসওয়ার্ড জমা রাখা উচিত নয়, কেবল তার একটি হ্যাশ; আপনি লগইন করলে তারা আপনার লেখাটির হ্যাশ নিয়ে মিলিয়ে দেখে। তবে এখানে SHA-256 ভুল হাতিয়ার: তা এতই দ্রুত যে ফাঁস-হওয়া একটি ডেটাবেস হাতে পাওয়া আক্রমণকারী সেকেন্ডে শত কোটি আন্দাজ বসিয়ে দেখতে পারেন। পাসওয়ার্ডের জন্য লাগে এই কাজের জন্যই বানানো ধীর, লবণ-মেশানো হ্যাশিং, যেমন bcrypt, scrypt কিংবা Argon2। লবণ হলো হ্যাশ করার আগে প্রতিটি পাসওয়ার্ডের সঙ্গে জুড়ে দেওয়া একটি এলোমেলো মান, যাতে একই পাসওয়ার্ডের দুজন মানুষ আলাদা হ্যাশ পান।
নিজেই দেখে নিন
হ্যাশ বানান যেকোনো লেখা বা ফাইলের MD5, SHA-1, SHA-256, SHA-384 আর SHA-512 একসঙ্গেই আপনার ব্রাউজারে বের করে দেয়, আর প্রকাশিত একটি চেকসামের সঙ্গে সেগুলো মিলিয়েও দেখতে পারে।