ہیشنگ صوابدیدی سائز کے ڈیٹا کو ایک مقررہ لمبائی کی سٹرنگ میں تبدیل کرنے کا عمل ہے، جو سالمیت کی تصدیق اور پاس ورڈز کے محفوظ ذخیرہ کے لیے استعمال ہوتا ہے۔ اوپن ویب ایپلیکیشن سیکیورٹی پروجیکٹ (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 سرٹیفکیٹ شفافیت پر دستخط کرنے کے لیے TLS سرٹیفکیٹس کے 96% میں استعمال ہوتا ہے۔
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 ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں