§

Kizaa Bcrypt

§

Zalisha Hashi ya Bcrypt

10 (1,024 rounds)

Bcrypt imekuwa mpango mkuu wa uhashishaji nywila katika ukuzaji wa wavuti wa Marekani tangu ilipoanzishwa mwaka 1999 na Provos na Mazières. NIST SP 800-63B inapendekeza uhashishaji wa kumbukumbu ngumu kwa uhifadhi wa nywila, na OWASP inaorodhesha bcrypt kama chaguo bora pamoja na Argon2id. Rails inatumia bcrypt kupitia has_secure_password, Django inaiunga mkono kama backend inayochomekwa, na wadau wa Node.js wanatumia bcryptjs. Kipengele cha gharama hudhibiti muda unaochukuliwa kuhashisha nywila moja — kuzidisha gharama mara mbili huzidisha kazi mara mbili. Programu nyingi hutumia gharama 10 (raundi 1,024) kama msingi, wakati mifumo ya kifedha au ya utawala mara nyingi huenda hadi 12 (raundi 4,096). Chombo hiki kinafanya kazi kabisa kwenye kivinjari kwa kutumia JavaScript, kwa hivyo nywila zako hazitoki kwenye kifaa chako.

Bcrypt ni nini?

Bcrypt ni kazi ya kuhashishia nywila iliyoundwa na Niels Provos na David Mazières, kwa msingi wa cipher Blowfish. Tofauti na digests za haraka kama MD5 au SHA-256, bcrypt ni ya polepole na inagharimu sana kimahesabu — hii inafanya mashambulizi ya nguvu-brutu dhidi ya hashi za nywila zilizoibiwa kuwa yasiyo na tija. Bcrypt huzalisha chumvi (salt) ya nasibu kwa kila nywila kiotomatiki, kwa hivyo nywila zinazofanana huzalisha hashi tofauti.

Bcrypt inafanya kazi vipi?

Algorithm ya bcrypt inafanya kazi kabisa kwenye kivinjari chako. Hiki ndicho kinachotokea hatua kwa hatua:

  1. Nywila yako inasimba kwa baiti za UTF-8 na kulishwa kwenye ratiba ya funguo (key schedule) ya bcrypt, inayoanzisha P-safu ya baiti 4,184 na S-boxes za cipher Blowfish kwa kutumia nywila na chumvi.
  2. Chumvi ya nasibu ya 128-bit inazalishwa. Chumvi inachanganywa kwenye ratiba ya funguo ili kila chumvi ya kipekee itoe hashi tofauti kabisa hata kwa nywila moja.
  3. Ratiba ya funguo inaendeshwa kwa raundi 2^cost (mfano, 2^10 = 1,024 marudio kwa gharama 10). Kila marudio husimba upya viingizo vya chumvi na P-safu, na hivyo kufanya hesabu iwe polepole kadri gharama inavyoongezeka.
  4. Matokeo ya mwisho ni mfuatano wa herufi 60 katika muundo $2b$<cost>$<salt><hash>, ambapo gharama imejazwa sifuri (mfano, 10), chumvi ni herufi 22 za Base64, na hashi ni herufi 31 za Base64.
  5. Kwa uthibitishaji, algorithm ileile inaendeshwa tena kwa nywila ya mgombea na chumvi iliyochukuliwa kutoka kwa hashi iliyohifadhiwa. Ikiwa hashi inayotokana inalingana na iliyohifadhiwa, nywila ni sahihi.

Nitumie kipengele gani cha gharama?

Kipengele cha gharama ni logariti ya hesabu ya marudio — gharama 10 inamaanisha 2^10 = raundi 1,024, gharama 12 inamaanisha raundi 4,096. Chagua kulingana na mahitaji yako ya usalama na maunzi:

  • Gharama 4-6 (raundi 16-64) — kwa ukuzaji na majaribio pekee. Haraka sana kwa matumizi ya uzalishaji; hutoa ulinzi mdogo.
  • Gharama 8 (raundi 256) — kiwango cha chini kabisa kwa programu zisizo muhimu. Takriban 6ms kwenye maunzi ya kisasa.
  • Gharama 10 (raundi 1,024) — msingi uliopendekezwa wa sasa. Huchukua takriban 25ms. Inafaa kwa programu nyingi za wavuti.
  • Gharama 12 (raundi 4,096) — inapendekezwa kwa lango la utawala, mifumo ya kifedha, na programu za usalama wa juu. Huchukua takriban 100ms.
  • Gharama 14 (raundi 16,384) — usalama wa juu. Huchukua takriban 400ms. Tumia kwa nywila kuu, funguo za usimbaji, au wakati muda wa kusubiri wa kuingia unakubalika.

Kwa nini utumie kizaa hiki cha bcrypt?

  • Faragha yako inalindwa — kila nywila inahashishwa ndani ya kivinjari chako, na hakuna data inayotoka kwenye kifaa chako.
  • Unapata njia zote mbili kando: zalisha hashi mpya au thibitisha zilizopo bila kubadilisha kurasa.
  • Kipengele cha gharama kinaweza kubadilishwa kutoka 4 (haraka) hadi 15 (polepole sana), ili uweze kulinganisha mahitaji ya usalama ya programu yako.
  • Hashi hutumia muundo wa kawaida wa $2b$ unaofanya kazi na kila lugha na mfumo mkuu.

Matumizi gani ya kawaida ya bcrypt?

Bcrypt inatumiwa sana kwa uhifadhi na uthibitishaji wa nywila katika tasnia:

  • Uthibitishaji wa programu za wavuti — kuhifadhi hashi za nywila za watumiaji kwenye hifadhidata ili nywila wazi zisihifadhiwe kamwe.
  • Uhashishaji wa funguo za API — kuhashisha siri za API kabla ya kuzihifadhi, ili uvunjaji wa hifadhidata usivujishe hati miliki halali.
  • Ukaguzi wa uhamishaji — kuangalia kwamba hashi za nywila za zamani kutoka mfumo wa kizamani bado zinawahakikishia watumiaji baada ya kuboresha safu ya uthibitishaji.

Hashi ya bcrypt inaonekanaje?

Kuhashisha nywila hunter2 kwa kipengele cha gharama 10 hutoa mfuatano kama $2b$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy. Muundo unagawanyika kama: $2b$ (toleo la algorithm), 10 (kipengele cha gharama), $, kisha herufi 22 za chumvi na herufi 31 za hashi, zote zimesimbwa kwa Base64. Kila ukimbiaji kwa nywila moja hutoa hashi tofauti kwa sababu ya chumvi ya nasibu.

Kizaa hiki cha bcrypt kinafanya kazi kabisa kwenye kivinjari chako kwa kutumia JavaScript safi. Hashi nywila kabla ya kuzihifadhi, thibitisha hashi zilizopo, na urekebishe kipengele cha gharama kulingana na mahitaji yako ya usalama — yote bila kutuma hata baiti moja kwa seva.