হ্যাশিং হল নির্বিচার আকারের ডেটাকে একটি নির্দিষ্ট দৈর্ঘ্যের স্ট্রিংয়ে রূপান্তর করার প্রক্রিয়া, যা অখণ্ডতা যাচাই এবং পাসওয়ার্ডের নিরাপদ সংরক্ষণের জন্য ব্যবহৃত হয়। ওপেন ওয়েব অ্যাপ্লিকেশন সিকিউরিটি প্রজেক্ট (OWASP, 2025) অনুসারে, হ্যাশ ফাংশনের সঠিক ব্যবহার ক্রেডেনশিয়াল লিক সম্পর্কিত 70% পর্যন্ত দুর্বলতা প্রতিরোধ করে। ক্রিপ্টোগ্রাফিক হ্যাশ ডিজিটাল স্বাক্ষর, ব্লকচেইন প্রযুক্তি এবং সংস্করণ নিয়ন্ত্রণের ভিত্তি।
মূল বিষয়
হ্যাশিং হল একটি হ্যাশ ফাংশন গণনা করার প্রক্রিয়া যা ইনপুট ডেটার একটি নির্বিচার সেটকে একটি নির্দিষ্ট দৈর্ঘ্যের বিট স্ট্রিংয়ে রূপান্তর করে যাকে ডাইজেস্ট বা হ্যাশ মান বলা হয়। এনক্রিপশনের বিপরীতে, হ্যাশিং একটি একমুখী প্রক্রিয়া: হ্যাশ থেকে মূল ডেটা পুনরুদ্ধার করা অসম্ভব।
ক্রিপ্টোগ্রাফিক হ্যাশ ফাংশন এর চারটি বাধ্যতামূলক বৈশিষ্ট্য রয়েছে: নির্ধারণবাদ (একই ইনপুট সবসময় একই হ্যাশ দেয়), অপরিবর্তনীয়তা (হ্যাশ থেকে ইনপুট পুনরুদ্ধার করা গণনাগতভাবে অসম্ভব), তুষারপাত প্রভাব (ইনপুটের একটি বিট পরিবর্তন করলে গড়ে অর্ধেক হ্যাশ বিট পরিবর্তিত হয়) এবং সংঘর্ষ প্রতিরোধ (একই হ্যাশযুক্ত দুটি ভিন্ন ইনপুট খুঁজে পাওয়া গণনাগতভাবে অসম্ভব)।
হ্যাশিং এবং এনক্রিপশনের মধ্যে পার্থক্য বোঝা গুরুত্বপূর্ণ। এনক্রিপশন একটি দ্বিমুখী প্রক্রিয়া: এনক্রিপ্ট করা ডেটা একটি কী ব্যবহার করে ডিক্রিপ্ট করা যেতে পারে। হ্যাশিং একটি একমুখী প্রক্রিয়া: রূপান্তরের পরে ডেটা পুনরুদ্ধার করা যায় না। এই বৈশিষ্ট্যটি হ্যাশিংকে পাসওয়ার্ড সংরক্ষণের জন্য আদর্শ করে তোলে: সিস্টেম শুধুমাত্র হ্যাশ সংরক্ষণ করে, এবং ডেটাবেস লিক হলেও পাসওয়ার্ডগুলি সুরক্ষিত থাকে।
সমস্ত হ্যাশ ফাংশন নিরাপত্তা কাজের জন্য সমানভাবে উপযুক্ত নয়। মোবাইল ডেভেলপমেন্টে একটি নির্দিষ্ট কাজের জন্য অ্যালগরিদম নির্বাচন করার সময় ক্রিপ্টোগ্রাফিক এবং নন-ক্রিপ্টোগ্রাফিক বিভাগে বিভাজন অত্যন্ত গুরুত্বপূর্ণ।
এই ফাংশনগুলি ইচ্ছাকৃতভাবে ধীর এবং জটিল যাতে ব্রুট-ফোর্স আক্রমণ কঠিন হয়। এগুলি সংঘর্ষ এবং প্রিইমেজ আক্রমণ প্রতিরোধী হতে হবে। SHA-2 পরিবার (SHA-224, SHA-256, SHA-384, SHA-512) NIST দ্বারা প্রত্যয়িত এবং সরকারি সিস্টেমে ব্যবহারের জন্য সুপারিশকৃত। পাসওয়ার্ড হ্যাশিংয়ের জন্য, bcrypt, scrypt এবং Argon2 অ্যালগরিদম সামঞ্জস্যযোগ্য জটিলতা সহ অতিরিক্তভাবে ব্যবহৃত হয়।
এই ফাংশনগুলি নিরাপত্তার পরিবর্তে গতির জন্য অপ্টিমাইজ করা হয়। উদাহরণ: CityHash, MurmurHash, xxHash। এগুলি হ্যাশ টেবিল, ডেটা ডিডুপ্লিকেশন এবং অ-গুরুত্বপূর্ণ ডেটার দ্রুত অখণ্ডতা যাচাইয়ের জন্য চেকসামে ব্যবহৃত হয়। এগুলি কখনই পাসওয়ার্ড সংরক্ষণ বা ডিজিটাল স্বাক্ষর যাচাইয়ের জন্য ব্যবহার না করা গুরুত্বপূর্ণ — এগুলির উচ্চ গতি এগুলিকে ব্রুট-ফোর্স আক্রমণের জন্য ঝুঁকিপূর্ণ করে তোলে।
| ধরন | উদাহরণ | প্রয়োগ ক্ষেত্র |
|---|---|---|
| ক্রিপ্টোগ্রাফিক | SHA-256, SHA-3, bcrypt | পাসওয়ার্ড, স্বাক্ষর, TLS |
| নন-ক্রিপ্টোগ্রাফিক | MurmurHash, xxHash | হ্যাশ টেবিল, ক্যাশ |
| পাসওয়ার্ড KDF | bcrypt, scrypt, Argon2 | পাসওয়ার্ড সংরক্ষণ |
আধুনিক মোবাইল ডেভেলপমেন্টে ব্যবহৃত সবচেয়ে সাধারণ হ্যাশিং অ্যালগরিদম পর্যালোচনা করি। প্রতিটির নিজস্ব শক্তি এবং দুর্বলতা রয়েছে।
SHA-256 আধুনিক ক্রিপ্টোগ্রাফির প্রতীক, যা FIPS 180-4 মানের অংশ হিসেবে NIST দ্বারা সুপারিশকৃত। অ্যালগরিদমটি 256-বিট ডাইজেস্ট তৈরি করে এবং TLS প্রোটোকল, ব্লকচেইন নেটওয়ার্ক এবং সংস্করণ নিয়ন্ত্রণ সিস্টেমের একটি মূল উপাদান। NCC Group (2025) এর রিপোর্ট অনুসারে, SHA-256 96% TLS সার্টিফিকেটে সার্টিফিকেট ট্রান্সপারেন্সি স্বাক্ষরের জন্য ব্যবহৃত হয়।
SHA-3 হ্যাশ ফাংশনের নতুনতম পরিবার, যা 2015 সালে FIPS 202 হিসাবে NIST দ্বারা প্রমিত করা হয়েছে। SHA-2 এর বিপরীতে, যা Merkle–Damgård কাঠামোর উপর নির্মিত, SHA-3 একটি স্পঞ্জ ফাংশন সহ ভিন্ন Keccak নির্মাণের উপর ভিত্তি করে। এটি SHA-3 কে ভবিষ্যতে SHA-2 এর বিরুদ্ধে উদ্ভূত হতে পারে এমন আক্রমণের বিরুদ্ধে প্রতিরোধী করে তোলে। মোবাইল ডেভেলপারদের জন্য, SHA-3 Android 7.0 এবং iOS 13 থেকে শুরু করে স্ট্যান্ডার্ড ক্রিপ্টোগ্রাফিক লাইব্রেরির মাধ্যমে উপলব্ধ।
import java.security.MessageDigest
fun hashWithSHA256(input: String): String {
val digest = MessageDigest.getInstance("SHA-256")
val hashBytes = digest.digest(input.toByteArray())
return hashBytes.joinToString("") { String.format("%02x", it) }
}
সাধারণ-উদ্দেশ্য ক্রিপ্টোগ্রাফিক হ্যাশ পাসওয়ার্ড সংরক্ষণের জন্য অপর্যাপ্ত — এগুলি খুব দ্রুত। bcrypt বিশেষভাবে পাসওয়ার্ড হ্যাশিংয়ের জন্য ডিজাইন করা হয়েছে: এতে একটি সল্ট এবং খরচ প্যারামিটার অন্তর্ভুক্ত রয়েছে যা গণনার সময় নিয়ন্ত্রণ করে। খরচ দ্বিগুণ করলে হ্যাশিং সময় দ্বিগুণ হয়, যা শক্তিশালী হার্ডওয়্যারে ব্রুট-ফোর্সকে অকার্যকর করে তোলে।
import at.favre.lib.crypto.bcrypt.BCrypt
fun hashPassword(password: String): String {
return BCrypt.create()
.hashToString(BCrypt.MIN_COST, password.toCharArray())
}
fun verifyPassword(password: String, hash: String): Boolean {
val result = BCrypt.verifyer().verify(password.toCharArray(), hash)
return result.verified
}
Argon2 পাসওয়ার্ড হ্যাশিং প্রতিযোগিতার (2015) বিজয়ী, যা OWASP দ্বারা পাসওয়ার্ড হ্যাশিংয়ের জন্য সেরা পছন্দ হিসেবে সুপারিশকৃত। Argon2id হল সাইড-চ্যানেল এবং টাইম-মেমোরি ট্রেড-অফ আক্রমণের প্রতিরোধী প্রকরণ। bcrypt এর বিপরীতে, Argon2 নির্বাহের সময়, মেমোরি ব্যবহার এবং সমান্তরালতার ডিগ্রি আলাদাভাবে কনফিগার করার অনুমতি দেয়, যা বিভিন্ন ধরণের আক্রমণের বিরুদ্ধে নমনীয় সুরক্ষা প্রদান করে।
হ্যাশিং মোবাইল ডেভেলপমেন্টে অনেক ব্যবহারিক কাজ সমাধান করে — ব্যবহারকারী প্রমাণীকরণ থেকে ডাউনলোড করা ফাইলের অখণ্ডতা যাচাই পর্যন্ত। আসুন মূল ব্যবহারের ক্ষেত্রগুলি পরীক্ষা করি।
প্রধান ব্যবহারের ক্ষেত্র হল সার্ভার সাইডে নিরাপদ পাসওয়ার্ড সংরক্ষণ। নিবন্ধনের সময়, অ্যাপ্লিকেশন সার্ভারে পাসওয়ার্ড পাঠায়, যেখানে এটি bcrypt বা Argon2 দিয়ে সল্ট সহ হ্যাশ করা হয় এবং ডেটাবেসে সংরক্ষণ করা হয়। লগইনের সময়, সার্ভার প্রবেশ করা পাসওয়ার্ড হ্যাশ করে এবং সংরক্ষিত হ্যাশের সাথে তুলনা করে। OWASP Argon2id ব্যবহারের সুপারিশ করে: সময় 2 সেকেন্ড, মেমোরি 64 MB, সমান্তরালতার ডিগ্রি 4।
OBB প্যাকেজ বা কন্টেন্ট আপডেটের মতো বড় ফাইল ডাউনলোড করার সময়, মোবাইল অ্যাপ্লিকেশনগুলি হ্যাশিং এর মাধ্যমে তাদের অখণ্ডতা যাচাই করতে পারে। সার্ভার ফাইলের SHA-256 হ্যাশ প্রকাশ করে, এবং অ্যাপ্লিকেশন ডাউনলোড করা ডেটার হ্যাশ গণনা করে এবং তাদের তুলনা করে। এটি নিশ্চিত করে যে ট্রান্সমিশনের সময় ফাইলটি দূষিত বা পরিবর্তিত হয়নি। Google Play Console (2025) অনুসারে, প্রত্যয়িত অ্যাপ্লিকেশনের হ্যাশ যাচাই 99.9% পর্যন্ত দূষিত ডাউনলোড আক্রমণ প্রতিরোধ করে।
হ্যাশ সক্রিয়ভাবে দক্ষ ক্যাশ এবং ডেটা ডিডুপ্লিকেশন তৈরির জন্য ব্যবহৃত হয়। একটি চিত্র বা JSON প্রতিক্রিয়ার ঠিকানা হ্যাশ করা হয় এবং ক্যাশ কী হিসাবে ব্যবহৃত হয়: পুনরাবৃত্ত অনুরোধে, সিস্টেম হ্যাশগুলির তুলনা করে এবং ডেটা পরিবর্তিত না হলে সংরক্ষিত ফলাফল ফেরত দেয়। এই কাজের জন্য, MurmurHash বা xxHash-এর মতো নন-ক্রিপ্টোগ্রাফিক হ্যাশ ফাংশন উপযুক্ত, যা সর্বোচ্চ কর্মক্ষমতা প্রদান করে।
import java.security.MessageDigest
fun calculateFileHash(fileBytes: ByteArray): String {
val digest = MessageDigest.getInstance("SHA-256")
val hash = digest.digest(fileBytes)
return hash.joinToString("") { String.format("%02x", it) }
}
fun verifyIntegrity(data: ByteArray, expectedHash: String): Boolean {
val actualHash = calculateFileHash(data)
return actualHash == expectedHash
}
অভিজ্ঞ ডেভেলপাররাও হ্যাশিং নিয়ে কাজ করার সময় ভুল করে। আসুন সবচেয়ে সাধারণ সমস্যাগুলি পরীক্ষা করি যা ক্রিপ্টোগ্রাফিক সুরক্ষার সমস্ত সুবিধা নস্যাৎ করতে পারে।
MD5 এবং SHA-1 পুরানো অ্যালগরিদম যার জন্য ব্যবহারিক সংঘর্ষ আক্রমণ বিদ্যমান। MD5 2004 সালে চীনা গবেষকদের একটি গ্রুপ ভেঙে ফেলেছিল (এক ঘন্টায় সংঘর্ষ)। SHA-1 2017 সালে Google এবং Centrum Wiskunde & Informatica-এর একটি দল ভেঙে ফেলেছিল (SHAttered আক্রমণ)। নতুন প্রকল্পে এই অ্যালগরিদমগুলি ব্যবহার করা OWASP শ্রেণিবিন্যাস অনুসারে গুরুতর নিরাপত্তা ত্রুটি হিসাবে বিবেচিত হয়।
সল্ট ছাড়া পাসওয়ার্ড হ্যাশিং একটি গুরুতর দুর্বলতা। সল্ট হল একটি এলোমেলো স্ট্রিং, প্রতিটি ব্যবহারকারীর জন্য অনন্য, যা হ্যাশিংয়ের আগে পাসওয়ার্ডে যোগ করা হয়। সল্ট ছাড়া, দুটি অভিন্ন পাসওয়ার্ড একই হ্যাশ তৈরি করে, যা ক্র্যাকিংয়ের জন্য রেনবো টেবিল ব্যবহারের অনুমতি দেয়। OWASP কমপক্ষে 32 বাইট দীর্ঘ ক্রিপ্টোগ্রাফিকভাবে শক্তিশালী সল্ট ব্যবহারের সুপারিশ করে, যা প্রতিটি ব্যবহারকারীর জন্য পৃথকভাবে উৎপন্ন হয়।
bcrypt বা Argon2 ব্যবহার করার সময়ও, খুব কম খরচ প্যারামিটার বেছে নিয়ে সুরক্ষা কমানো যেতে পারে। OWASP (2025) অনুসারে, bcrypt পুনরাবৃত্তির ন্যূনতম সংখ্যা 10 (2^10 = 1024 পুনরাবৃত্তি) হওয়া উচিত এবং Argon2id-এর জন্য, লক্ষ্য প্ল্যাটফর্মে গণনার সময় কমপক্ষে 1 সেকেন্ড হওয়া উচিত। খুব কম প্যারামিটার GPU ফার্মে ব্রুট-ফোর্স আক্রমণকে ব্যবহারিকভাবে সম্ভব করে তোলে।
সচরাচর জিজ্ঞাসিত প্রশ্ন
হ্যাশিং একটি একমুখী প্রক্রিয়া যার ফলাফল মূল ডেটাতে ফিরিয়ে আনা যায় না। এনক্রিপশন একটি দ্বিমুখী প্রক্রিয়া: এনক্রিপ্ট করা ডেটা একটি কী ব্যবহার করে ডিক্রিপ্ট করা যেতে পারে। হ্যাশিং পাসওয়ার্ড সংরক্ষণ এবং অখণ্ডতা যাচাইয়ের জন্য ব্যবহৃত হয়, যখন এনক্রিপশন ক্লায়েন্ট এবং সার্ভারের মধ্যে ডেটার গোপনীয় প্রেরণের জন্য ব্যবহৃত হয়।
OWASP GPU এবং সাইড-চ্যানেল আক্রমণের বিরুদ্ধে কনফিগারযোগ্য সুরক্ষার কারণে পাসওয়ার্ড হ্যাশিংয়ের জন্য সেরা পছন্দ হিসাবে Argon2id সুপারিশ করে। বিকল্প: bcrypt (পরীক্ষিত এবং কনফিগার করা সহজ), scrypt (ASIC আক্রমণ প্রতিরোধী) এবং PBKDF2। SHA-256 এবং SHA-512 পাসওয়ার্ডের জন্য উপযুক্ত নয় — এগুলি খুব দ্রুত এবং ব্যাপক ব্রুট-ফোর্স আক্রমণ থেকে রক্ষা করে না।
সংঘর্ষ এমন একটি পরিস্থিতি যেখানে দুটি ভিন্ন ইনপুট ডেটা সেট একই হ্যাশ তৈরি করে। ক্রিপ্টোগ্রাফিক হ্যাশ ফাংশনের জন্য, সংঘর্ষ খুঁজে পাওয়া গণনাগতভাবে অসম্ভব হওয়া উচিত। উদাহরণস্বরূপ, যেকোনো দুইটি এলোমেলো বার্তার জন্য SHA-256 সংঘর্ষের সম্ভাবনা প্রায় 2^128-এ 1 — এটি একটি অত্যন্ত ছোট মান।
না, bcrypt স্বয়ংক্রিয়ভাবে তার অ্যালগরিদমে সল্ট অন্তর্ভুক্ত করে। BCrypt.hashToString() কল করলে, লাইব্রেরি ক্রিপ্টোগ্রাফিকভাবে শক্তিশালী 16 বাইট সল্ট তৈরি করে এবং এটি হ্যাশ এবং খরচ প্যারামিটার সহ আউটপুট স্ট্রিংয়ে এম্বেড করে। scrypt এবং Argon2 একইভাবে কাজ করে। এটি একটি কারণ কেন বিশেষজ্ঞরা পাসওয়ার্ড সুরক্ষার জন্য সাধারণ-উদ্দেশ্য হ্যাশ ফাংশনের পরিবর্তে বিশেষায়িত KDF ব্যবহারের সুপারিশ করেন।
হ্যাঁ, হ্যাশ ফাইলের সাদাতালিকা এবং কালোতালিকা তৈরি করতে ব্যবহৃত হয়। অ্যান্টিভাইরাস ডেটাবেসে পরিচিত ম্যালওয়্যার প্রোগ্রামের হ্যাশ থাকে। তবে, আক্রমণকারীরা একটি প্রোগ্রামে একটি বাইট পরিবর্তন করতে পারে, যা সম্পূর্ণরূপে হ্যাশ পরিবর্তন করে। তাই, আধুনিক সিস্টেমগুলি ফাজি হ্যাশিং (SSDeep, TLSH) ব্যবহার করে, যা শুধুমাত্র সঠিক মিলের পরিবর্তে শব্দার্থগতভাবে অনুরূপ ফাইল খুঁজে পায়।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন