Algoritmos de hash

Los algoritmos de hash son funciones matemáticas que convierten datos de entrada de cualquier tamaño en una salida de tamaño fijo (hash), utilizados para la integridad de datos, almacenamiento de contraseñas y consenso de blockchain.

Los algoritmos de hash son primitivas criptográficas fundamentales que toman una entrada arbitraria y producen una salida de longitud fija llamada hash o resumen. Están diseñados para ser deterministas (la misma entrada siempre produce la misma salida), rápidos de calcular y difíciles de revertir (función unidireccional).

Las funciones hash criptográficas deben satisfacer propiedades adicionales: resistencia a colisiones (difícil encontrar dos entradas con el mismo hash), resistencia a preimagen (difícil encontrar la entrada a partir del hash) y el efecto avalancha (pequeños cambios en la entrada causan grandes cambios en la salida).

Los algoritmos clave incluyen: SHA-256 (Bitcoin, ampliamente utilizado), Keccak-256 (Ethereum), SHA-3 (estándar NIST), Blake2/Blake3 (rápido, seguro) y Poseidon (amigable con ZK). Diferentes algoritmos ofrecen compensaciones en seguridad, velocidad e idoneidad para usos específicos como pruebas de conocimiento cero.

Los usos en blockchain incluyen: minería de prueba de trabajo, árboles Merkle para integridad de datos, generación de direcciones, ID de transacciones y esquemas de compromiso. Comprender el hashing es esencial para la seguridad y el desarrollo de blockchain.

        graph LR
  Center["Algoritmos de hash"]:::main
  Pre_cryptography["cryptography"]:::pre --> Center
  click Pre_cryptography "/terms/cryptography"
  Pre_mathematics["mathematics"]:::pre --> Center
  click Pre_mathematics "/terms/mathematics"
  Rel_proof_of_work["proof-of-work"]:::related -.-> Center
  click Rel_proof_of_work "/terms/proof-of-work"
  Rel_digital_signatures["digital-signatures"]:::related -.-> Center
  click Rel_digital_signatures "/terms/digital-signatures"
  classDef main fill:#7c3aed,stroke:#8b5cf6,stroke-width:2px,color:white,font-weight:bold,rx:5,ry:5;
  classDef pre fill:#0f172a,stroke:#3b82f6,color:#94a3b8,rx:5,ry:5;
  classDef child fill:#0f172a,stroke:#10b981,color:#94a3b8,rx:5,ry:5;
  classDef related fill:#0f172a,stroke:#8b5cf6,stroke-dasharray: 5 5,color:#94a3b8,rx:5,ry:5;
  linkStyle default stroke:#4b5563,stroke-width:2px;

      

🧒 Explícalo como si tuviera 5 años

Generated ELI5 content

🤓 Expert Deep Dive

Generated expert content

❓ Preguntas frecuentes

¿Por qué no se puede revertir un hash para obtener la entrada original?

Las funciones hash comprimen cantidades arbitrarias de entrada en una salida de tamaño fijo, por lo que muchas entradas posibles se asignan a cada hash (se pierde información). También están diseñadas con una complejidad matemática que hace que la reversión sea computacionalmente inviable. Esto se llama resistencia a la preimagen.

¿Qué algoritmo de hash utiliza Bitcoin?

Bitcoin utiliza SHA-256 (SHA-256d, en realidad doble SHA-256) para la minería de prueba de trabajo y el hashing de transacciones, y RIPEMD-160 combinado con SHA-256 para la generación de direcciones. Estas elecciones equilibran la seguridad, el rendimiento y la resistencia a ataques conocidos.

¿Qué hace que una función hash sea 'amigable con ZK'?

Las funciones hash amigables con ZK como Poseidon y Pedersen están diseñadas para ser eficientes cuando se usan dentro de circuitos de prueba de conocimiento cero. Los hashes tradicionales como SHA-256 son costosos en pruebas ZK porque usan operaciones bit a bit que son costosas de probar. Los hashes amigables con ZK usan operaciones aritméticas nativas de los sistemas de prueba.

🔗 Términos relacionados

Requisitos previos:

📚 Fuentes