হ্যাশিং বলতে ভেরিয়েবল সাইজের ইনপুট থেকে একটি ফিক্সড সাইজ আউটপুট তৈরি করার প্রক্রিয়াকে বোঝায়। এটি হ্যাশ ফাংশন (হ্যাশিং অ্যালগরিদম হিসেবে বাস্তবায়িত) হিসেবে পরিচিত গাণিতিক সূত্র ব্যবহারের মাধ্যমে করা হয়।
সকল হ্যাশ ফাংশন ক্রিপ্টোগ্রাফি ব্যবহার না করলেও ক্রিপ্টোকারেন্সির মূলে ক্রিপ্টোগ্রাফিক হ্যাশ বলে পরিচিত ফাংশনগুলোই থাকে। এগুলোর কল্যাণে ব্লকচেইন ও অন্যান্য ডিস্ট্রবিউটেড সিস্টেমগুলো ডেটার অখণ্ডতা ও সুরক্ষার উল্লেখযোগ্য স্তর অর্জন করতে পারে।
প্রচলিত ও ক্রিপ্টোগ্রাফিক হ্যাশ ফাংশন দুটোই ধ্রুব। ধ্রুব হওয়ার অর্থ হলো ইনপুট যতক্ষণ পরিবর্তন না হবে, হ্যাশিং অ্যালগরিদম সবসময় একই আউটপুট (ডাইজেস্ট বা হ্যাশ নামেও পরিচিত) তৈরি করবে।
সাধারণত, ক্রিপ্টোকারেন্সির হ্যাশিং অ্যালগরিদমগুলো একমুখী ফাংশন হিসেবে ডিজাইন করা হয়, যার অর্থ কম্পিউটিংয়ের বিপুল পরিমাণ সময় ও রিসোর্স ছাড়া সহজে রিভার্ট করা যায় না। অন্য কথায়, ইনপুট থেকে আউটপুট তৈরি করা বেশ সহজ, কিন্তু বিপরীত দিকে যাওয়া (শুধুমাত্র আউটপুট থেকে ইনপুট তৈরি করা) তুলনামূলকভাবে কঠিন। সাধারণভাবে বলতে গেলে, ইনপুট খুঁজে পাওয়া যতটা কঠিন হবে, হ্যাশিং অ্যালগরিদমকে তত বেশি নিরাপদ বলে মনে করা হয়।
কোনো হ্যাশ ফাংশন কিভাবে কাজ করে?
ভিন্ন ভিন্ন হ্যাশ ফাংশন ভিন্ন ভিন্ন আকারের আউটপুট তৈরি করবে, কিন্তু প্রতিটি হ্যাশিং অ্যালগরিদমের জন্য সম্ভাব্য আউটপুটের আকার সবসময় ধ্রুবক থাকে। উদাহরণস্বরূপ, SHA-256 অ্যালগরিদম শুধুমাত্র 256 বিটের আউটপুট তৈরি করতে পারে, আর SHA-1 সর্বদা একটি 160-বিট ডাইজেস্ট তৈরি করবে।
ব্যাখ্যার জন্য চলুন SHA-256 হ্যাশিং অ্যালগরিদমে (বিটকয়েনে ব্যবহৃত) "Binance" এবং "binance" শব্দগুলো রান করে দেখি।
লক্ষ্য করবেন যে, একটি সামান্য পরিবর্তন (প্রথম অক্ষর ছোট হাতের করা) সম্পূর্ণ ভিন্ন হ্যাশ ভ্যালু তৈরি করেছে। কিন্তু আমরা SHA-256 ব্যবহার করায় আউটপুটগুলোর সর্বদা 256-বিটের (বা 64 ক্যারেক্টারের) একটি নির্দিষ্ট আকার থাকবে - ইনপুটের আকার যাই হোন না কেন। এছাড়াও, আমরা অ্যালগরিদমে দুটি শব্দ যতবার চালাই না কেন, দুটি আউটপুট একই থাকবে।
বিপরীতভাবে, যদি আমরা SHA-1 হ্যাশিং অ্যালগরিদমের মাধ্যমে একই ইনপুট চালাই, তাহলে আমাদের নিম্নলিখিত ফলাফল দেখাবে:
SHA মানে সিকিউর হ্যাশ অ্যালগরিদম। এটি ক্রিপ্টোগ্রাফিক হ্যাশ ফাংশনগুলোর একটি সেটকে বোঝায় যেখানে SHA-2 এবং SHA-3 গ্রুপগুলো SHA-0 এবং SHA-1 অ্যালগরিদমগুলো রয়েছে। SHA-512 ও অন্যান্য ভেরিয়েন্টসহ SHA-256 হল SHA-2 গ্রুপের অংশ। বর্তমানে, শুধুমাত্র SHA-2 এবং SHA-3 গ্রুপগুলোকে নিরাপদ বলে মনে করা হয়।
এগুলো কেন গুরুত্বপূর্ণ?
প্রচলিত হ্যাশ ফাংশনগুলোতে ডাটাবেস লুকআপ, বড় ফাইল বিশ্লেষণ এবং ডেটা ম্যানেজমেন্টসহ বিস্তৃত ব্যবহার ক্ষেত্র রয়েছে। অন্যদিকে, ক্রিপ্টোগ্রাফিক হ্যাশ ফাংশনগুলো ব্যাপকভাবে তথ্য-নিরাপত্তা অ্যাপ্লিকেশনে ব্যবহৃত হয়, যেমন মেসেজের অথেন্টিকেশন ও ডিজিটাল ফিঙ্গারপ্রিন্টিং। বিটকয়েনের ক্ষেত্রে, ক্রিপ্টোগ্রাফিক হ্যাশ ফাংশনগুলো মাইনিং প্রক্রিয়ার একটি অপরিহার্য অংশ এবং নতুন এড্রেস ও কী তৈরিতে ভূমিকা পালন করে।
হ্যাশিংয়ের প্রকৃত শক্তি উন্মোচিত হয় বিপুল পরিমাণে তথ্য নিয়ে কাজ করার সময়। যেমন, কেউ একটি হ্যাশ ফাংশনের মাধ্যমে একটি বড় ফাইল বা ডেটাসেট চালিয়ে ডেটার সঠিকতা ও অখণ্ডতা দ্রুত যাচাই করতে এর আউটপুট ব্যবহার করতে পারে। হ্যাশ ফাংশনগুলোর ধ্রুব প্রকৃতির কারণে এটি সম্ভব: ইনপুট সর্বদা একটি সরলীকৃত, সংক্ষেপিত আউটপুট (হ্যাশ) দিবে। এই কৌশলের কারণে প্রচুর পরিমাণ ডেটা সঞ্চয় ও "মনে রাখার" প্রয়োজনীয়তা আর থাকে না।
হ্যাশিং ব্লকচেইন প্রযুক্তির প্রেক্ষাপটে বিশেষভাবে কার্যকর। বিটকয়েন ব্লকচেইনের বেশ কিছু কার্যক্রম রয়েছে যার মধ্যে হ্যাশিং জড়িত, অধিকাংশই মাইনিং প্রক্রিয়ার মধ্যে। প্রকৃতপক্ষে, প্রায় সকল ক্রিপ্টোকারেন্সি প্রোটোকল লেনদেনের গ্রুপকে সযুক্ত করতে ও ঘনীভূত করে ব্লকে পরিণত করতে এবং প্রতিটি ব্লকের মধ্যে ক্রিপ্টোগ্রাফিক সংযোগ তৈরি করতে হ্যাশিংয়ের উপর নির্ভর করে, যা কার্যত একটি ব্লকচেইন তৈরি করে।
ক্রিপ্টোগ্রাফিক হ্যাশ ফাংশন
ক্রিপ্টোগ্রাফিক কৌশল ডেপ্লয় করা একটি হ্যাশ ফাংশনকে একটি ক্রিপ্টোগ্রাফিক হ্যাশ ফাংশন হিসেবে সংজ্ঞায়িত করা যেতে পারে। সাধারণভাবে, ক্রিপ্টোগ্রাফিক হ্যাশ ফাংশন ভাঙ্গার জন্য অসংখ্য ব্রুট-ফোর্স প্রচেষ্টার প্রয়োজন হয়। কোনো ক্রিপ্টোগ্রাফিক হ্যাশ ফাংশনকে "রিভার্ট" করার জন্য আউটপুট তৈরি না হওয়া পর্যন্ত তাদের ট্রায়াল ও ত্রুটির মধ্যে দিয়ে গিয়ে ইনপুটটি কী ছিল তা অনুমান করতে হবে। তবে, বিভিন্ন ইনপুট একই আউটপুট তৈরি করার সম্ভাবনাও রয়েছে, যে ক্ষেত্রে একটি "কলিশন" ঘটে।
প্রযুক্তিগতভাবে, কোনো ক্রিপ্টোগ্রাফিক হ্যাশ ফাংশনকে কার্যকরভাবে সুরক্ষিত বলে বিবেচনা করার জন্য তিনটি বৈশিষ্ট্য অনুসরণ করতে হবে। আমরা সেগুলোকে কলিশন রেজিস্ট্যান্স, প্রিইমেজ রেজিস্ট্যান্স ও দ্বিতীয় প্রিইমেজ রেজিস্ট্যান্স হিসেবে বর্ণনা করতে পারি।
প্রতিটি বৈশিষ্ট্য নিয়ে আলোচনা করার আগে, আসুন তিনটি ছোট বাক্যে তাদের যুক্তি সংক্ষেপে উল্লেখ করা যাক।
কলিশন রেজিস্ট্যান্স : আউটপুট হিসেবে একই হ্যাশ উৎপন্ন করে এমন দুটি স্বতন্ত্র ইনপুট খুঁজে পাওয়া প্রায় অসম্ভব।
প্রিইমেজ রেজিস্ট্যান্স: হ্যাশ ফাংশনটি "রিভার্ট" করা প্রায় অসম্ভব (প্রদত্ত আউটপুট থেকে ইনপুট খুঁজুন)।
দ্বিতীয়-প্রি-ইমেজ রেজিস্ট্যান্স: নির্দিষ্ট ইনপুটের সাথে কলিশন হয় এমন কোনো দ্বিতীয় ইনপুট খুঁজে পাওয়া প্রায় অসম্ভব।
কলিশন রেজিস্ট্যান্স
যেমনটি উল্লেখ করা হয়েছে, বিভিন্ন ইনপুট একই হ্যাশ তৈরি করলে কলিশন ঘটে। সুতরাং, কেউ কলিশন খুঁজে না পাওয়া পর্যন্ত কোনো হ্যাশ ফাংশন কলিশন-রেজিস্ট্যান্ট হিসেবে বিবেচিত হয়। মনে রাখবেন যে, কোনো হ্যাশ ফাংশনের জন্য কলিশন সবসময়ই থাকবে কারণ সম্ভাব্য ইনপুট অসীম, আর সম্ভাব্য আউটপুট সসীম।
আরেকভাবে বললে, কোনো হ্যাশ ফাংশন কলিশন-রেজিস্ট্যান্ট হয় যখন কলিশন খুঁজে পাওয়ার সম্ভাবনা এতটাই কম যে এর জন্য লক্ষ লক্ষ বছরের গণনা প্রয়োজন হবে। সুতরাং কোনো কলিশন-ফ্রি হ্যাশ ফাংশন না থাকলেও কিছু কিছু রেজিস্ট্যান্ট হিসেবে বিবেচিত হওয়ার মতো যথেষ্ট শক্তিশালী (যেমন, SHA-256)।
বিভিন্ন SHA অ্যালগরিদমের মধ্যে, SHA-0 এবং SHA-1 গ্রুপগুলো আর সুরক্ষিত নয় কারণ কলিশন পাওয়া গেছে। বর্তমানে, SHA-2 এবং SHA-3 গ্রুপগুলো কলিশনের জন্য রেজিস্ট্যান্ট বলে মনে করা হয়।
প্রিইমেজ রেজিস্ট্যান্স
প্রিইমেজ রেজিস্ট্যান্সের বৈশিষ্ট্য একমুখী ফাংশনের ধারণার সাথে সম্পর্কিত। একটি হ্যাশ ফাংশন প্রিইমেজ-রেজিস্ট্যান্ট হিসেবে বিবেচিত হয় যখন কোনো নির্দিষ্ট আউটপুট তৈরি করা ইনপুট খুঁজে পাওয়ার সম্ভাবনা খুব কম থাকে।
লক্ষ্য করুন যে, এই বৈশিষ্ট্যটি আগেরটির থেকে আলাদা কারণ একজন আক্রমণকারী একটি প্রদত্ত আউটপুট দেখে ইনপুটটি কী ছিল তা অনুমান করার চেষ্টা করবে। অন্যদিকে কলিশন ঘটে যখন কেউ দুটি ভিন্ন ইনপুট খুঁজে পায় যা একই আউটপুট তৈরি করে, কোন ইনপুট ব্যবহার করা হয়েছে তা এখানে বিবেচ্য নয়।
প্রিইমেজ রেজিস্ট্যান্সের বৈশিষ্ট্য ডেটা সুরক্ষিত করার জন্য মূল্যবান কারণ কোনো বার্তার একটি সাধারণ হ্যাশ তথ্য প্রকাশ করার কোনো প্রয়োজন ছাড়াই তার সত্যতা প্রমাণ করতে পারে। বাস্তবে, অনেক পরিষেবা প্রদানকারী ও ওয়েব অ্যাপ্লিকেশন প্লেইন টেক্সটে থাকা পাসওয়ার্ডের পরিবর্তে পাসওয়ার্ড থেকে তৈরি হ্যাশ স্টোর ও ব্যবহার করে।
দ্বিতীয়-প্রিইমেজ রেজিস্ট্যান্স
সহজভাবে বললে, আমরা বলতে পারি যে দ্বিতীয়-প্রিইমেজ রেজিস্ট্যান্সের অবস্থা অন্য দুটি বৈশিষ্ট্যের মধ্যে কোথাও। কোনো দ্বিতীয়-প্রিইমেজ আক্রমণ ঘটে যখন কেউ কোনো নির্দিষ্ট ইনপুট খুঁজে পেতে সক্ষম হয় যা অন্য ইনপুটের একই আউটপুট তৈরি করে যা তারা ইতোমধ্যেই জানে।
অন্য কথায়, একটি দ্বিতীয়-প্রিইমেজ অ্যাটাকে কলিশন খুঁজে পাওয়া যায়, কিন্তু একই হ্যাশ তৈরি করে এমন দুটি র্যান্ডম ইনপুট অনুসন্ধান করার পরিবর্তে, তারা এমন একটি ইনপুটের অনুসন্ধান করে যা অন্য একটি নির্দিষ্ট ইনপুটের তৈরি একই হ্যাশ তৈরি করে।
অতএব, কলিশন রেজিস্ট্যান্ট যেকোনো হ্যাশ ফাংশনই দ্বিতীয়-প্রিইমেজ আক্রমণের ক্ষেত্রেও রেজিস্ট্যান্ট, কারণ পরবর্তীটি সর্বদা কলিশনকে বোঝায়। তবে, কেউ তবুও কলিশন-রেজিস্ট্যান্ট ফাংশনে একটি প্রিইমেজ আক্রমণ করতে পারে কারণ এটি একটি একক আউটপুট থেকে একটি একক ইনপুট খুঁজে বের করে।
মাইনিং
বিটকয়েন মাইনিংয়ের অনেকগুলো ধাপ রয়েছে যেখানে হ্যাশ ফাংশন জড়িত, যেমন ব্যালেন্স চেক করা, লেনদেনের ইনপুট ও আউটপুট লিঙ্ক করা এবং মার্কেল ট্রি গঠনের জন্য একটি ব্লকের মধ্যে লেনদেন হ্যাশ করা। কিন্তু বিটকয়েন ব্লকচেইন সুরক্ষিত হওয়ার অন্যতম প্রধান কারণ হলো যে পরবর্তী ব্লকের জন্য একটি বৈধ সমাধান খুঁজে বের করতে হলে মাইনারদেরকে অসংখ্য হ্যাশিং অপারেশন সম্পাদন করতে হয়।
বিশেষভাবে, কোনো মাইনারকে তার ক্যান্ডেডেট ব্লকের জন্য একটি হ্যাশ ভ্যালু তৈরি করার সময় বিভিন্ন ইনপুট পরখ করতে হয়। সংক্ষেপে, সে শুধুমাত্র তার ব্লক যাচাই করতে পারবে যদি সে এমন কোনো আউটপুট হ্যাশ তৈরি করে যা একটি নির্দিষ্ট সংখ্যক শূন্য দিয়ে শুরু হয়। শূন্যের সংখ্যাই মাইনিং জটিলতা নির্ধারণ করে এবং এটি নেটওয়ার্কের নিয়োজিত হ্যাশ হার অনুসারে পরিবর্তিত হয়।
এই ক্ষেত্রে হ্যাশ রেট দিয়ে বিটকয়েন মাইনিংয়ে কত কম্পিউটার শক্তি বিনিয়োগ করা হচ্ছে তা বোঝায়। নেটওয়ার্কের হ্যাশ রেট বেড়ে গেলে, বিটকয়েন প্রোটোকল স্বয়ংক্রিয়ভাবে মাইনিং জটিলতা সমন্বয় করবে যাতে কোনো ব্লক মাইনিংয়ের জন্য প্রয়োজনীয় গড় সময় 10 মিনিটের কাছাকাছি থাকে। বিপরীতে, যদি বেশ কিছু মাইনার মাইনিং বন্ধ করার সিদ্ধান্ত নেয় যার ফলে হ্যাশ হার উল্লেখযোগ্যভাবে কমে যায়, তাহলে মাইনিং জটিলতা সমন্বয় করা হবে যা মাইনিংকে সহজ করে দেবে (গড় ব্লকের সময় 10 মিনিটে ফিরে না আসা পর্যন্ত)।
মনে রাখবেন যে, মাইনারদের কলিশন খুঁজে বের করতে হবে না কারণ একাধিক হ্যাশ রয়েছে যা তারা একটি বৈধ আউটপুট (নির্দিষ্ট সংখ্যক শূন্য থেকে শুরু করে) হিসেবে তৈরি করতে পারে। অর্থাৎ একটি নির্দিষ্ট ব্লকের জন্য বেশ কয়েকটি সম্ভাব্য সমাধান রয়েছে এবং মাইনাদেরকে কেবল তাদের মধ্যে একটি খুঁজে বের করতে হবে - মাইনিং জটিলতার কারণে নির্ধারিত সীমা অনুযায়ী।
যেহেতু বিটকয়েন মাইনিং একটি ব্যয়বহুল কাজ, মাইনিং সিস্টেমের সাথে প্রতারণা করার কোন কারণ নেই কারণ এটি উল্লেখযোগ্য আর্থিক লোকসান করবে। যত বেশি মাইনার একটি ব্লকচেইনে যোগদান করবে, এটি তত বড় এবং শক্তিশালী হবে।
শেষ কথা
কোনো সন্দেহ নেই যে হ্যাশ ফাংশনগুলো কম্পিউটার বিজ্ঞানের অপরিহার্য ট্যুল, বিশেষ করে যখন বিপুল পরিমাণ ডেটা নিয়ে কাজ হয়। ক্রিপ্টোগ্রাফির সাথে একত্রিত হলে, হ্যাশিং অ্যালগরিদমগুলো বেশ বহুমুখী হতে পারে যা বিভিন্ন উপায়ে নিরাপত্তা ও অ্যালগরিদম দেয়। সে কারণে, ক্রিপ্টোগ্রাফিক হ্যাশ ফাংশনগুলো প্রায় সকল ক্রিপ্টোকারেন্সি নেটওয়ার্কের জন্য অত্যাবশ্যক, তাই তাদের বৈশিষ্ট্য ও কাজের প্রক্রিয়া বোঝা অবশ্যই ব্লকচেইন প্রযুক্তিতে আগ্রহী যে কারও জন্য সহায়ক হবে।