Sal (criptografia)

De Viquipèdia
Dreceres ràpides: navegació, cerca

La sal, en criptografia, és una sèrie de bits aleatoris usada com una de les entrades en una funció derivada de claus. L'altra entrada és habitualment una contrasenya. La sortida de la funció derivada de claus s'emmagatzema com la versió xifrada de la contrasenya. La sal pot ser usada com a part d'una clau en un xifrat o altre algorisme criptogràfic. La funció de derivació de claus generalment utilitza una funció resum. De vegades el vector d'inicialització, un valor generat prèviament, es fa servir com sal.

Les dades «sal» compliquen els atacs de diccionari, ja que xifren cadascuna de les entrades del mateix: cada bit de sal duplica la quantitat d'emmagatzematge i computació requerides.

Per a més seguretat, el valor de la sal es guarda en secret, separat de la base de dades de contrasenyes. Això aporta un gran avantatge quan la base de dades és robada, però la sal no. Per determinar una contrasenya a partir d'una funció resum robada, l'atacant no pot simplement provar contrasenyes comunes (com a paraules de l'anglès o noms), sinó calcular els resums de caràcters aleatoris (almenys la porció de l'entrada que se sap és la sal ), cosa que és molt més lenta.

En alguns protocols, la sal es transmet com a text pla amb les dades xifrades, de vegades juntament amb el nombre d'iteracions emprades per a la generació de la clau (per millorar la seva fortalesa). Els protocols criptogràfics que utilitzen sal inclouen el SSL i Ciphersaber. Els primers sistemes UNIX usaven una sal de 12 bits, les implementacions modernes usen valors grans.

La sal està relacionada amb el Nonce.

El benefici aportat per emprar una contrasenya amb sal és que un atac simple de diccionari contra els valors xifrats és impracticable si la sal és prou llarga. A més, un atacant no podrà crear rainbow tables, diccionaris de valors xifrats (contrasenya+sal), ja que trigaria massa o ocuparia massa espai. Això forçaria l'atacant a utilitzar el mecanisme d'autenticació proporcionat (el qual «coneix» el valor correcte de sal).

Exemples[modifica | modifica el codi]

Suposem que la clau privada (xifrada) d'un usuari és robada, i se sap que fa servir una de 200.000 paraules angleses com a contrasenya. El sistema fa servir una sal de 32 bits. La clau salada és ara la contrasenya original unida a una sal aleatòria de 32 bits. A causa d'això, els resums precalculats de l'atacant no tenen valor. Haurà de calcular el resum de cada paraula juntament amb cada una de les 232 (4.294.967.296) possibles combinacions de sals fins que es trobi una coincidència. El nombre total de possibles entrades es pot obtenir multiplicant el nombre de paraules al diccionari pel nombre de possibles sals:

 2^{32}\times 200\,000 = 8{,}58993459 \times 10^{14}

Per completar un atac per força bruta, l'atacant haurà ara computar prop de 800 trilions de resums, en lloc de només 200.000. Fins i tot quan la contrasenya en si mateixa sigui simple, la sal secreta fa que trencar la contrasenya sigui radicalment més difícil.

Implementacions Unix[modifica | modifica el codi]

Versions més antigues d'Unix feien servir un fitxer passwd per emmagatzemar els resums de les contrasenyes salades (contrasenyes precedides per una sal de dos caràcters aleatoris). Noteu també que en aquestes versions antigues d'Unix, la sal era també emmagatzemada al fitxer passwd (en text pla) juntament amb el hash de la contrasenya salada. El fitxer passwd pot ser llegit públicament per tots els usuaris del sistema. Ha de ser llegible perquè programari amb privilegis d'usuari pugui trobar noms d'usuari i altra informació. La seguretat de les contrasenyes és aleshores protegida només per les funcions (xifrat o resum) usades per al propòsit.

Les primeres implementacions d'Unix limitaven les contrasenyes a huit caràcters i feien servir una sal de dotze bits, el que permet 4.096 possibles valors. Encara que dotze bits eren suficients per a molts propòsits el 1970 (encara amb certs dubtes expressades aleshores), el 2005 la capacitat de disc s'ha tornat prou barata per què un atacant pot precomputar els resums de milions de contrasenyes comunes, incloent totes les 4.096 possibles variacions de sal per a cada contrasenya, i emmagatzemar-los en un disc dur portàtil. Un atacant amb gran pressupost pot construir un magatzem de discos amb totes les contrasenyes de sis caràcters i les més comunes de set i vuit caràcters emmagatzemades en forma xifrada, per a cadascuna de les 4.096 possibles sals. Veure password cracking.

Beneficis addicionals[modifica | modifica el codi]

El modern sistema de shadow password, en què els resums de contrasenyes i altra informació de seguretat s'emmagatzemen en un fitxer no públic, d'alguna manera mitiga aquestes preocupacions. Tot i així, segueixen sent rellevants en instal·lacions multiservidor on es fan servir sistemes de maneig centralitzat de contrasenyes per a «imposar» contrasenyes o resums de contrasenyes a múltiples sistemes. En aquestes instal·lacions, el compte root a cada sistema individual podria ser tractat com a menys confiat que els administradors del sistema centralitzat de contrasenyes, així que segueix valent la pena assegurar-se que la seguretat de l'algorisme de hashing de contrasenyes, incloent-hi la generació de valors de sal únics, és adequada.

Les sals també ajuden contra rainbow tables ja que, en efecte, estén la longitud i potencialment la complexitat de la contrasenya. Si les rainbow bles no tenen contrasenyes amb la mateixa longitud (per exemple, vuit bytes de contrasenya i dos bytes de sal, són deu bytes totals de password) i complexitat (les sals no alfanumèriques incrementen la complexitat de les contrasenyes estrictament alfanumèriques) que la contrasenya salada, la contrasenya no es trobarà. Si es esbrina, s'haurà d'eliminar la sal de la contrasenya abans de poder usar-la.

Les sals també fan molt més lents els atacs de diccionari i els atacs de força bruta al crack grans quantitats de contrasenyes (però no en el cas de cracker només una contrasenya). Sense les sals, un atacant que està crackejat moltes contrasenyes al mateix temps només necessita capolar i comparar-lo amb els altres hashes. En canvi, amb sals, totes les contrasenyes tindran diferents sals, de manera que cada intent haurà de ser hasharon per separat per a cada sal, el que és molt més lent pel fet que la generació de hashes normalment consumeix molts recursos computacionals.

Un benefici menor d'una sal és la següent: dos usuaris podrien escollir la mateixa cadena de caràcters com a contrasenya, o el mateix usuari pot triar la mateixa contrasenya en dues màquines. Sense una sal, aquesta contrasenya podria ser emmagatzemada amb la mateixa cadena resum al fitxer de contrasenyes. Això podria descobrir que les dues comptes tenen la mateixa contrasenya, permetent a qualsevol que conegui una de les contrasenyes accedir a l'altre compte. Salant els resums de la contrasenya amb dos caràcters aleatoris, fins i tot si les dues comptes fan servir la mateixa contrasenya, seria estrany que algú pogués descobrir això llegint els fitxers passwd.