„Argon2id“ vietoj „bcrypt“: vien pakeisti algoritmą neužtenka

|Autorius: QUASA redakcija|4 min. skaitymo
„Argon2id“ vietoj „bcrypt“: vien pakeisti algoritmą neužtenka

Naujai sistemai slaptažodžių maišai rinkitės „Argon2id“. Jei jau saugote „bcrypt“ maišas, toliau tikrinkite senus įrašus ir po sėkmingo prisijungimo pakeiskite juos naujomis „Argon2id“ maišomis. Taip paskyras galima atnaujinti palaipsniui, nereikalaujant, kad visi naudotojai iš karto pakeistų slaptažodžius.

Vien algoritmo pakeitimas neužtikrina saugaus saugojimo: kiekvienam įrašui reikia atskiros druskos, tinkamai parinktų sąnaudų parametrų ir informacijos, kaip maišą vėliau patikrinti. Jei pridedate bendrą slaptąjį raktą, dar prieš migraciją suplanuokite jo saugojimą ir keitimą. Naujiems slaptažodžiams ir senų įrašų tikrinimui pereinamuoju laikotarpiu reikės skirtingų veiksmų.

Kurį algoritmą rinktis naujai ir turimai sistemai

Jei naudojama biblioteka palaiko „Argon2id“, taikykite jį naujiems slaptažodžiams. OWASP slaptažodžių saugojimo gairės kaip vieną mažiausių rekomenduojamų „Argon2id“ konfigūracijų nurodo 19 MiB atminties, 2 iteracijas ir 1 lygiagretumo laipsnį; paveldėtam „bcrypt“ – bent 10 sąnaudų koeficientą, o daugumos jo realizacijų įvestis ribojama 72 baitais. Tai baitų, o ne simbolių riba, todėl lietuviškos raidės ir kiti „Unicode“ ženklai ją gali pasiekti anksčiau, nei rodo simbolių skaitiklis.

Jei „Argon2id“ biblioteka neprieinama, prieš palikdami „bcrypt“ naujai sistemai įvertinkite „scrypt“ palaikymą. Esamos „bcrypt“ bazės vienu veiksmu tiesiogiai perrašyti negalima: maiša neatskleidžia pradinio slaptažodžio. Pereinamuoju laikotarpiu tikrinimo kodas turi suprasti abu formatus, o naujai nustatytus slaptažodžius jau saugoti pasirinktu nauju formatu. Senų įrašų buvimas netrukdo iš karto pakeisti naujų įrašų kūrimo taisyklės.

Kaip parinkti sąnaudų parametrus

„Argon2id“ maišos sąnaudas lemia atmintis, iteracijos ir lygiagretumas.

„Argon2id“ turi atskirus atminties, iteracijų ir lygiagretumo parametrus. Didesnės sąnaudos brangina kiekvieną spėjimą asmeniui, gavusiam maišų bazę, tačiau taip pat apkrauna jūsų autentifikavimo tarnybą. Pradinę rekomenduojamą konfigūraciją laikykite atskaitos tašku, o galutinį pasirinkimą grįskite matavimais ten, kur slaptažodžiai iš tikrųjų bus tikrinami.

Matuokite vieno tikrinimo trukmę, sunaudojamą atmintį ir elgesį, kai vienu metu jungiasi daug naudotojų. Į apkrovos bandymą įtraukite ir neteisingus slaptažodžius: jų tikrinimas taip pat naudoja išteklius. Parinkti parametrai turi išlaikyti priimtiną prisijungimo trukmę, o bandymų srautas neturi išsemti tarnybai skirtos atminties. Lygiagretumo didinimas savaime nereiškia stipresnės apsaugos ar didesnių sąnaudų užpuolikui.

Kartu su maiša saugokite algoritmo žymą, druską ir taikytus sąnaudų parametrus. Tuomet po sėkmingo prisijungimo galėsite atpažinti ne tik seną „bcrypt“ įrašą, bet ir „Argon2id“ įrašą su anksčiau pasirinktomis mažesnėmis sąnaudomis. Keičiant konfigūraciją nereikės spėlioti, pagal kokias taisykles buvo sukurta konkreti maiša.

Kuo skiriasi druska ir papildomas slaptasis raktas

Kiekviena slaptažodžio maiša turi atskirą druską, o papildomas slaptasis raktas saugomas atskirai.

Druska yra atskira, atsitiktinai sugeneruota kiekvieno slaptažodžio maišos reikšmė. Ji gali būti saugoma kartu su maiša: tikrinant slaptažodį reikia pakartoti tą pačią operaciją su ta pačia druska. Dėl skirtingų druskų vienoda slaptažodžio įvestis skirtingose paskyrose neduoda vienodos maišos. Naudodami patikimą biblioteką patikrinkite, kaip ji druską generuoja ir įrašo, užuot kūrę savą formatą.

