Utilia

Gjeneratori dhe kontrolluesi bcrypt

Gjenero hash bcrypt me kosto nga 4 deri 14, kontrollo një fjalëkalim kundrejt një hash ekzistues dhe shih versionin, koston, kripën dhe digest-in.

Krijo hash për një fjalëkalim

Kontrollo një fjalëkalim kundrejt një hash

Si të krijosh hash për një fjalëkalim me bcrypt

  1. Te Krijo hash për një fjalëkalim, shkruaj Fjalëkalimin. Një numërues tregon gjatësinë e tij në bajte UTF-8 dhe të paralajmëron kur kalon 72 bajte.
  2. Zgjidh Faktorin e kostos (4–14). Rreshti poshtë tregon numrin e raundeve, për shembull 10 → 2^10 = 1 024 raunde.
  3. Kliko Gjenero hash. Një shirit përparimi ndjek punën dhe faqja mbetet e përdorshme gjatë ekzekutimit. Kur përfundon, mjeti tregon kohën e shpenzuar dhe Hash bcrypt, gati për t’u kopjuar.
  4. Hash ndahet në pjesët e veta: Versioni, Kostoja, Kripa (22 karaktere) dhe Hash (31 karaktere).

Për të kontrolluar një fjalëkalim kundrejt një hash, shkruaj fjalëkalimin, ngjit hash-in (ai që sapo gjenerove plotësohet automatikisht) dhe kliko Kontrollo fjalëkalimin. Rezultati tregon nëse përputhen. Vendos shenjën te Fshih fjalëkalimet për të maskuar të dyja fushat e fjalëkalimit.

Llogaritja bëhet në shfletuesin tënd me bibliotekën bcryptjs, e cila ngarkohet vetëm kur të duhet për herë të parë. Asnjë fjalëkalim dhe asnjë hash nuk dërgohet askund.

Si funksionon bcrypt

bcrypt (Provos dhe Mazières, 1999) është një funksion hash për fjalëkalime i ndërtuar mbi shifrën Blowfish. Ndryshe nga SHA-256, ai është qëllimisht i ngadaltë, dhe ngadalësia e tij është e rregullueshme: faktori i kostos është fuqi e dyshit, ndaj çdo +1 e dyfishon punën. Kosto 10 do të thotë 1 024 përsëritje të konfigurimit të kushtueshëm të çelësit; kosto 12 do të thotë 4 096. Kjo ngadalësi pothuajse nuk ndihet kur një përdorues hyn në llogari, por e bën shumë më të shtrenjtë sulmin me forcë brutale ndaj një baze të dhënash të vjedhur.

Një hash si $2b$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy lexohet kështu:

  • $2b$: versioni. $2a$ dhe $2y$ (PHP) janë të përputhshëm dhe mund të kontrollohen këtu; $2x$ shënon hash nga një zbatim i vjetër me gabime dhe refuzohet.
  • 10: faktori i kostos.
  • 22 karakteret e ardhshme: një kripë e rastësishme 128-bitëshe, në alfabetin Base64 të vetë bcrypt (./A-Za-z0-9).
  • 31 karakteret e fundit: rezultati 184-bitësh.

Pasi kripa është e rastësishme dhe ruhet brenda hash-it, hashimi i të njëjtit fjalëkalim dy herë jep dy hash të ndryshëm, dhe të dy verifikohen saktë. Prandaj një fjalëkalim kontrollohet me një funksion verifikimi, jo duke krahasuar hash-et.

Zgjedhja e kostos

Zgjidh koston më të lartë që serveri yt e përballon duke i mbajtur hyrjet të shpejta, zakonisht rreth një çerek sekonde për hash. OWASP rekomandon një kosto minimale 10 për bcrypt. Shfletuesit e ekzekutojnë bcrypt në JavaScript, që është disa herë më i ngadaltë se një zbatim nativ në server: nga kostoja 12 mjeti paralajmëron se llogaritja mund të zgjasë nga një deri në disa sekonda, dhe çdo hap shtesë e dyfishon kohën. Puna ndahet në pjesë të shkurtra, ndaj faqja nuk ngrin.

Për sistemet e reja, OWASP tani preferon Argon2id, ndërsa bcrypt mbetet i pranueshëm aty ku Argon2id nuk është i disponueshëm.

Kufiri prej 72 bajtesh

bcrypt përdor vetëm 72 bajtet e para të fjalëkalimit; gjithçka pas tyre injorohet në heshtje. Bajtet nuk janë karaktere: një shkronjë me shenjë diakritike zë 2 bajte në UTF-8 dhe një emoji zë 4. Dy fjalëkalime të gjata që ndajnë 72 bajtet e para prodhojnë të njëjtin hash. Numëruesi i bajteve të paralajmëron kur fjalëkalimi është shumë i gjatë. Disa sisteme bëjnë para-hash të fjalëkalimeve të gjata (për shembull me HMAC-SHA256, pastaj Base64) para bcrypt; nëse e bën këtë, mos kalo kurrë digest-e binare të papërpunuara, sepse një bajt zero do ta ndërpriste fjalëkalimin herët në shumë zbatime.

Pyetje të shpeshta

Pse i njëjti fjalëkalim jep çdo herë një hash të ndryshëm?

Çdo hash merr një kripë të re të rastësishme, e cila ruhet brenda hash-it. Butoni Kontrollo fjalëkalimin lexon kripën dhe koston nga hash-i dhe e rillogarit, ndaj çdo version verifikohet.

A mund të dekriptohet një hash bcrypt?

Jo. bcrypt është një funksion njëkahësh. Mënyra e vetme për të gjetur një fjalëkalim është ta hamendësosh dhe të bësh hash për çdo hamendje, që është pikërisht ajo që faktori i kostos e ngadalëson.

Çfarë faktori kostoje duhet të përdor?

Të paktën 10, dhe më shumë nëse serveri yt mbetet mjaftueshëm i shpejtë. Mate në harduerin e prodhimit: koha e treguar këtu pasqyron JavaScript-in në shfletuesin tënd, zakonisht më të ngadaltë se një server.

A janë hash-et $2a$, $2b$ dhe $2y$ të këmbyeshëm?

Për fjalëkalime nën 256 bajte japin të njëjtin rezultat, dhe ky mjet i kontrollon të tria. $2b$ korrigjoi një gabim të tejkalimit së gjatësisë në zbatimin e OpenBSD, kurse $2y$ është emri në PHP për një zbatim të saktë.

A është e sigurt të shkruaj këtu një fjalëkalim të vërtetë?

Gjithçka funksionon lokalisht dhe asgjë nuk dërgohet apo ruhet. Për llogari të vërteta, praktika e mirë mbetet të testosh me një fjalëkalim shembull dhe jo me një që e përdor.