bcrypt چیست؟
Bcrypt یک تابع هش رمز عبور است که توسط Niels Provos و David Mazières طراحی شده و بر پایه رمز Blowfish است. برخلاف خلاصههای سریع مانند MD5 یا SHA-256، bcrypt عمداً کند و از نظر محاسباتی پرهزینه است — این امر حملات brute-force علیه هشهای رمز عبور دزدیدهشده را غیرعملی میکند. Bcrypt به طور خودکار برای هر رمز عبور یک نمک تصادفی تولید میکند، بنابراین رمزهای عبور یکسان هشهای متفاوتی تولید میکنند.
bcrypt چگونه کار میکند؟
الگوریتم bcrypt کاملاً در مرورگر شما اجرا میشود. در اینجا مراحل گام به گام آمده است:
- رمز عبور شما به صورت بایتهای UTF-8 رمزگذاری شده و به زمانبند کلید bcrypt وارد میشود که آرایه P (۴,۱۸۴ بایت) و جعبههای S رمز Blowfish را با استفاده از رمز عبور و نمک مقداردهی اولیه میکند.
- یک نمک تصادفی ۱۲۸ بیتی تولید میشود. نمک در زمانبند کلید ترکیب میشود تا هر نمک منحصربهفرد حتی برای همان رمز عبور یک هش کاملاً متفاوت تولید کند.
- زمانبند کلید برای 2^هزینه دور تکرار میشود (مثلاً 2^10 = ۱,۰۲۴ تکرار برای هزینه ۱۰). هر تکرار نمک و ورودیهای آرایه P را دوباره رمزگذاری میکند و محاسبه را با افزایش هزینه به طور متناسب کندتر میکند.
- خروجی نهایی یک رشته ۶۰ کاراکتری در قالب
$2b$<cost>$<salt><hash>است که هزینه با صفر padding شده (مثلاً ۱۰)، نمک ۲۲ کاراکتر Base64 و هش ۳۱ کاراکتر Base64 است. - برای تأیید، همان الگوریتم با رمز عبور نامزد و نمک استخراجشده از هش ذخیرهشده دوباره اجرا میشود. اگر هش مشتقشده با هش ذخیرهشده مطابقت داشته باشد، رمز عبور صحیح است.
از کدام ضریب هزینه باید استفاده کنم؟
ضریب هزینه لگاریتم تعداد تکرارها است — هزینه ۱۰ یعنی 2^10 = ۱,۰۲۴ دور، هزینه ۱۲ یعنی ۴,۰۹۶ دور. بر اساس نیازهای امنیتی و سختافزار خود انتخاب کنید:
- هزینه ۴-۶ (۱۶-۶۴ دور) — فقط برای توسعه و آزمایش. برای استفاده تولیدی خیلی سریع است؛ محافظت حداقلی ارائه میدهد.
- هزینه ۸ (۲۵۶ دور) — حداقل مطلق برای برنامههای غیر بحرانی. حدود ۶ میلیثانیه روی سختافزار مدرن.
- هزینه ۱۰ (۱,۰۲۴ دور) — خط پایه توصیهشده فعلی. حدود ۲۵ میلیثانیه طول میکشد. برای اکثر برنامههای وب مناسب است.
- هزینه ۱۲ (۴,۰۹۶ دور) — برای پورتالهای مدیریتی، سیستمهای مالی و برنامههای با امنیت بالا توصیه میشود. حدود ۱۰۰ میلیثانیه طول میکشد.
- هزینه ۱۴ (۱۶,۳۸۴ دور) — امنیت بالا. حدود ۴۰۰ میلیثانیه طول میکشد. برای رمزهای عبور اصلی، کلیدهای رمزگذاری یا هر زمان که تأخیر ورود قابل قبول باشد استفاده کنید.
چرا از این مولد bcrypt استفاده کنیم؟
- حریم خصوصی: هر رمز عبور به صورت محلی در مرورگر شما هش میشود. هیچ دادهای دستگاه شما را ترک نمیکند.
- حالت دوگانه: هشهای جدید تولید کنید یا هشهای موجود را در کنار هم تأیید کنید.
- ضریب هزینه انعطافپذیر: ضریب کار را از ۴ (سریع) تا ۱۵ (بسیار کند) مطابق نیازهای برنامه خود تنظیم کنید.
- مطابق با استانداردها: هشها را در قالب استاندارد
$2b$سازگار با تمام زبانها و فریمورکهای اصلی تولید میکند.
کاربردهای رایج bcrypt چیست؟
Bcrypt به طور گسترده در صنعت برای ذخیرهسازی و تأیید رمز عبور استفاده میشود:
- احراز هویت کاربر برنامه وب — ذخیره هشهای رمز عبور کاربران در پایگاههای داده تا رمزهای عبور متن ساده هرگز ذخیره نشوند.
- هش کردن کلید API — هش کردن اسرار API قبل از ذخیرهسازی، تا نفوذ به پایگاه داده اعتبارنامههای معتبر را نشت ندهد.
- حسابرسی مهاجرت — تأیید اینکه هشهای رمز عبور قدیمی از یک سیستم قبلی پس از ارتقای لایه احراز هویت همچنان میتوانند کاربران را احراز هویت کنند.
هش bcrypt چه شکلی است؟
هش کردن رمز عبور hunter2 با ضریب هزینه ۱۰ رشتهای مانند $2b$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy تولید میکند. قالب به این صورت تجزیه میشود: $2b$ (نسخه الگوریتم)، 10 (ضریب هزینه)، $، سپس ۲۲ کاراکتر نمک و ۳۱ کاراکتر هش، همه رمزگذاریشده با Base64. هر بار اجرا با همان رمز عبور به دلیل نمک تصادفی هش متفاوتی تولید میکند.
این مولد bcrypt کاملاً در مرورگر شما با استفاده از یک پیادهسازی خالص JavaScript اجرا میشود. رمزهای عبور را قبل از ذخیرهسازی هش کنید، هشهای موجود را تأیید کنید و ضریب هزینه را مطابق نیازهای امنیتی خود تنظیم کنید — همه اینها بدون ارسال یک بایت به سرور.