Sal (criptografia)

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

La sal, en criptografia, comprèn bits aleatoris que són usats 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ó hash. 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 "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'un hash robat, l'atacant no pot simplement provar contrasenyes comuns (com a paraules de l'idioma anglès o noms), sinó calcular els hashes 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 en 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 usar 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 hashes precalculat de l'atacant no tenen valor. Haurà de calcular el hash de cada paraula juntament amb cada un 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 hashes, 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 de Unix feien servir un fitxer passwd per emmagatzemar els hashes de les contrasenyes salades (contrasenyes precedides per una sal de dos caràcters aleatoris). Noteu també que en aquestes versions antigues de Unix, la sal era també emmagatzemada al fitxer passwd (en text pla) juntament amb el hash de la contrasenya salada. L'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 hashing) usades per al propòsit.

Les primeres implementacions de Unix limitaven les contrasenyes a 8 caràcters i feien servir una sal de 12 bits, permetent així 4.096 possibles valors. Encara que 12 bits eren suficients per a molts propòsits en 1970 (encara amb certs dubtes expressades aleshores), el 2005 la capacitat de disc s'ha tornat prou barata que un atacant pot precomputar els hashes de milions de contrasenyes comuns, 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 6 caràcters i les més comunes de 7 i 8 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 hashes 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 multi-servidor on es fan servir sistemes de maneig centralitzat de contrasenyes per a "imposar" contrasenyes o hashes 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, 8 bytes de contrasenya i 2 bytes de sal, són 10 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 altre 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 hash a l'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 hashes 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.