Una función hash criptográfica (CHF) es un algoritmo que se puede ejecutar en datos como un archivo individual o una contraseña para producir un valor llamado suma de comprobación.
El uso principal de un CHF es verificar la autenticidad de un dato. Se puede suponer que dos archivos son idénticos solo si las sumas de verificación generadas a partir de cada archivo, utilizando la misma función hash criptográfica, son idénticas.
Algunas funciones hash criptográficas de uso común incluyen MD5 y SHA-1, aunque también existen muchas otras. A menudo se las denomina "funciones hash", pero eso no es técnicamente correcto. Una función hash es un término genérico que abarca los CHF junto con otros tipos de algoritmos como las comprobaciones de redundancia cíclica.
Funciones hash criptográficas: un caso de uso
Digamos que descargas la última versión del navegador Firefox. Por alguna razón, necesitaba descargarlo de un sitio que no sea el de Mozilla. Debido a que no está alojado en un sitio en el que ha aprendido a confiar, le gustaría asegurarse de que el archivo de instalación que acaba de descargar sea exactamente el mismo que ofrece Mozilla.
Usando una calculadora de suma de verificación, calcula una suma de verificación usando una función hash criptográfica particular, como SHA-2, y luego la compara con la publicada en el sitio de Mozilla. Si son iguales, puede estar razonablemente seguro de que la descarga que tiene es la que Mozilla pretendía que tuviera.
¿Se pueden revertir las funciones hash criptográficas?
Las funciones hash criptográficas están diseñadas para evitar la capacidad de revertir las sumas de verificación que crean de nuevo a los textos originales. Sin embargo, a pesar de que son virtualmente imposibles de revertir, no se garantiza al 100 por ciento que protejan los datos.
Los piratas informáticos pueden usar una tabla de arcoíris para descifrar el texto sin formato de una suma de verificación. Las tablas Rainbow son diccionarios que enumeran miles, millones o incluso miles de millones de sumas de verificación junto con su valor de texto sin formato correspondiente.
Aunque técnicamente esto no invierte el algoritmo hash criptográfico, bien podría serlo, dado que es muy simple de hacer. En realidad, dado que ninguna tabla de arco iris puede enumerar todas las sumas de verificación posibles que existen, generalmente solo son útiles para frases simples como contraseñas débiles.
Aquí hay una versión simplificada de una tabla de arcoíris para mostrar cómo funcionaría cuando se usa la función hash criptográfica SHA-1:
Ejemplo de tabla de arcoíris | |
---|---|
Texto sin formato | SHA-1 Suma de control |
12345 | 8cb2237d0679ca88db6464eac60da96345513964 |
contraseña1 | e38ad214943daad1d64c102faec29de4afe9da3d |
amoamiperro | a25fb3505406c9ac761c8428692fbf5d5ddf1316 |
Jenny400 | 7d5eb0173008fe55275d12e9629eef8bdb408c1f |
dallas1984 | c1ebe6d80f4c7c087ad29d2c0dc3e059fc919da2 |
Un pirata informático debe saber qué algoritmo hash criptográfico se utilizó para generar las sumas de comprobación para calcular los valores.
Para mayor protección, algunos sitios web que almacenan contraseñas de usuario realizan funciones adicionales en el algoritmo hash criptográfico después de generar el valor pero antes de almacenarlo. Este proceso produce un nuevo valor que solo el servidor web entiende y que no coincide con la suma de comprobación original.
Por ejemplo, después de ingresar una contraseña y generar la suma de verificación, se puede separar en varias partes y reorganizar antes de que se almacene en la base de datos de contraseñas, o se pueden intercambiar ciertos caracteres con otros. Al intentar autenticarse la próxima vez que el usuario inicia sesión, el servidor invierte esta función adicional y la suma de verificación original se genera nuevamente para verificar que la contraseña del usuario es válida.
Seguir estos pasos limita la utilidad de un hack en el que se roban todas las sumas de comprobación. La idea es realizar una función que se desconoce, por lo que si el pirata informático conoce el algoritmo hash criptográfico pero no el personalizado, entonces conocer las sumas de verificación de la contraseña no es útil.
Contraseñas y funciones hash criptográficas
Una base de datos guarda las contraseñas de los usuarios de manera similar a una tabla de arcoíris. Cuando se ingresa su contraseña, se genera la suma de verificación y se compara con la registrada con su nombre de usuario. Entonces se le concede acceso si los dos son idénticos.
Dado que un CHF produce una suma de verificación no reversible, ¿es seguro para usted hacer su contraseña tan simple como 12345, en lugar de 12@34 $5, ¿simplemente porque las sumas de comprobación en sí mismas no se pueden entender? No, y este es el motivo.
Estas dos contraseñas son imposibles de descifrar simplemente mirando las sumas de verificación:
MD5 para 12345: 827ccb0eea8a706c4c34a16891f84e7b
MD5 para 12@34$5: a4d3cc004f487b18b2ccd4853053818b
A primera vista, puede pensar que está bien usar cualquiera de estas contraseñas. Esto es cierto si un atacante intentó descifrar su contraseña adivinando la suma de verificación MD5, lo que nadie hace, pero no es cierto si se realiza un ataque de fuerza bruta o de diccionario, que es una táctica común.
Un ataque de fuerza bruta ocurre cuando se realizan múltiples intentos aleatorios para adivinar una contraseña. En este caso, sería fácil adivinar 12345, pero bastante difícil averiguar el otro al azar. Un ataque de diccionario es similar en el sentido de que el atacante puede probar cada palabra, número o frase de una lista de contraseñas comunes (y no tan comunes), y 12345 es una de esas contraseñas comunes. contraseñas.
Aunque las funciones hash criptográficas producen sumas de control difíciles o imposibles de adivinar, debe usar una contraseña compleja para todas sus cuentas de usuario locales y en línea.
Más información sobre funciones hash criptográficas
Puede parecer que las funciones hash criptográficas están relacionadas con el cifrado, pero las dos funcionan de manera diferente.
El cifrado es un proceso bidireccional en el que algo se cifra para volverse ilegible y luego se descifra para volver a usarse con normalidad. Puede cifrar los archivos que ha almacenado para que nadie que acceda a ellos pueda utilizarlos, o puede utilizar el cifrado de transferencia de archivos para cifrar los archivos que se mueven a través de una red, como los que carga o descarga en línea.
Las funciones hash criptográficas funcionan de manera diferente, ya que las sumas de verificación no están destinadas a invertirse con una contraseña de eliminación de hash especial. El único propósito que sirven los CHF es comparar dos datos, como cuando se descargan archivos, se almacenan contraseñas y se extraen datos de una base de datos.
Es posible que una función hash criptográfica produzca la misma suma de comprobación para diferentes datos. Cuando esto sucede, se denomina colisión, lo cual es un gran problema considerando que el objetivo de la función es hacer sumas de verificación únicas para cada entrada de datos.
Pueden ocurrir colisiones porque cada CHF produce un valor de una longitud fija independientemente de los datos de entrada. Por ejemplo, la función hash criptográfica MD5 genera 827ccb0eea8a706c4c34a16891f84e7b, 1f633b2909b9c1addf32302c7a497983 y e10adc3949ba59abbe56e057f20f883e para tres bloques de datos totalmente diferentes.
La primera suma de control es de 12345. El segundo se generó a partir de más de 700 letras y números, y el tercero es de 123456. Las tres entradas tienen diferentes longitudes, pero los resultados siempre tienen solo 32 caracteres, ya que se utilizó la suma de comprobación MD5.
No hay límite para la cantidad de sumas de verificación que se pueden crear porque se supone que cada pequeño cambio en la entrada produce una suma de verificación completamente diferente. Debido a que existe un límite en la cantidad de sumas de verificación que puede producir un CHF, siempre existe la posibilidad de que encuentre una colisión.
Esta es la razón por la que se han creado otras funciones hash criptográficas. Mientras que MD5 genera un valor de 32 caracteres, SHA-1 genera 40 caracteres y SHA-2 (512) genera 128. Cuanto mayor sea el número de caracteres que tenga la suma de comprobación, menor será la probabilidad de que se produzca una colisión.