La aplicación más conocida de las funciones hash es la tabla hash , una estructura de datos ubicua que proporciona una búsqueda e inserción de tiempo constante (en promedio).
Pero dos de mis aplicaciones favoritas de hashing, que son fáciles de entender y útiles, son los resúmenes de mensajes y los compromisos . Antes de continuar, es necesario mencionar que ambas aplicaciones de hashing solo funcionan para funciones de hash criptográficas [1]. Estas son la clase de funciones hash con la propiedad de irreversibilidad, es decir, dada la salida de una función hash criptográfica, es casi imposible encontrar la entrada. Ahora a las dos aplicaciones:
Resúmenes de mensajes
- ¿Se está utilizando Quora para entrenar inteligencia artificial para pasar la prueba de Turing?
- ¿Quedan archivos después de desinstalar una aplicación en Linux? En caso afirmativo, ¿son difíciles de encontrar y eliminar como en Windows?
- ¿Qué es mejor, BITS Goa CS o Hyderabad CS?
- Para una inteligencia artificial, ¿qué es la regresión simbólica no lineal?
- ¿Cuál es el estado de aceptación en una máquina finita determinista?
Digamos que decido cargar todos mis documentos, música y videos en Dropbox o Google Drive. ¡Estoy encantado de que ya no necesitaré almacenar 100 GB de archivos localmente en mi computadora! Pero podría estar un poco preocupado: ¿cómo puedo estar seguro de que Dropbox o Google no están alterando mis archivos?
Hashing proporciona una solución inteligente. Antes de cargar todos mis archivos en Dropbox / Drive, puedo calcular el hash de cada archivo. Cada hash suele tener solo unos pocos bytes (solo 32 bytes en el caso de la función hash SHA-256), por lo que almacenar hash para incluso un millón de archivos no será un problema.
Ahora, digamos que quiero descargar mi archivo bank_accounts.txt de Dropbox / Drive. Para verificar que no haya sido alterado, solo tengo que calcular el hash del archivo y verificar que coincida con el que he almacenado localmente. Todo esto funciona porque las funciones hash son muy difíciles de revertir. Si Dropbox o Google quisieran alterar uno de mis archivos, tendrían que cambiar el archivo de tal manera que el valor de hash resultante no cambie, ¡una tarea imposible!
Entonces, un resumen de mensaje es solo la idea de que el hash de un archivo es un buen resumen (resumen) de todo el contenido del archivo. Es computacionalmente inviable construir o encontrar otro archivo que comparta el mismo resumen del mensaje.
Compromiso
Digamos que estás jugando un juego de adivinar el número con tu amigo, y has pensado en un número aleatorio del 1 al 10 ^ 20. La mejor manera de evitar acusaciones de “¡cambiaste tu número!” sería escribir su número en un sobre sellado y colocar el sobre sellado a la vista. Después de que termine el juego, tu amigo puede abrir el sobre y verificar que no hiciste trampa. Este es un ejemplo de compromiso.
Las funciones de hash nos brindan una forma de realizar compromisos digitalmente. El concepto es sencillo: en el ejemplo de adivinar el número, simplemente hash hash el número que has pensado y le daría el valor hash a tu amigo. Digamos que su número aleatorio fue “123,456”; entonces el valor hash SHA-256 es “f8339a …” (una cadena larga de 64 caracteres). Puedes darle a tu amigo el valor “f8339a …” y tu amigo no podrá revertirlo a menos que intente descifrar cada valor de 1 a 10 ^ 20 *. Pero cuando el juego termina, tu amigo puede verificar que “f8339a …” es el hash de 64. Te has comprometido con éxito con tu valor.
——
Crédito a COS 597E: Temas avanzados en informática: tecnologías de Bitcoin y criptomonedas por presentarme estos conceptos.
——
* sin embargo, supongamos que el rango de números posibles fue de 1 a un millón. Una computadora moderna puede encontrar los hash SHA-256 de un millón de números en solo segundos. Entonces, en la práctica, el protocolo de compromiso se mejora al agregar una clave aleatoria que aumenta la “entropía”. Puede leer los detalles aquí: http://zoo.cs.yale.edu/classes/c…
Notas al pie
[1] Función hash criptográfica