En vez de usar claves públicas y privadas para encriptar o desencriptar (como con ECC o RSA), se puede usar funciones hash para proteger datos. Se procesa texto plano de cualquier tamaño y crea un único identificador de longitud fija. En otras palabras, coge un texto genérico (como el de este artículo) y lo convierte en una cadena de números y letras.

Funciones Hash

Este “hash” es exclusivo del mensaje; por lo que un mensaje A y un mensaje B no pueden tener la misma función hash, e incluso el mensaje A siempre tendrá el mismo hash siempre que el mensaje no cambie. Por lo tanto, cualquier cambio en el mensaje original creara un hash totalmente nuevo.

A esto también se le conoce como “collison-resistant hash function”, lo que significa que no habrá dos mensajes diferentes que produzcan el mismo hash. El hash resultante generalmente tiene un tamaño entre 128 y 512 bits.

En contraste con la criptografía RSA y ECC, las funciones hash no se usan para facilitar la comunicación entre diferentes partes. Se utilizan para almacenar de forma segura o para crear un acuerdos a través de un mensaje entre diferentes partes sin revelar el texto involucrado. The hash puro no se puede usar, tampoco, para reconstruir el texto original del mensaje y el usuario debe conocer algunas propiedades del texto sin formato para descifrar el hash. Esto hace que las funciones hash sean ideales para guardar contraseñas seguras en servidores de terceros.

Cuando el usuario desea iniciar sesión en la plataforma, se utiliza la misma función hash para crear un hash de la contraseña proporcionada.El hash resultante se compara con el hash almacenado en el servidor de contraseñas. Por lo tanto, el usuario sólo tendrá acceso si el original y el nuevo hash coinciden.

Además, se puede incrementar la seguridad de las contraseñas almacenadas a través de un proceso conocido como “salting”. Con ello, se agrega un valor aleatorio (llamado “the salt”) a la contraseña de texto sin formato antes del proceso de hash. Pero el “salting” sólo es efectivo si el random salt elegido es lo suficientemente largo para que al ser añadido a la contraseña, cree suficientes valores hash que el atacante no pueda generar una tabla con todos los posibles hashes provenientes de un diccionario “salted”

Propiedades

Entre las principales propiedades de las funciones hash encontramos las siguientes:
  • El hash de cualquier mensaje tiene que ser relativamente fácil de calcular , lo que hace que la implementación sea práctica;
  • Una forma computable : debería ser completamente imposible encontrar el mensaje original de un hash. Por ejemplo, para que Alice se autenticara a Bob, ella tendría una ‘S’ secreta junto con la marca de tiempo actual. El único requisito es que Bob sepa sobre el secreto también. Una vez que Bob recibe el hash del mensaje, puede codificar la ‘S’ secreta junto con la marca de tiempo del mensaje y obtener el mismo hash. El hash solo será seguro si es imposible (probabilísticamente improbable) calcular el mensaje original del hash sin conocer el secreto compartido.
  • Una función hash debe ser determinista : el mismo mensaje siempre debe dar como resultado el mismo hash.
  • Cualquier cambio en el texto original debe cambiar el valor de hash por completo; por lo tanto, no hay correlación entre los valores hash .
  • Un valor hash nunca debe estar conectado a dos mensajes diferentes .
Es importante tener en cuenta que una función hash puede mostrar que los datos no han cambiado durante un período de tiempo, o después de la transmisión, ya que los usuarios siempre generarían el mismo hash al haber utilizado la misma función hash. Esta propiedad es utilizada por la arquitectura de blockchain. La información está encadenada a través de hash vinculados. Cada unidad adicional se llama bloque . Los bloques mantienen el hash de toda la historia de la cadena de bloques. Por lo tanto, cualquier cambio en las entradas históricas afecta fundamentalmente a toda la cadena resultante. Sin embargo, el hash solo no puede determinar qué usuario tiene autoridad sobre los datos representados por hash. Un sistema debe implementar firmas digitales basadas en cifrado de clave privada-pública para asociar datos específicos a un usuario. El usuario encriptaría el hash con su clave privada. Las funciones hash generalmente varían en el tamaño del hash generado. Las siguientes funciones hash son las más utilizadas:  SHA-224,  SHA-256 (Bitcoin),  SHA-384 o  SHA-512, donde el número indica el número de bits.

