Bosh sahifa Wiki bcrypt

bcrypt

bcrypt — parollarni xavfsizroq saqlash uchun yaratilgan, hisoblash xarajatini sozlash mumkin bo‘lgan password hashing funksiyasi. Niels Provos va David Mazières uni 1999-yilda Blowfish shifri asosida ishlab chiqqan. bcrypt har parol uchun tasodifiy salt ishlatadi va cost parametri orqali tekshiruvni ataylab sekinlashtiradi. Bu o‘g‘irlangan hash bazasida ko‘p parol taxminini tekshirish xarajatini oddiy SHA-256 yoki MD5ga qaraganda oshiradi.

Hash formati

bcrypt natijasi algoritm versiyasi, cost, 128 bitlik salt va hashni bitta kodlangan satrda saqlaydi. Masalan, satr $2b$12$... bilan boshlanishi mumkin. 2b variant identifikatori, 12 esa costdir. Tekshiruv uchun alohida salt ustuni majburiy emas, chunki kerakli parametrlar hash satrining ichida bor. Salt maxfiy emas; uning vazifasi bir xil parollar turli hash berishini va oldindan hisoblangan jadvallarni samarasiz qilishdir.

Cost logarifmik ifodalanadi: qiymat bir birlikka oshsa, asosiy ish taxminan ikki baravar ko‘payadi. Cost 12 taxminan 2^12 asosiy kengaytirish iteratsiyasi darajasini anglatadi, lekin aniq vaqt apparat va implementatsiyaga bog‘liq. Server production uskunasida login uchun qabul qilinadigan latency va parallel yukni o‘lchab parametr tanlaydi.

Parolni tekshirish

Login paytida kutubxona saqlangan bcrypt satridan versiya, cost va saltni oladi, kiritilgan parolni ayni parametrlar bilan qayta xeshlaydi va natijani xavfsiz solishtiradi. Ilova bcryptni qo‘lda yig‘may, sinovdan o‘tgan kutubxonaning hash va verify funksiyalaridan foydalanadi. Xato javobi foydalanuvchi mavjudligi yoki hash formati haqida ortiqcha ma’lumot bermaydi.

Vaqt o‘tib apparat tezlashganda cost oshiriladi. Muvaffaqiyatli login paytida saqlangan cost joriy siyosatdan past bo‘lsa, parol yangi parametr bilan xeshlanib yozuv yangilanadi. Buning uchun plaintext parol ayni login so‘rovida vaqtincha mavjud; bazadagi eski hashdan yangi hashni to‘g‘ridan-to‘g‘ri hosil qilib bo‘lmaydi.

72 byte cheklovi

bcrypt ko‘p implementatsiyada parolning dastlabki 72 byte’ini hisobga oladi. Unicode belgilar UTF-8da bir necha byte egallashi mumkin, shuning uchun bu 72 ta belgi degani emas. 72 bytedan keyingi farq e’tiborsiz qolsa, foydalanuvchi turli uzun parollarni bir xil deb o‘ylashi mumkin. Kutubxonalar cheklovga turlicha munosabatda bo‘ladi: jim qisqartirish, xato yoki pre-hash sxemasi.

Pre-hash ishlatilsa, oddiy SHA-256(password)ni bevosita bcryptga berish encoding va null byte muammolari hamda yangi protokol semantikasini keltiradi. Belgilangan, domain-separated va hujjatlashtirilgan sxema kerak. Yangi loyihada uzun parollar muhim bo‘lsa, tabiiy uzunlikni qo‘llaydigan Argon2id yoki scrypt ko‘pincha sodda tanlovdir.

Resurs va hujum modeli

bcrypt CPU hisobini qimmatlashtiradi, ammo xotira talabi zamonaviy memory-hard funksiyalarga qaraganda kichik. GPU va maxsus apparat parallel taxminlarni samarali bajarishi mumkin. Argon2id sozlanadigan xotira xarajatini ham qo‘shadi. Shunga qaramay, to‘g‘ri costli bcrypt meros va ko‘plab amaldagi tizimlarda qabul qilinadigan password hashing vositasidir.

Juda yuqori cost serverga login flood orqali denial-of-service xavfini oshiradi. Rate limit, navbat va resurs monitoringi parametr bilan birga ko‘riladi. Pepper qo‘llansa, u bazadan tashqari secret managerda saqlanadigan umumiy sir bo‘lib, rotation va yo‘qolish rejasi talab qiladi; u salt o‘rnini bosmaydi.

Turli tillardagi bcrypt kutubxonalarini almashtirishdan oldin $2a$, $2b$ va $2y$ prefikslari hamda uzun parol xatti-harakati test vektorlari bilan tekshiriladi. Encoding yoki null byte talqinidagi farq mavjud foydalanuvchilarni login qila olmaydigan holga keltirishi mumkin. Migratsiya real hash nusxasida emas, maxsus test ma’lumotida sinovdan o‘tkaziladi.

Bog‘liq tushunchalar

Password hashing, Salt, Cost factor, Blowfish, Argon2, scrypt, Brute-force attack