
Funciones
criptográficas de Hash
Las funciones de hash son quizás la cosa más importante que hay que entender si realmente quieres saber cómo funcionan las cadenas de bloques. Sabes lo que es una función si alguna vez has usado una hoja de cálculo y has hecho algo como =suma(5,7). Aquí, la suma es una función que toma una lista de entradas y las suma. La función de la función es sumar números.
Las funciones de hash son las mismas, pero no dan una simple suma. Producen lo que se llama un hash, parece un texto aleatorio, pero no lo es. Una función de hash toma como entrada casi cualquier tipo de datos digitales; números, texto, imágenes, videos, e-books de cualquier tamaño. Y produce lo que parece una larga cadena de caracteres aleatorios. También se puede llamar un resumen, pero lo llamaremos hashes. Entonces, ¿cuál es el problema con eso? ¿Cómo es eso útil? Bueno, las propiedades de las funciones de hashes criptográficas les dan algunos usos muy interesantes. Por ejemplo, piensa en cuando te conectas a una aplicación o a un sitio web. Cuando introduces tu contraseña, se realiza una comparación entre bastidores para ver si la contraseña que has introducido coincide con la contraseña almacenada para tu cuenta. Pero tu contraseña no se almacena sólo en algún archivo de texto del servidor. Eso haría que fuera demasiado fácil de hackear. Si un intruso tuviera acceso al archivo de contraseñas, tendría todas las contraseñas de usuario de todo el sistema. Así que lo que puedes hacer aquí es usar una función de hash. En lugar de almacenar tu contraseña, se puede crear un hash de tu contraseña y almacenarla. Ahora, los detalles son un poco más complicados que esto. Pero es más o menos así, cuando vas a iniciar sesión, la contraseña que escribes se hace un hash con la misma función que se usó cuando la creaste originalmente. Y luego se comparan las dos. Tu contraseña real no está almacenada en ningún sitio.
Ahora, podrías estar pensando, espera un minuto, ¿no podría alguien
tomar la contraseña de hash y hacer ingeniería inversa de la función de hash
para recuperar mi contraseña? La respuesta simple es no. De la misma manera que
si supieras que 12 es el resultado final de la función de suma en una hoja de
cálculo, no sabrías si sumé 7 y 5 o 4 y 8, y así sucesivamente. Excepto con las
funciones de suma criptográficas, las matemáticas son mucho más complicadas.
Pero una propiedad extremadamente importante de estas funciones de hash, que
las hace tan útiles, es su irreversibilidad. Si los hackers consiguen obtener
un archivo de contraseñas, la única manera de adivinar su contraseña es hacer
lo que se llama un ataque de diccionario en el que hacen un hash de palabras,
frases y variaciones comunes para ver si pueden encontrar coincidencias. Así
que si tu contraseña es "dog", podrán encontrarla bastante rápido.
Por eso, hoy en día, cuando creas contraseñas, se te pide que añadas letras,
mayúsculas, números y símbolos.
Porque es mucho menos probable que los hackers piensen en hacer algo como dOg22%, lo que hace que tu contraseña sea más segura. Si tu contraseña es 1234, y la mía es 1235, los hashes son completamente diferentes, aunque nuestras contraseñas difieran por un solo carácter. No sólo los hashes son irreversibles, sino que incluso las entradas que son muy similares o cercanas entre sí terminan siendo completamente diferentes. Y mientras se siga escribiendo el hash sigue cambiando, porque la entrada de texto está cambiando. Y si cambio sólo una letra, se obtiene un hash totalmente diferente. Puedes pensar en un hash como una firma única de una entrada dada.
Otra propiedad de estas funciones de hash es que las posibilidades de que una contraseña genere el mismo hash que otra, algo llamado colisión, son tan improbables que son, en la práctica, imposibles. También deberían ser rápidas, la función no debería necesitar mucha potencia de ordenador. Veamos otro ejemplo. Imagine que ha creado un documento legal y lo ha enviado para su revisión. Y se le envió de nuevo aprobado sin cambios. ¿Cómo puede saber que el documento no ha sido alterado de ninguna manera? Bueno, podrías leer cuidadosamente el documento línea por línea y asegurarte de que coincide con el original. O podrías tomar un resumen del documento original y compararlo con el del documento recibido. Debido a que la función de hash produce una huella digital única de sus datos de entrada, puede estar seguro de que si el documento fue alterado los hashes no coincidirían. Y que si los hashes coinciden, los documentos son idénticos.
Las diferentes funciones de hash criptográficas tienen nombres diferentes, y a menudo tienen números asociados relacionados con la longitud de su salida. Una función de hash común es SHA-128, que significa el algoritmo de hash estándar. Y su salida tiene una longitud de 128 bits. La salida del SHA-256 tiene una longitud de 256 bits. Recordemos que los bits son los 1 y 0 binarios que componen cualquier cosa digital. Más bits generalmente significa más seguridad, porque hay menos posibilidades de tener una colisión donde las salidas de 2 entradas son las mismas. Si imaginas una función hash con sólo una salida de 2 bits, es decir, un número de 0 a 4, puedes ver que es muy fácil encontrar 2 entradas que den la misma salida. Definitivamente tendrás una coincidencia después de 4 entradas diferentes. Pero para una función de hash de 128 bits, tendrías esta cantidad de posibles salidas de hash diferentes. Así que una colisión es muy poco probable. Otra característica crucial de las funciones de hash es que son deterministas. Así que, para una función dada como la SHA-256, la misma entrada siempre dará la misma salida. Otra cosa que hay que tener en cuenta, la salida de una función de hashes es un número. Puede que veas letras ahí, pero eso es porque se trata de un número hexadecimal.
Si nunca has visto un número hexadecimal antes, pueden parecer un poco extraños. Como saben, los números decimales, a los que estamos acostumbrados, contienen 10 símbolos diferentes en cada columna numérica. Así que mientras cuentas, dirías 5, 6, 7 y así sucesivamente. Los números hexadecimales, por otro lado, contienen 16 símbolos por cada columna numérica. Así que en lugar de detenernos en el 9 y retroceder hasta el 0, seguimos con A, B, C, D, E y F. Seguirías contando de la misma manera, pero tienes más números después del 9 para ir. Esto también se llama base 16, lo que significa que cada ranura de números tiene hasta 16 en lugar de 10. Lo que es importante recordar es que si ves algo así, debes saber que pueden representar un número hexadecimal.
Así que para recapitular, una función de hash puede tomar una entrada digital de cualquier tamaño y producir de forma determinista e irreversible una huella digital pequeña, de longitud fija y única, que cambia dramáticamente incluso con un cambio mínimo en los datos de entrada. Y lo hace sin demasiados gastos de computación.