bcrypt کیا ہے؟
Bcrypt ایک پاس ورڈ ہیشنگ فنکشن ہے جسے Niels Provos اور David Mazières نے ڈیزائن کیا، جو Blowfish cipher پر مبنی ہے۔ MD5 یا SHA-256 جیسی تیز ڈائجسٹس کے برعکس، bcrypt جان بوجھ کر سست اور حسابی طور پر مہنگا ہے — یہ چوری شدہ پاس ورڈ ہیشز کے خلاف brute-force حملوں کو ناقابلِ عمل بناتا ہے۔ Bcrypt خود بخود فی پاس ورڈ ایک بے ترتیب سالٹ تیار کرتا ہے، لہٰذا ایک جیسے پاس ورڈز مختلف ہیشز پیدا کرتے ہیں۔
bcrypt کیسے کام کرتا ہے؟
bcrypt الگورتھم مکمل طور پر آپ کے براؤزر میں چلتا ہے۔ یہاں مرحلہ وار بیان ہے:
- آپ کا پاس ورڈ UTF-8 بائٹس میں انکوڈ ہو کر bcrypt کی کلید شیڈول میں ڈالا جاتا ہے، جو پاس ورڈ اور سالٹ کا استعمال کرتے ہوئے Blowfish cipher کے 4,184 بائٹ کے P-array اور S-boxes کو ابتدائی شکل دیتا ہے۔
- ایک بے ترتیب 128-بٹ سالٹ تیار ہوتا ہے۔ سالٹ کو کلید شیڈول میں ملایا جاتا ہے تاکہ ہر منفرد سالٹ ایک ہی پاس ورڈ کے لیے بھی مکمل طور پر مختلف ہیش پیدا کرے۔
- کلید شیڈول کو 2^لاگت راؤنڈز کے لیے دہرایا جاتا ہے (مثلاً، لاگت 10 کے لیے 2^10 = 1,024 تکرار)۔ ہر تکرار سالٹ اور P-array اندراجات کو دوبارہ خفیہ کرتا ہے، جس سے حساب لاگت بڑھنے کے ساتھ متناسب طور پر سست ہو جاتا ہے۔
- حتمی آؤٹ پٹ
$2b$<cost>$<salt><hash>فارمیٹ میں 60 حروف کی ایک سٹرنگ ہے، جہاں لاگت صفر سے پیڈڈ ہے (مثلاً، 10)، سالٹ 22 Base64 حروف ہے، اور ہیش 31 Base64 حروف ہے۔ - تصدیق کے لیے، وہی الگورتھم امیدوار پاس ورڈ اور ذخیرہ شدہ ہیش سے نکالے گئے سالٹ کے ساتھ دوبارہ چلتا ہے۔ اگر اخذ کردہ ہیش ذخیرہ شدہ ہیش سے مطابقت رکھتی ہے، تو پاس ورڈ درست ہے۔
مجھے کون سا لاگت عنصر استعمال کرنا چاہیے؟
لاگت عنصر تکرار کی تعداد کا لوگارتھم ہے — لاگت 10 کا مطلب 2^10 = 1,024 راؤنڈز، لاگت 12 کا مطلب 4,096 راؤنڈز۔ اپنی سکیورٹی ضروریات اور ہارڈویئر کی بنیاد پر منتخب کریں:
- لاگت 4-6 (16-64 راؤنڈز) — صرف ڈیولپمنٹ اور ٹیسٹنگ کے لیے۔ پروڈکشن استعمال کے لیے بہت تیز؛ کم سے کم تحفظ فراہم کرتا ہے۔
- لاگت 8 (256 راؤنڈز) — غیر اہم ایپلیکیشنز کے لیے کم سے کم حد۔ جدید ہارڈویئر پر تقریباً 6ms۔
- لاگت 10 (1,024 راؤنڈز) — موجودہ تجویز کردہ بنیادی سطح۔ تقریباً ~25ms لگتا ہے۔ زیادہ تر ویب ایپلیکیشنز کے لیے موزوں۔
- لاگت 12 (4,096 راؤنڈز) — ایڈمن پورٹلز، مالیاتی نظاموں اور اعلیٰ سکیورٹی ایپس کے لیے تجویز کردہ۔ تقریباً ~100ms لگتا ہے۔
- لاگت 14 (16,384 راؤنڈز) — اعلیٰ سکیورٹی۔ تقریباً ~400ms لگتا ہے۔ ماسٹر پاس ورڈز، انکرپشن کیز، یا جب بھی لاگ ان لیٹنسی قابلِ قبول ہو استعمال کریں۔
یہ bcrypt جنریٹر کیوں استعمال کریں؟
- رازداری: ہر پاس ورڈ آپ کے براؤزر میں مقامی طور پر ہیش ہوتا ہے۔ کوئی ڈیٹا آپ کے آلے سے باہر نہیں جاتا۔
- دوہرا موڈ: نئی ہیشز تیار کریں یا موجودہ کی تصدیق کریں، ساتھ ساتھ۔
- لچکدار لاگت عنصر: کام کے عنصر کو 4 (تیز) سے 15 (بہت سست) تک اپنی ایپلیکیشن کی ضروریات کے مطابق ڈھالیں۔
- معیاروں کے مطابق: معیاری
$2b$فارمیٹ میں ہیشز تیار کرتا ہے جو ہر بڑی زبان اور فریم ورک کے ساتھ مطابقت رکھتا ہے۔
bcrypt کے عام استعمال کیا ہیں؟
Bcrypt صنعت میں پاس ورڈ اسٹوریج اور تصدیق کے لیے بڑے پیمانے پر استعمال ہوتا ہے:
- ویب ایپلیکیشن صارف کی تصدیق — ڈیٹابیسز میں صارف کے پاس ورڈ ہیشز کو ذخیرہ کرنا تاکہ سادہ متن کے پاس ورڈ کبھی محفوظ نہ ہوں۔
- API کلید ہیشنگ — API رازوں کو ذخیرہ کرنے سے پہلے ہیش کرنا، تاکہ ڈیٹابیس کی خلاف ورزی درست اسناد کو لیک نہ کرے۔
- مائیگریشن آڈیٹنگ — تصدیق کرنا کہ پرانے نظام کی میراثی پاس ورڈ ہیشز تصدیق کی پرت کو اپ گریڈ کرنے کے بعد بھی صارفین کو تصدیق کر سکتی ہیں۔
bcrypt ہیش کیسی دکھتی ہے؟
پاس ورڈ hunter2 کو لاگت عنصر 10 کے ساتھ ہیش کرنے سے $2b$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy جیسی سٹرنگ بنتی ہے۔ فارمیٹ اس طرح ٹوٹتا ہے: $2b$ (الگورتھم ورژن)، 10 (لاگت عنصر)، $، پھر 22 حروف سالٹ اور 31 حروف ہیش، تمام Base64-انکوڈڈ۔ ایک ہی پاس ورڈ کے ساتھ ہر بار چلانے پر بے ترتیب سالٹ کی وجہ سے مختلف ہیش بنتی ہے۔
یہ bcrypt جنریٹر خالص JavaScript عملدرآمد کا استعمال کرتے ہوئے مکمل طور پر آپ کے براؤزر میں چلتا ہے۔ پاس ورڈز کو ذخیرہ کرنے سے پہلے ہیش کریں، موجودہ ہیشز کی تصدیق کریں، اور اپنی سکیورٹی ضروریات کے مطابق لاگت عنصر کو ڈھالیں — یہ سب سرور کو ایک بائٹ بھیجے بغیر۔