Otras aplicaciones

Además de lo anterior, existen otras aplicaciones para el uso de funciones hash, tales como:
  1. Verificación de la integridad de un mensaje : las funciones hash pueden usarse para mostrar que un mensaje no ha sido cambiado. Cualquier cambio en el mensaje tendrá un cambio irreversible y dramático en el hash asociado. Las Blockchains obtienen su inmutabilidad a través de esta característica de hashes.
  2. Almacenamiento y verificación de contraseñas : los servidores centralizados no almacenan las contraseñas en blanco, sino un hash de la contraseña en sí. Si el usuario proporciona su contraseña al sistema, el hash de la contraseña se genera con la misma función hash y se compara con la función hash almacenada.
  3. Prueba de trabajo : en prueba de trabajo, el minero tiene que encontrar el hash correcto para un rompecabezas criptográfico. Dependiendo de la longitud del hash y el número de ceros necesarios en el frente, la dificultad de la función hash variará. Bitcoin fue el primero en implementar esta técnica.
Las funciones hash varían tanto en su aplicación como en su velocidad, seguridad y disponibilidad. El tipo de función hash elegida depende de la aplicación prevista.

Variaciones

Función hash de camaleón

Las funciones de camaleón también se llaman funciones de trampa, ya que incluyen una puerta trampa para encontrar colisiones en el dominio de las funciones. Las funciones de Trapdoor son resistentes a colisiones, es decir, no se puede obtener el mismo hash a partir de diferentes valores de entrada. En otras palabras, no habrá dos mensajes diferentes que produzcan el mismo hash. “Estas funciones hash se caracterizan por la propiedad no estándar de ser resistente a colisiones para el firmante, pero la colisión es tratable para el destinatario”. (7) Las firmas de camaleón evolucionaron de las funciones de camaleón. Estas firmas le permiten al firmante firmar un documento digital. El destinatario del documento firmado podrá ver que se ha firmado, pero los detalles del documento siguen siendo privados.

Resumen

A diferencia de las claves de encriptación como RSA y ECC, las funciones hash son computables en un solo sentido. Las funciones de hash permiten a los usuarios generar el hash de un mensaje de cualquier tamaño y almacenarlo de forma segura. Incluso si el hash es recibido por un tercero, el texto sin formato no sería accesible sin ninguna información sobre el texto sin formato. El tipo de función hash utilizada depende de la aplicación y el tipo de datos almacenados. Las funciones hash varían en seguridad, velocidad y disponibilidad. Las funciones hash resultantes, más largas y más complejas se utilizan para una mayor seguridad, mientras que las funciones hash más cortas proporcionan ventajas de velocidad. Las aplicaciones de hash son diversas e incluyen PoW mining, casos de uso en la arquitectura blockchain, administración de contraseñas y seguridad de datos. Se continúan desarrollando nuevas ideas de implementación que involucran hash.

Fuentes

https://technet.microsoft.com/en-us/library/aa998077(v=exchg.65).aspx  https://www.youtube.com/watch?v=dCvB-mhkT0w  https://crypto.stackexchange.com/questions/1190/why-is-elliptic-curve-cryptography-not-widely-used-compared-to-rsa  https : //hackernoon.com/algorithms-explained-diffie-hellman-1034210d5100  https://eprint.iacr.org/2017/011.pdf  https://arxiv.org/pdf/1109.1877.pdf  https://es. wikipedia.org/wiki/Cryptographic_hash_function  https://en.wikipedia.org/wiki/List_of_hash_functions  https://blockgeeks.com/guides/what-is-hashing/