Krüptograafias on **sool** lisaturvameede räsitud paroolide kaitsmiseks räside lekke korral.

Ajalooliselt on paroole hoitud algselt lihttekstina ning seejärel räsitud kujul ilma soolamata, ent ainult räsitud paroolid on osutunud murtavaks toore jõu meetodil ning sellest edasi arenenud sõnastikuründega.

Sool on ühekordseks kasutamiseks genereeritud juhuslik andmehulk, mis lisatakse enne räsimist paroolile ning salvestatakse koos räsiga. Soolamine ei aeglusta paroolide murdmist toore jõu meetodil, ent takistab tõhusamate eelgenereeritud sõnastike ning vikerkaaretabelite kasutamist.

Näide
-----

Ilma soolamata paroolide räsimisel MD5 algoritmiga on tulemus selline:

|  |  |  |
| --- | --- | --- |
| **Kasutajanimi** | **Parool** | **MD5 räsi** |
| kasutaja1 | parool\_123 | 5efb61a76902974afd74a1b745a60fb8 |
| kasutaja2 | parool\_123 | 5efb61a76902974afd74a1b745a60fb8 |

Siit on näha, et ründaja peab vaid ühe korra arvutama välja räsi sõnele "parool\_123" ja ta teab räsi nähes kohe kõigi sama parooli kasutavate isikute paroole. Sellel põhimõttel toimivadki sõnastikuründed. Sama näide soolamisega:

|  |  |  |  |  |
| --- | --- | --- | --- | --- |
| **Kasutajanimi** | **Parool** | **Sool** | **Räsitav sõne** | **MD5 räsi** |
| kasutaja1 | parool\_123 | niKbYpjqmglLL9jQ | parool\_123niKbYpjqmglLL9jQ | 15fb36fe3a7cf495a963ebffc3619987 |
| kasutaja2 | parool\_123 | SjFwaC73SdgLLFcx | parool\_123SjFwaC73SdgLLFcx | 845255474a9e07ba488d6a5bed25342c |

Nagu näha, on soolamisel ka samasuguste paroolide räsid erinevad ning ründaja ei tea ilma välja arvutamata sedagi, kas kahe kasutaja paroolid on identsed.

Levinud vead
------------

**Soolade korduvkasutus**

Sama soola kasutamine kõikide räside soolamiseks vähendab turvalisust, kuna identsetel paroolidel tekivad ikkagi identsed räsid. Lisaks, kui sool on teada, on lihtne genereerida sõnastik selle konkreetse soola jaoks, mis eemaldab kõik soola kasutamise eelised.

**Liiga lühike sool**

Kui sool on liiga lühike, on ründajal võimalik genereerida sõnastik iga võimaliku soola jaoks. Näiteks kui sool koosneb kolmest tähemärgist, on võimalike soolade koguarv 95^3 ehk 857 357, mis võib tunduda suur, aga kui sõnastik koosneb 1 MB levinuimatest paroolidest, on kõigi sõnastike kogumaht 837 GB, mis pole tänapäeval väga palju.

Eelised
-------

Soolamine ei tee ühe konkreetse räsi murdmist keerulisemaks, vaid selle eelised tulevad välja paljude räside korraga murdmisel. Selle tõhusamalt tegemiseks genereeritakse sõnastikud levinumate paroolide ning nende räsidega ja võrreldakse murtavaid räsisid nendega. Korralikult soolatud paroolide räsid pole enam identsed ning seetõttu tuleb sõnastike asemel kasutada vähem efektiivset toore jõu meetodil murdmist.

Implementatsioon
----------------

**Varane Unix**

Esimesed soola implementeerivad Unixi süsteemid kasutasid modifitseeritud Data Encryption Standardi algoritmi funktsioonis *crypt()*. Et takistada kasutamast spetsiaalselt DES-i murdmiseks ehitatud kiipe, lisab *crypt()* 12-bitise soola, mille abil on sama parooli krüpteerimiseks 4096 võimalust.

**Moodne Unix**

Moodsamad Unixil põhinevad süsteemid on täiustanud turvalisust, kasutades funktsiooni *crypt()* asemel näiteks funktsiooni *bcrypt()*, mis kasutab 22-tähemärgist soola ja Blowfishi algoritmi DES-i asemel.

Viited
------

1. ↑  Morris, R. & Thompson, K. (1979). Password security: a case history. Communications of the ACM, 22(11), 594–597. doi:10.1145/359168.359172 (inglise)
2. 1 2 3  Secure Salted Password Hashing - How to do it ProperlyKasutatud 19.11.2018 (inglise)
3. ↑  CrackStationKasutatud 2018-11-19 (inglise)
4. ↑  Garfinkel, S. Schwarz, A. & Spafford, G. (2011). Practical UNIX and Internet Security, 3rd Edition [raamat]. Peatükk 4.3: How Unix Implements Passwords. Kasutatud 28.11.2018  (inglise)
5. ↑  PasslibKasutatud 28.11.2018 (inglise)