Utilia

Bcrypt ģenerators un pārbaudītājs

Izveidojiet bcrypt jaucējkodu ar sarežģītību no 4 līdz 14, pārbaudiet paroli pret esošu jaucējkodu un apskatiet tā versiju, sarežģītību, sāli un kodu.

Jaukt paroli

Pārbaudīt paroli pret jaucējkodu

Kā sajaukt paroli ar bcrypt

  1. Sadaļā Jaukt paroli ierakstiet Parole. Skaitītājs rāda tās garumu UTF-8 baitos un brīdina, ja tas pārsniedz 72 baitus.
  2. Izvēlieties Sarežģītības koeficients (4–14). Rindiņa zemāk rāda kārtu skaitu, piemēram, 10 → 2^10 = 1 024 kārtas.
  3. Noklikšķiniet uz Ģenerēt jaucējkodu. Progresa josla seko darbam, un lapa darba laikā paliek lietojama. Kad process pabeigts, rīks parāda patērēto laiku un Bcrypt jaucējkods, gatavu kopēšanai.
  4. Jaucējkods tiek sadalīts daļās: Versija, Sarežģītība, Sāls (22 rakstzīmes) un Jaucējkods (31 rakstzīme).

Lai pārbaudītu paroli pret jaucējkodu, ierakstiet paroli, ielīmējiet jaucējkodu (tikko izveidotais tiek ievietots automātiski) un noklikšķiniet uz Pārbaudīt paroli. Rezultāts norāda, vai tie sakrīt. Atzīmējiet Paslēpt paroles, lai maskētu abus paroļu laukus.

Jaukšana notiek jūsu pārlūkprogrammā ar bcryptjs bibliotēku, kas tiek ielādēta tikai tad, kad tā pirmo reizi nepieciešama. Neviena parole vai jaucējkods netiek nekur sūtīts.

Kā darbojas bcrypt

bcrypt (Provos un Mazières, 1999) ir paroļu jaukšanas funkcija, kuras pamatā ir Blowfish šifrs. Atšķirībā no SHA-256, tā ir apzināti lēna, un šo lēnumu var regulēt: sarežģītības koeficients ir divnieka pakāpe, tāpēc katrs +1 dubulto darba apjomu. Sarežģītība 10 nozīmē 1 024 dārgās atslēgas sagatavošanas iterācijas, sarežģītība 12 – 4 096. Šis lēnums gandrīz neietekmē lietotāja pieteikšanos, bet ievērojami sadārdzina nozagtas datubāzes uzlaušanu ar pārlases metodi.

Jaucējkods, piemēram, $2b$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy, tiek lasīts šādi:

  • $2b$: versija. $2a$ un $2y$ (PHP) ir saderīgi, un tos var pārbaudīt šeit; $2x$ apzīmē jaucējkodus no vecas kļūdainas implementācijas, un tas tiek noraidīts.
  • 10: sarežģītības koeficients.
  • Nākamās 22 rakstzīmes: nejauša 128 bitu sāls bcrypt paša Base64 alfabētā (./A-Za-z0-9).
  • Pēdējās 31 rakstzīme: 184 bitu rezultāts.

Tā kā sāls ir nejauša un tiek glabāta jaucējkodā, divreiz sajaucot to pašu paroli, iegūst divus dažādus jaucējkodus, un abi tiek pareizi pārbaudīti. Tāpēc paroli pārbauda ar verifikācijas funkciju, nevis salīdzinot jaucējkodus.

Sarežģītības izvēle

Izvēlieties augstāko sarežģītību, ko jūsu serveris var atļauties, saglabājot ātru pieteikšanos, parasti ap ceturtdaļsekundi uz vienu jaucējkodu. OWASP iesaka bcrypt minimālo sarežģītību 10. Pārlūkprogrammas izpilda bcrypt JavaScript, kas ir vairākas reizes lēnāks par serverī izmantotu dabisko implementāciju: no sarežģītības 12 rīks brīdina, ka jaukšana var ilgt no vienas līdz vairākām sekundēm, un katrs papildu solis laiku dubulto. Darbs tiek sadalīts īsos gabalos, tāpēc lapa neiesalst.

Jaunām sistēmām OWASP tagad dod priekšroku Argon2id, bet bcrypt joprojām ir pieņemams tur, kur Argon2id nav pieejams.

72 baitu ierobežojums

bcrypt izmanto tikai pirmos 72 baitus no paroles; viss pārējais tiek klusējot ignorēts. Baiti nav rakstzīmes: burts ar diakritisko zīmi UTF-8 aizņem 2 baitus, bet emocijzīme – 4. Divas garas paroles ar vienādiem pirmajiem 72 baitiem dod vienu un to pašu jaucējkodu. Baitu skaitītājs brīdina, ja parole ir pārāk gara. Dažas sistēmas garas paroles pirms bcrypt iepriekš sajauc (piemēram, ar HMAC-SHA256 un tad Base64); ja tā darāt, nekad nepadodiet neapstrādātus bināros kodus, jo nulles baits daudzās implementācijās priekšlaicīgi beidz paroli.

Biežāk uzdotie jautājumi

Kāpēc viena un tā pati parole katru reizi dod citu jaucējkodu?

Katram jaucējkodam tiek izveidota jauna nejauša sāls, kas tiek glabāta pašā jaucējkodā. Poga Pārbaudīt paroli nolasa sāli un sarežģītību no jaucējkoda un aprēķina to no jauna, tāpēc tiek pārbaudīta katra versija.

Vai bcrypt jaucējkodu var atšifrēt?

Nē. bcrypt ir vienvirziena funkcija. Vienīgais veids, kā atgūt paroli, ir to uzminēt un sajaukt katru minējumu, un tieši to sarežģītības koeficients padara lēnu.

Kādu sarežģītības koeficientu izmantot?

Vismaz 10 un vairāk, ja jūsu serveris paliek pietiekami ātrs. Mēriet uz savas ražošanas aparatūras: šeit redzamais laiks atspoguļo JavaScript darbību jūsu pārlūkprogrammā, kas parasti ir lēnāka par serveri.

Vai $2a$, $2b$ un $2y$ jaucējkodi ir savstarpēji aizvietojami?

Parolēm, kas īsākas par 256 baitiem, tie dod vienādu rezultātu, un šis rīks pārbauda visus trīs. $2b$ izlaboja garuma pārpildes kļūdu OpenBSD implementācijā, bet $2y$ ir PHP nosaukums pareizai implementācijai.

Vai šeit droši ievadīt īstu paroli?

Viss darbojas lokāli, un nekas netiek sūtīts vai glabāts. Tomēr ar īstiem kontiem joprojām ir laba prakse testēšanai izmantot parauga paroli, nevis tādu, ko lietojat.