# Funció hash criptogràfica

Una funció hash criptogràfica és una classe especial de funció hash amb certes propietats que la fan adequada en criptografia. La funció hash és un algorisme matemàtic que assigna dades (sortida o hash) d'una determinada mida a una cadena de bits (entrada o missatge) d'una altra mida. És una funció unidireccional (d'un sol sentit), amb moltes aplicacions en l'àmbit de la seguretat informàtica tals com signatures digitals, autenticació de missatges, detecció de duplicats d'arxius i sumatoris de comprovació de dades.

## Propietats

La funció hash ideal té cinc propietats principals :
* La funció és determinista: sempre s'obté el mateix resultat hash amb el mateix missatge d'entrada.
* La funció és ràpida per calcular qualsevol missatge d'entrada.
* La funció inversa (deduir el missatge a partir del hash) no és viable llevat que s'empri el mètode de força bruta (anar provant tots els missatges d'entrada).
* Un petit canvi al missatge d'entrada provoca un gran canvi a la sortida hash (no hi ha correlació amb el hash anterior).
* No poden existir dos missatges d'entrada diferents amb el mateix valor hash.

## Aplicacions de la funció hash criptogràfica
### Verificació d’arxius

En descarregar un arxiu, pot ser una bona idea comprovar que aquest sigui l'original, no ha sigut infectat o modificat de cap manera amb un virus. Per a aconseguir això, els creadors haurien de penjar l'arxiu original amb el seu codi hash; així, qualsevol que se’l descarregui seria capaç de comparar el valor hash de l'arxiu descarregat i comparar-lo per veure si tenen el mateix codi.

### Emmagatzemament de contrasenyes

Una bona forma de guardar les contrasenyes és utilitzar una funció de hash. S'obté el hash d’una contrasenya quan es crea i se'n guarda el valor. Més tard, quan l’usuari volgués entrar en el sistema només hauria d'introduir la contrasenya i obtenir-ne el hash. Si els dos són idèntics, es valida l’accés i pot entrar.
Aquesta forma és molt útil perquè, si un atacant accedís al llistat de hashes, com que no són reversibles, no seria capaç d’obtenir les contrasenyes originals.

### Cerca a bases de dades

Els codis hash poden fer més ràpides les cerques en bases de dades. Si s'emmagatzemen grans arxius en una taula i cal trobar si n'hi ha cap d'inclòs a la llista, això es pot aconseguir buscant i comprovant tots els arxius un per un o amb un hash criptogràfic de l'arxiu. En la majoria d’ocasions en què el hash té una mida inferior a la de les dades de l'arxiu, el temps de cerca es pot escurçar significativament.

### Creació d'una cadena de bloc (Blockchain)

Las cadenes de blocs són una tecnologia clau en l'actualitat. S'utilitzen per a les criptomonedes i quan es vol assegurar que les dades no es modifiquin en un futur. En resum, una cadena de bloc és un conjunt de dades en el que cada bloc guarda el hash de l'anterior; d’aquesta manera, si es modifica un bloc, la cadena es trencarà i s'exposarà l’arxiu que ha sigut modificat.

## Algorismes hash criptogràfics

* MD5: dissenyat el 1991. Produeix hash de 128 bits (16 bytes).
* SHA-1: publicat el 1995. Produeix hash de 160 bits (20 bytes).
* RIPEMD-160: publicat el 1996. Produeix hash de 160 bits (20 bytes).
* Whirlpool: publicat el 2000. Produeix hash de 512 bits (64 bytes).
* SHA-2: publicat el 2001. Produeix hash de 512 bits (64 bytes).
* SHA-3: publicat el 2015. Produeix hash de 512 bits (64 bytes).
* BLAKE2: publicat el 2012. Produeix hash de 512 bits (64 bytes).

## Referències

* ↑ «The In's and Outs of Cryptographic Hash Functions (Blockgeek's Guide)» (en anglès). Blockgeeks, 06-11-2018.
* ↑ «Cryptographic Hash Functions Explained: A Beginner’s Guide» (en anglès). Komodo, 14-08-2018.
* ↑ «Cryptographic Hash Functions - Introduction to Crypto and Cryptocurrencies | Coursera» (en anglès). https://www.coursera.org.+[Consulta: 6 novembre 2018].