¿Qué es el hashing y cómo funciona el proceso?
El hashing es un método criptográfico que transforma registros de datos y caracteres de cualquier longitud en valores hash compactos y fijos. Ofrece más seguridad que el cifrado, ya que los valores hash no pueden volver a convertirse en valores originales sin una clave. El hashing es especialmente importante para la gestión y la seguridad de las bases de datos, los datos de los usuarios, la gestión de las contraseñas y la autentificación de los accesos.
¿Qué es el hashing?
El hashing es una importante herramienta criptográfica para transformar los datos en los llamados valores hash. Para ello se utiliza una función hash especial, normalmente en forma de algoritmo. La tarea central del hashing se puede adivinar por la traducción del término al español, esta es, “picar o mezclar”. Y en el hashing no ocurre nada más que eso: conjuntos de datos como contraseñas, datos de empresas y usuarios u otras formas de datos se descomponen y se transforman en una nueva forma abreviada, el valor hash. En el proceso de hashing, los valores hash siempre tienen la misma longitud y representan registros de datos originales. Con las tablas hash, los valores hash pueden almacenarse en bases de datos de forma compacta, segura y ahorrando recursos.
La ventaja del hashing: los valores hash no pueden volver a convertirse a su forma original sin una clave. Incluso si caen en las manos equivocadas, los ciberdelincuentes no pueden hacer nada con los valores hash. Aunque a menudo se confunde el hashing con el cifrado, no es lo mismo: los valores hash no se cifran, sino que se transforman en una cadena de caracteres completamente nueva, por lo que no pueden descifrarse. Para un mapeo, se necesitaría más bien las claves correspondientes, el algoritmo utilizado y los datos originales asociados a los valores hash.
¿Cómo funciona el hashing?
El proceso de hashing se compone de tres elementos:
- Función hash: la función hash suele ser un algoritmo criptográfico que descompone completamente datos de diferentes longitudes, los resuelve y los transforma en cadenas siempre de la misma longitud. Estos valores hash son significativamente más cortos y compactos que los valores originales.
- Valor hash: los valores hash son el resultado de la función hash. En el contexto del método hash utilizado, siempre tienen una longitud fija de caracteres hexadecimales, a diferencia de los valores originales. La longitud fija de los valores hash depende del método empleado.
- Tablas hash: los valores hash pueden almacenarse como tablas hash en bases de datos. Estas requieren mucho menos espacio que el almacenamiento de los registros de datos originales. Para crearlas, los registros de datos reciben valores de índice específicos a través del hashing, que indican dónde se encuentra el registro de los datos. De esta forma, se reduce significativamente el tiempo de procesamiento y la potencia de cálculo en la búsqueda de información.
El funcionamiento del hashing se basa en cinco propiedades características que garantizan la seguridad y la fiabilidad:
- Determinismo: la función hash debe generar siempre un valor hash de longitud fija y corta independientemente de la longitud de las diferentes entradas.
- No legible: el hashing transforma los valores originales en valores hash, que no se pueden leer directamente. No debe haber forma de descifrar el valor hash en el sentido clásico y generar el texto o cadena original a partir de él.
- Seguridad contra colisiones de valores: no se debe asignar el mismo valor hash a diferentes entradas. Si dos valores originales reciben el mismo valor hash, hay una colisión. Los valores hash distintivos y únicos reducen los puntos de ataque y aumentan la seguridad. Sin embargo, dependiendo de la aplicación, puntualmente se puede buscar una colisión.
- Continuidad o no continuidad: en principio, los valores hash ofrecen mayor seguridad si son no-continuos, es decir, si diferentes conjuntos de datos originales reciben valores hash lo más diferentes posible. El uso de valores hash continuos, por otro lado, es preferible cuando el hashing se utiliza para gestionar conjuntos de datos y entradas similares.
- Velocidad: el hashing no solo permite una mayor seguridad, sino también un acceso más rápido a las bases de datos.
Hashing: áreas de aplicación
Las ventajas y la funcionalidad del hashing quedan especialmente claras con la ayuda de varios casos de uso y áreas de aplicación. Las áreas típicas de aplicación son:
- Creación de tablas hash
- “Encriptación” de datos importantes
- Búsqueda de duplicados
- Sumas de comprobación y firmas digitales
- Búsqueda de datos similares
- Sistemas de autenticación
- Caching
Gestión de bases de datos
El hashing ofrece la ventaja de que grandes cantidades de datos pueden almacenarse de forma más compacta y eficiente en forma de tablas hash. Para ello, las cadenas de caracteres se combinan como tabla hash en la base de datos en una dirección y bajo una posición concreta con valores hash. Esto ahorra memoria, aumenta la seguridad de las bases de datos y acelera la búsqueda de entradas específicas en la tabla hash. Los valores hash y las tablas hash optimizan la organización y la gestión de las infraestructuras de índices y datos.
A modo de ejemplo: las bases de datos de clientes suelen incluir información importante como nombres, datos de contacto o direcciones. Si hay que buscar información específica en una base de datos, una búsqueda regular llevaría mucho tiempo. Esto se debe a que habría que escanear toda la base de datos en busca de los valores buscados. Sin embargo, mediante el hashing se pueden formar bloques de datos con una posición y dirección específica en la base de datos. Así, durante el proceso de búsqueda, el ordenador salta inmediatamente a la posición a la cual se puede dirigir el valor hash asociado en una tabla hash.
Firmas digitales y sumas de comprobación
El hashing también juega un papel importante como método de autenticación. Por ejemplo, se utiliza para crear firmas digitales, las llamadas huellas digitales. De esta forma, es posible confirmar la integridad de la comunicación entre el emisor y el receptor. Asimismo, también se pueden vincular las contraseñas con un valor hash al crear una nueva cuenta de usuario. Cada vez que se quiere iniciar sesión en la cuenta, la contraseña introducida se convierte en hash y se compara con el valor hash almacenado. En un proceso de recuperación de contraseña, se generará también un valor hash para la nueva clave.
A modo de ejemplo: las firmas digitales pueden utilizarse para comprobar si los mensajes, las descargas o incluso las páginas web son seguras. Para ello, los remitentes generan valores hash a partir de los mensajes o proporcionan un valor hash al descargar un programa. Los destinatarios, a su vez, también generan un valor hash con la misma función hash. Este se compara con el valor hash suministrado, normalmente encriptado. Un claro ejemplo de ello es el cifrado SSL y TLS de Internet. En este caso, el servidor web envía el llamado certificado de servidor al navegador. El hashing genera una clave de sesión a partir del certificado, que el servidor recibe, descifra y confirma. Tras la autenticación, se produce el tráfico de datos HTTPS. El SFTP funciona de forma similar.
Contraseñas y otros datos sensibles
Para almacenar datos sensibles, como contraseñas o datos de acceso y de usuario, el hashing ofrece una seguridad considerablemente mayor. Esto se debe a que no se almacenan en la base de datos en su forma original o “simplemente” encriptados. En su lugar, los registros de datos se descomponen en valores hash, que son inútiles incluso en caso de robo de datos sin los medios o claves adecuados. Cuando se introduce una contraseña, el valor hash calculado para la contraseña se compara con el valor hash almacenado. El hashing también se utiliza a veces en el caching para que los datos almacenados temporalmente, como las páginas webs visitadas o los datos de inicio de sesión y de pago, sean ilegibles para personas no autorizadas.
Ejemplo: incluso el almacenamiento de contenidos diversos, como textos o archivos de audio y vídeo, puede ser más seguro gracias al hashing. Las estructuras binarias de los archivos se transfieren a valores hash compactos que pueden utilizarse para referenciar el bloque de datos correspondiente. Dado que los valores hash están vinculados a la posición de la base de datos, los datos buscados no solo pueden encontrarse más rápidamente, sino que también son ilegibles para los atacantes sin la clave correspondiente y no pueden transferirse a la forma original.
¿Qué ventajas tiene el hashing?
Las ventajas del hashing de un vistazo:
- Los datos sensibles se pueden almacenar y gestionar de forma segura y compacta.
- Los conjuntos de datos transferidos en valores hash no pueden ser “descifrados” o transferidos de nuevo a su forma original sin más.
- El acceso a las bases de datos es más rápido porque los valores hash están asociados a posiciones en la base de datos.
- Los valores hash robados no son útiles para los atacantes sin las aplicaciones apropiadas o la información sobre la función hash.
- El intercambio seguro de datos, mensajes o programas informáticos puede autenticarse o firmarse de forma fiable mediante el hashing.
Hashing y blockchain
El hash y las funciones hash son una parte central del blockchain o cadena de bloques. Para autenticar las transacciones con las criptomonedas como Bitcoin, se generan hashes durante el proceso de minado. Bitcoin, por ejemplo, funciona con el algoritmo de hash SHA-256, que convierte cadenas de cualquier longitud en una cadena fija, o hash, de 64 caracteres. Estas legitiman, autentifican y documentan las criptotransacciones oficiales, las depositan en la cadena de bloques y garantizan así un alto grado de seguridad.
En el blockchain, el hashing cumple tres funciones principales:
- Minería: el rendimiento de la minería de una red de criptomonedas también se denomina hashrate, que muestra cuántos mineros están activos. Los mineros generan hashes resolviendo rompecabezas matemáticos. Si un hash es válido, se valida un bloque de transacción. Cuanto mayor sea la tasa de hash, más monedas o tokens se podrán generar. La criptominería se basa, por ende, en algoritmos de hash basados en transacciones.
- Blockchain: las transacciones registradas y validadas se documentan secuencialmente como bloques. Se añaden a la cadena de bloques en el curso de la minería. Cada bloque está vinculado al anterior y contiene el valor hash del bloque precedente. Esto excluye la posibilidad de que se añada un bloque no válido o perjudicial.
- Generación de claves: el hashing también se utiliza para transferir criptomonedas. En este caso, la autenticación tiene lugar a través de claves públicas y privadas mediante hashing.
¿Cómo de seguro es el hashing?
En principio, los expertos en protección de datos aconsejan el uso de hashing para almacenar las bases de datos y los datos sensibles de la forma más segura posible. El hash es preferible al cifrado clásico porque los valores hash no contienen pistas sobre los registros de datos originales ni pueden ser “descifrados”. Incluso los ataques de fuerza bruta, en los que se prueban combinaciones de cadenas hasta encontrar una coincidencia, requieren un número astronómico de intentos.
Sin embargo, hay actores maliciosos que hacen coincidir listas de valores hash robados con tablas arcoíris, también llamadas tablas rainbow. Son listas de valores hash robados y credenciales asociadas a ellos. Si un valor hash de la base de datos coincide con un valor hash de la lista rainbow y la contraseña asignada, entonces hay una brecha de seguridad. Por esta razón, también se aconseja cambiar regularmente las contraseñas, actualizarlas periódicamente y utilizar algoritmos de hashing nuevos o actualizados. Por ejemplo, el Internet Engineering Taskforce (IETF) recomendó los siguientes algoritmos hash en 2021:
- Argón2
- Bcrpt
- Scrypt
- PBKDF2
Otra forma de hacer el hashing aún más seguro son los procesos de encriptado informático, como por ejemplo salting y pepper. Con “Salting”, cada contraseña transmitida en valores hash recibe una cadena adicional generada aleatoriamente. “Salts”, con una longitud recomendada de 16 caracteres, hace que los ataques de fuerza bruta sean casi imposibles y, por tanto, ofrece una seguridad aún más fiable. Si a continuación se añade un código de 32 caracteres llamado “Pepper” para todas las contraseñas, los valores hash robados son casi imposibles de descifrar, ni siquiera, aunque hayan conseguido el “Salt” adecuado.