Salvestage paroolid Argon2id abil, seades mälumahuks vähemalt 19 MiB, iteratsioonide arvuks 2 ja paralleelsuse astmeks 1, ning kasutage iga parooli jaoks unikaalset soola. See on miinimumkonfiguratsioon, mida soovitab OWASP Password Storage Cheat Sheet. Kui Teie andmebaasis on endiselt MD5, SHA-1 või soolamata räsid, saate selle parandada ilma paroolide massilise lähtestamiseta ja jätmata nõrku räsisid maha uinuvatele kontodele.
Mida kasutada ja millised on miinimumsätted
Cheat sheet toob välja järgmised miinimumid:
| Olukord | Algoritm | Miinimumsätted |
|---|---|---|
| Eelistatud | Argon2id | 19 MiB mälu, 2 iteratsiooni, paralleelsus 1 |
| Argon2id pole saadaval | scrypt | kulu parameeter 2^17, ploki suurus 8, paralleelsus 1 |
| Vanad süsteemid bcrypti peal | bcrypt | work factor 10 või rohkem, parooli piirang 72 baiti |
| Nõutav FIPS-140 vastavus | PBKDF2 | 600 000 või rohkem, HMAC-SHA-256 |
Argon2id on RFC 9106 peamine variant ja iga selle dokumendi implementatsioon peab seda toetama. Esimese mälukäigu esimesel poolel töötab see nagu Argon2i, ülejäänud osas nagu Argon2d.
bcrypti 72-baidine piirang
Cheat sheet määrab bcrypti jaoks parooli piiriks 72 baiti. Allikad ei ütle, kuidas üksikud teegid pikemat sisendit käsitlevad, seega testige oma teeki ise. Räsige parool, mis koosneb 72 märgist a ja sellele järgnevast märgist b, ning kontrollige seejärel parooli, mis koosneb 72 märgist a ja märgist c. Kui kontroll õnnestub, kärbib Teie teek sisendit vaikimisi.
Seejärel piirake kas parooli pikkus oma vormides 72 baidini ja öelge seda kasutajatele selgelt või planeerige üleminek Argon2id-le. RFC 9106 lubab paroole kuni 2^32-1 baiti.
Miks kiired räsid ei sobi
MD5 ja SHA-1 loodi kiireteks ning SHA-256 ei sobi samal põhjusel: see lubab ründajal teha kiiresti suurel hulgal oletusi. Ründaja räsib kandidaate lekkinud paroolilistidest, sõnastikest või jõuründega ning võrdleb tulemusi Teie tabeli ridadega. GPU-d ja renditud pilveserverid teevad selle odavaks.
Unikaalne sool sunnib ründajat räsisid murdma ükshaaval. See muudab kasutuks ka rainbow table'id ning identsed paroolid ei anna enam identseid räsisid. RFC 9106 soovitab paroolide räsimisel 16-baidist soola. Küpsed teegid genereerivad ja salvestavad soola Teie eest, seega ärge kirjutage seda osa käsitsi.
Work factori häälestamine
Universaalset numbrit ei ole. See sõltub Teie serverist ja kasutajate arvust ning selle leiate katsetades oma tegelikul riistvaral. Üldreegel on, et ühe räsi arvutamine peaks võtma alla ühe sekundi.
Liiga kõrge väärtus maksab. Iga sisselogimiskatse kulutab protsessoriaega ja katsete laine võib serveri ressursid ammendada. Tehke jõudlustest realistliku samaaegsusega ning valige väärtus, mida suudate tippkoormusel endale lubada.
Kontrollige, millist ühikut Teie Argon2 teek ootab. RFC 9106 defineerib mälumahu kibibaitides, cheat sheet aga toob MiB-sid. 19 MiB on 19456 KiB ja kui annate numbri 19 sinna, kus teek ootab KiB-sid, saate 19 KiB mälu. Selline seadistus töötab, kuid on kavatsetust palju nõrgem.
Work factor salvestatakse tavaliselt räsi väljundisse. See aitab migreerimisel, sest sisselogimisel näete, millise parameetritega konkreetne räsi loodi.
Pepper lisakihina
Pepper on kõigi salvestatud paroolide jaoks ühine saladus, mida hoitakse andmebaasist väljaspool, saladuste hoidlas (secrets vault) või HSM-is. See aitab olukorras, kus ründaja saab kätte ainult andmebaasi, näiteks SQL injection'i või varastatud varukoopia kaudu. Üksi ei lisa see midagi, seega käsitlege seda kaitse sügavuti (defence in depth) osana.
Probleemiks on rotatsioon. Kompromiteeritud pepperit ei saa muuta, teadmata iga kasutaja parooli, seega sunnib selle vahetamine lähtestama kõigi nende paroolid, keda see kaitses. Otsustage enne pepperi kasutuselevõttu, kes selle protseduuri eest vastutab.
Vanade räside uuendamine
Cheat sheet'i lähenemine work factori tõstmiseks on oodata, kuni kasutaja autentib end järgmisel korral, ning seejärel räsida tema parool uute sätetega uuesti. MD5, SHA-1 või soolamata räsidelt üleminek järgib sama loogikat, kuigi selle laiendus on meie enda.
- Märkige iga salvestatud räsi juures selle algoritm, eraldi veerus või räsi formaadi kaudu. Kui Te pole kindel, mis tabelis on, aitab räsi tuvasti formaate ära tunda.
- Sisselogimisel kontrollige parooli selle algoritmiga, mida salvestatud räsi kasutab.
- Eduka kontrolli korral, kui räsi on päritud vanast süsteemist või jääb Teie praegustest parameetritest allapoole, arvutage esitatud paroolist uus Argon2id räsi värske soolaga.
- Kirjutage vana väärtus üle samas operatsioonis.
ok = verify(row.scheme, row.hash, submitted)
if ok and (row.scheme != "argon2id" or needs_rehash(row.hash)):
row.hash = argon2id_hash(submitted) # fresh salt, current parameters
row.scheme = "argon2id"
save(row)
Uinuvad kontod
Kasutajad, kes enam kunagi sisse ei logi, ei saa kunagi uuendatud ja nende nõrgad räsid seisavad tabelis määramata ajani. Üks lahendus on need nüüd ümbritseda. Käivitage Argon2id olemasoleval MD5 või SHA-1 väärtusel, salvestage tulemus skeemimarkeriga, näiteks argon2id(md5), ning kustutage paljas räsi.
Sisselogimisel arvutate esitatud parooli vana räsi, kontrollite seda Argon2id ümbrise vastu ning eduka kontrolli korral asendate ümbrise tavalise Argon2id räsiga. Dokumenteerige täpselt, kuidas vana väärtus on kodeeritud (heksa või toorbaitid), sest mittevastavus rikub kõik selle skeemi sisselogimised. Testige ümbristatud rada esmalt tabeli koopial.
Ümbristamine ei muuda nõrka parooli tugevaks. See takistab varastatud tabeli ründamist MD5 kiirusel.
Alternatiiv on eemaldada vanad räsid pärast kindlat tähtaega ja nõuda järgmisel sisselogimisel lähtestamist, mida cheat sheet kirjeldab rakendusest sõltuva võimalusena. Kui muudatus puudutab koodibaasi, mida Te täielikult ei kontrolli, saab selle üle vaadata meie turvalise tarkvaraarenduse meeskond.
Kust alustada
- Auditeerige kasutajate tabel: millised algoritmid, kas soolad on olemas ning kas mõni parool on avatekstina või pööratavalt krüpteeritud. Krüpteerimine on vastuvõetav ainult siis, kui peate algse parooli taastama, ning cheat sheet soovitab sellist vajadust vältida.
- Valige Argon2id vähemalt 19456 KiB, 2 iteratsiooni ja paralleelsusega 1, ning tehke jõudlustest tootmisriistvaral, kuni üks räsi võtab alla sekundi.
- Kui kasutate bcrypti, tehke ülaltoodud 72-baidine test ja otsustage pikkuspiirangu ning Argon2id-le ülemineku vahel.
- Lisage skeemi algoritmi marker, muutke sisselogimiskood nii, et see kontrolliks vana skeemiga ja räsiks eduka kontrolli järel uuesti.
- Ümbristage allesjäänud vanad räsid Argon2id-ga või määrake tähtaeg, mille järel need eemaldatakse ja nõutakse lähtestamist.
- Kui lisate pepperi, hoidke seda saladuste hoidlas ja kirjutage enne üles rotatsiooni ning sunnitud lähtestamise protseduur.