NIST autentifikatorių gairės reikalauja slaptažodžius maišyti su druska, rekomenduoja kuo didesnį praktišką sąnaudų koeficientą nepakenkiant tikrinimo našumui ir siūlo papildomą operaciją su tik tikrintojui žinomu raktu. Jei toks raktas naudojamas, jį būtina laikyti atskirai nuo slaptažodžių maišų. Tai papildomas apsaugos sluoksnis, dažnai vadinamas „pepper“, o ne druskos pakaitalas.

Tokiam raktui tinka atskira slaptųjų duomenų saugykla arba aparatinis saugos modulis, kuriam autentifikavimo tarnyba gauna kontroliuojamą prieigą. Prieš įvesdami raktą nuspręskite, kurios paskyros juo bus apsaugotos ir kaip atskirsite jų įrašus nuo senųjų. Jei raktas prarandamas, juo apsaugotų maišų patikrinti nebegalima; jei jis atskleidžiamas, jį reikia pakeisti. Naujo rakto neįmanoma pritaikyti senoms maišoms nežinant naudotojų slaptažodžių, todėl būtina numatyti slaptažodžių nustatymo iš naujo eigą.

Kaip pakeisti „bcrypt“ maišą prisijungimo metu

Sėkmingai prisijungus senoji „bcrypt“ reikšmė pakeičiama nauja „Argon2id“ maiša.

Pirmiausia įdiekite tikrinimo funkciją, kuri pagal saugomą įrašą parenka tinkamą algoritmą ir jo parametrus. Tada įjunkite „Argon2id“ naujai kuriamiems bei keičiamiems slaptažodžiams, išsaugodami galimybę patikrinti senus „bcrypt“ įrašus. Neteisingas slaptažodis neturi pakeisti saugomos maišos ar jos migracijos būsenos.

  1. Prisijungiant perskaitykite paskyros maišos įrašą ir patikrinkite pateiktą slaptažodį pagal jame nurodytą algoritmą. Jei tikrinimas nesėkmingas, įrašo nekeiskite.
  2. Po sėkmingo tikrinimo nustatykite, ar įrašas naudoja „bcrypt“, ar pasenusius „Argon2id“ parametrus. Jei taip, iš ką tik pateikto slaptažodžio sukurkite tiesioginę naują maišą su nauja druska ir galiojančiais parametrais.
  3. Naują maišą įrašykite tik jeigu saugomas įrašas nuo perskaitymo nepasikeitė. Toks sąlyginis atnaujinimas apsaugo nuo situacijos, kai migracija perrašo tuo pat metu naudotojo pakeistą ar atkurtą slaptažodį.

Ši eiga veikia todėl, kad sėkmingai jungiantis programai trumpam prieinamas pats pateiktas slaptažodis. Vien senos „bcrypt“ maišos maišymas dar kartą su „Argon2id“ nėra lygiavertis tiesioginiam slaptažodžio maišymui: naujoji reikšmė ir toliau priklausytų nuo senosios. Jei tokį laikiną sluoksnį sistema jau naudoja, prisijungus verta jį pakeisti tiesiogiai iš naudotojo pateikto slaptažodžio gauta maiša.

Kas lieka po laipsniškos migracijos

Ilgai nesijungiančių naudotojų „bcrypt“ įrašai lieka bazėje. Skaičiuokite juos pagal saugomą formatą ir nuspręskite, kada neaktyviai paskyrai reikės saugiai nustatyti naują slaptažodį. Vien tai, kad programoje jau įjungtas „Argon2id“, neparodo, kiek senųjų maišų iš tiesų pakeista.

Atskirai įvertinkite, kaip senoji „bcrypt“ realizacija apdorojo ilgus ir „Unicode“ slaptažodžius. Jei ji tyliai nukirpdavo įvestį, prisijungimo metu iš viso pateikto teksto sukurta nauja maiša gali pakeisti, kokį slaptažodį paskyra priims kitą kartą. Tokiai paskyrai aiškus naujo slaptažodžio nustatymas yra saugesnė eiga nei nepastebimas tikrinimo taisyklių pakeitimas. Prieš užbaigdami perėjimą taip pat įsitikinkite, kad pakeitus slaptažodį senoji maiša nebegali grįžti per vėluojančią prisijungimo užklausą.

Taip pat skaitykite:

Dalintis:

Prenumeruokite mūsų naujienlaiškį

Gaukite naujausias Web3, DI ir kriptovaliutų naujienas tiesiai į savo el. pašto dėžutę.

0