Una función hash es una función matemática que toma una string de entrada de cualquier longitud y la convierte en una string de salida de longitud fija. La salida de longitud fija se conoce como valor hash. Para ser criptográficamente segura y útil, una función hash debe tener las siguientes propiedades:
- Resistente a colisiones: dé dos mensajes m1 y m2, es difícil encontrar un valor hash tal que hash(k, m1) = hash(k, m2) donde k es el valor clave.
- Resistencia a la preimagen: Dado un valor hash h, es difícil encontrar un mensaje m tal que h = hash(k, m).
- Segunda resistencia a la preimagen: dado un mensaje m1, es difícil encontrar otro mensaje m2 tal que hash(k, m1) = hash(k, m2).
- Gran espacio de salida: la única forma de encontrar una colisión hash es a través de una búsqueda de fuerza bruta, que requiere verificar tantas entradas como salidas posibles tiene la función hash.
- Determinista: una función hash debe ser determinista, lo que significa que para cualquier entrada dada, una función hash siempre debe dar el mismo resultado.
- Efecto de avalancha: esto significa que por un pequeño cambio en la entrada, la salida cambiará significativamente.
- Rompecabezas amigable: esto significa que incluso si uno llega a conocer los primeros 200 bytes, no puede adivinar o determinar los siguientes 56 bytes.
- Mapeo de longitud fija: para cualquier entrada de longitud fija, la función hash siempre generará la salida de la misma longitud.
¿Cómo funcionan las funciones hash?
La función hash toma la entrada de longitudes variables y devuelve salidas de longitudes fijas. En las funciones hash criptográficas, las transacciones se toman como entradas y el algoritmo hash da una salida de un tamaño fijo.
El siguiente diagrama muestra cómo funcionan los hashes.
Tipos de funciones hash criptográficas
Hay varias clases diferentes de funciones hash. Algunas de las clases populares son:
1. Compendio de mensajes de evaluación de primitivas de integridad RACE (RIPEMD) : este conjunto incluye RIPEMD, RIPEMD-128, RIPEMD-160, RIPEMD-256, RIPEMD-320.
- De estos, RIPEMD-160 es el más común.
- El RIPEMD-128 original se basa en los principios de diseño utilizados en MD4.
- Los RIPEMD-256 y 320 tienen menos posibilidades de colisión accidental, pero no tienen mayores niveles de seguridad en comparación con RIPEMD-128 y RIPEMD-160.
2. Algoritmo de resumen de mensajes : esta familia comprende las funciones hash MD2, MD4, MD5 y MD6.
- MD5 es la función hash criptográfica más utilizada.
- Se utiliza para generar un resumen de 128 bits a partir de una string de 512 bits dividida en 16 palabras compuestas de 32 bits cada una.
- Ronald Rivest diseñó este algoritmo en 1991 para usarlo en la verificación de firmas digitales.
- Estos ya no se consideran métodos criptográficamente seguros y no deben usarse para la autenticación criptográfica.
3. BLAKE2: Se anunció el 21 de diciembre de 2012. BLAKE2 es una función hash criptográfica basada en BLAKE, diseñada con el objetivo de reemplazar los algoritmos MD5 y SHA-1 en aplicaciones que requieren alto rendimiento en software. Proporciona mejor seguridad que SHA-2 y es similar a SHS-3. Proporciona las siguientes características:
- Proporciona inmunidad a las extensiones de longitud.
- Elimina la adición de constantes a las palabras del mensaje.
- Simplifica el relleno y reduce el número de rondas de 16 a 12.
4. BLAKE3: se anunció el 9 de enero de 2020. BLAKE3 es una función criptográfica basada en Bao y BLAKE2. Es un par de veces más rápido que BLAKE2. Este algoritmo proporciona muchas características como paralelismo, XOF, KDF, etc.
5. Whirlpool: es una función hash criptográfica, descrita por primera vez en 2000. Es una versión modificada del Estándar de cifrado avanzado (AES). Whirlpool produce un hash de 512 bits.
6. Algoritmo hash seguro: la familia de SHA comprende cuatro algoritmos SHA: SHA-0, SHA-1 , SHA-2 y SHA-3 .
- SHA-0 es una función hash de 160 bits que fue publicada por el Instituto Nacional de Estándares y Tecnología en 1993.
- SHA-1 fue diseñado en 1995 para corregir las debilidades de SHA-0. En 2005, se encontró un método para descubrir colisiones en el algoritmo SHA-1 debido a que la empleabilidad a largo plazo se volvió dudosa.
- SHA-2 tiene las siguientes variantes SHA, SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224 y SHA-512/256. Es una función hash más fuerte y todavía sigue el diseño de SHA-1.
- En 2012, el algoritmo Keccak fue elegido como el nuevo estándar SHA-3.
- SHA-256 es la más famosa de todas las funciones hash criptográficas porque se usa ampliamente en la tecnología blockchain. El algoritmo hash SHA-256 fue desarrollado por la Agencia de Seguridad Nacional (NSA) en 2001.
Usos de las funciones hash en Blockchain
La string de bloques tiene varios usos diferentes para las funciones hash. Algunos de los usos más comunes de la función hash en blockchain son:
- Merkle Tree: utiliza funciones hash para asegurarse de que no sea factible encontrar dos árboles Merkle con el mismo hash raíz. Esto ayuda a proteger la integridad del encabezado del bloque almacenando el hash raíz dentro del encabezado del bloque y protegiendo así la integridad de las transacciones.
- Consenso de prueba de trabajo: este algoritmo define un bloque válido como aquel cuyo encabezado de bloque tiene un valor hash menor que el valor de umbral.
- Firmas digitales: las funciones de Hahs son la parte vital de las firmas digitales que garantizan la integridad de los datos y se utilizan para la autenticación de las transacciones de blockchain.
- La string de bloques: cada encabezado de bloque en un bloque de la string de bloques contiene el hash del encabezado del bloque anterior. Esto asegura que no sea posible cambiar ni un solo bloque en una string de bloques sin ser detectado. Como modificar un bloque requiere generar nuevas versiones de cada bloque siguiente, lo que aumenta la dificultad.
Por lo tanto, se puede concluir que las funciones hash son una parte vital de la tecnología de string de bloques utilizada para proteger la integridad y la inmutabilidad de los datos almacenados en la string de bloques.
Publicación traducida automáticamente
Artículo escrito por ritesh_nehru y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA