Utilia

Bcrypt генератор и проверка

Генерирајте bcrypt хеш со фактор на трошок од 4 до 14, проверете лозинка спрема постоечки хеш и видете ја верзијата, трошокот, солта и хешот.

Хеширајте лозинка

Проверете лозинка спрема хеш

Како да хеширате лозинка со bcrypt

  1. Под Хеширајте лозинка внесете ја Лозинка. Бројач ја прикажува нејзината должина во UTF-8 бајти и ве предупредува кога ќе надмине 72 бајти.
  2. Изберете Фактор на трошок (4–14). Редот подолу го прикажува бројот на рунди, на пример 10 → 2^10 = 1 024 рунди.
  3. Кликнете Генерирај хеш. Лентата Напредок го следи извршувањето, а страницата останува употреблива додека трае. Кога ќе заврши, алатката го прикажува потрошеното време и Bcrypt хеш подготвен за копирање.
  4. Хешот се раздвојува на неговите делови: Верзија, Трошок, Сол (22 знаци) и Хеш (31 знак).

За да проверите лозинка спрема хеш, внесете ја лозинката, залепете го хешот (оној што штотуку го генериравте се пополнува автоматски) и кликнете Провери лозинка. Резултатот кажува дали се совпаѓаат. Означете Скриј ги лозинките за да ги маскирате двете полиња за лозинка.

Хеширањето работи во вашиот прелистувач со библиотеката bcryptjs, која се вчитува само кога првпат ќе ви затреба. Ниту лозинка ниту хеш не се испраќаат никаде.

Како работи bcrypt

bcrypt (Provos и Mazières, 1999) е функција за хеширање лозинки заснована на шифрата Blowfish. За разлика од SHA-256, таа е намерно бавна, а нејзината бавност е прилагодлива: факторот на трошок е степен на двојката, па секое зголемување за 1 ја удвојува работата. Трошок 10 значи 1 024 повторувања на скапото поставување на клучот; трошок 12 значи 4 096. Таа бавност едвај се чувствува кога корисникот се најавува, но го прави грубото погодување на украдена база на податоци многу поскапо.

Хеш како $2b$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy се чита вака:

  • $2b$: верзијата. $2a$ и $2y$ (PHP) се компатибилни и може да се проверат овде; $2x$ означува хешови од стара дефектна имплементација и се одбива.
  • 10: факторот на трошок.
  • Следните 22 знаци: случајна 128-битна сол, во сопствената Base64 азбука на bcrypt (./A-Za-z0-9).
  • Последните 31 знак: 184-битниот резултат.

Бидејќи солта е случајна и се чува во хешот, хеширањето на истата лозинка двапати дава два различни хеша, а двата се потврдуваат исправно. Затоа лозинката се проверува со функција за проверка, а не со споредба на хешови.

Избор на трошок

Изберете го највисокиот трошок што вашиот сервер го поднесува, а најавувањата остануваат брзи, обично околу четвртина секунда по хеш. OWASP препорачува минимален трошок 10 за bcrypt. Прелистувачите го извршуваат bcrypt во JavaScript, што е неколкукратно побавно од природна серверска имплементација: од трошок 12 алатката предупредува дека хеширањето може да трае од една до неколку секунди, а секој дополнителен чекор го удвојува времето. Работата се дели на кратки делови, па страницата не се замрзнува.

За нови системи, OWASP сега го претпочита Argon2id, а bcrypt останува прифатлив таму каде што Argon2id не е достапен.

Ограничувањето од 72 бајти

bcrypt ги користи само првите 72 бајти од лозинката; сè по тоа тивко се игнорира. Бајтите не се знаци: буква со дијакритик зазема 2 бајти во UTF-8, а емоџи 4. Две долги лозинки со исти први 72 бајти даваат ист хеш. Бројачот на бајти ве предупредува кога лозинката е предолга. Некои системи претходно ги хешираат долгите лозинки (на пример со HMAC-SHA256, потоа Base64) пред bcrypt; ако го правите тоа, никогаш не проследувајте сурови бинарни дигести, бидејќи нула-бајт би ја прекинал лозинката предвреме во многу имплементации.

Често поставувани прашања

Зошто истата лозинка дава различен хеш секој пат?

Секој хеш добива нова случајна сол, која се чува во самиот хеш. Копчето Провери лозинка ги чита солта и трошокот од хешот и повторно го пресметува, па секоја верзија се потврдува.

Може ли bcrypt хеш да се дешифрира?

Не. bcrypt е еднонасочна функција. Единствениот начин да се добие лозинката е да се погодува и да се хешира секое погодување, а токму тоа факторот на трошок го прави бавно.

Кој фактор на трошок да го користам?

Најмалку 10, а повеќе ако серверот ви останува доволно брз. Мерете на вашиот производствен хардвер: времето прикажано овде го одразува JavaScript во вашиот прелистувач, обично побавен од серверот.

Дали хешовите $2a$, $2b$ и $2y$ се заменливи?

За лозинки под 256 бајти даваат ист резултат, а оваа алатка ги проверува сите три. $2b$ поправи грешка со преклопување на должината во имплементацијата на OpenBSD, а $2y$ е името во PHP за исправна имплементација.

Дали е безбедно да внесам вистинска лозинка овде?

Сè работи локално и ништо не се испраќа ниту се зачувува. За вистински сметки сепак е добра практика да тестирате со примерок лозинка, а не со онаа што ја користите.