Aprender

|

¿Qué es una función hash?

¿Qué es una función hash?

Las funciones matemáticas que ayudan a que Bitcoin funcione

Las funciones hash son funciones matemáticas que se utilizan en criptografía, seguridad de la información y finanzas. Debido a sus propiedades únicas y confiabilidad, se utilizan en Bitcoin para seguridad, privacidad y en operaciones de minería de Bitcoin.

Una función hash toma una entrada y produce una salida (llamada "hash"). La entrada es información de cualquier tamaño, mientras que la salida siempre será de longitud fija, típicamente como una secuencia de números y letras.

Es como una máquina, donde las materias primas son las entradas y un producto terminado de tamaño estándar es la salida.

Las formas específicas en que las funciones hash toman entradas para producir hashes, así como las relaciones únicas entre entradas y hashes, han llevado a su uso generalizado en diferentes industrias. Aquí hay un desglose de las características importantes de las funciones hash:

  1. Entrada variable, salida fija: Independientemente de la longitud de la entrada, ya sea un solo carácter o un libro entero, el hash que se produce siempre será de la misma longitud. Esta uniformidad de las salidas es crucial para la previsibilidad en el almacenamiento y procesamiento.
  2. Determinista: Dada una entrada particular, una función hash siempre producirá exactamente el mismo hash, sin importar cuántas veces lo repitas. Esta repetibilidad es útil para fines de verificación, ya que cualquier cambio en la entrada, como cambiar una sola letra en un libro, resultará en un hash diferente.
  3. Unidireccional: Las funciones hash están diseñadas para ser unidireccionales, lo que significa que puedes usar una entrada para producir un hash, pero no puedes tomar un hash y averiguar cuál fue su entrada. Si bien el proceso de generar un hash a partir de una entrada es rápido y fácil, el proceso inverso de generar la entrada a partir de un hash es, en todos los sentidos prácticos, imposible.
  4. Imprevisibilidad del hash: Es imposible predecir el hash de una entrada dada sin procesarla realmente a través de la función hash. Esta imprevisibilidad es una característica de seguridad, ya que impide que los posibles atacantes deduzcan la entrada solo mirando el hash.
  5. Resistente a colisiones: Dos entradas diferentes no deben producir el mismo hash, lo que se conoce como "colisión".
  6. Asimetría entre creación y verificación: Dado que el hash es imprevisible, crear un hash con características específicas (como un hash que comienza con 5 ceros: "00000") es computacionalmente intensivo y consume mucho tiempo. La única forma conocida de hacer esto es con prueba y error, simplemente ejecutando la función hash una y otra vez con nuevas entradas. Sin embargo, una vez que se ha encontrado una entrada que produce un hash deseado, es rápido y fácil verificar que la entrada corresponde a la salida. Esta asimetría entre producir un hash específico y verificar su validez es particularmente importante en sistemas que dependen de la prueba de trabajo (minería de Bitcoin).

Puedes pensar en ello como una biblioteca de la ciudad que imprime un sello único en cada uno de sus libros, que captura completamente toda la información de ese libro. Aunque algunos libros son cuentos cortos (datos de entrada pequeños) y otros son novelas largas (datos de entrada grandes), el sello (también conocido como el hash) siempre es del mismo tamaño. Copias idénticas de un libro siempre tendrán sellos idénticos, pero cambiar una sola letra en un libro cambiará completamente su sello. Además, es súper fácil verificar si un libro y un sello coinciden, pero si solo tienes un sello, no hay forma de determinar a qué libro pertenece.

¿Cómo utiliza Bitcoin las funciones hash?

Bitcoin utiliza funciones hash en sus operaciones, incluyendo la minería de Bitcoin, la integridad de la información y la generación de direcciones de Bitcoin.

La función hash más utilizada en Bitcoin se llama "SHA-256" (también conocida como Secure Hash Algorithm 256-bit). Esta función hash es una función estándar de la industria que se utiliza ampliamente en la banca, seguridad de la información y redes de comunicación. Con toda probabilidad, si haces clic en el icono de 🔒 junto a la URL del sitio web y ves el certificado de seguridad del sitio web, encontrarás que está utilizando SHA-256 para asegurar tu conexión.

A continuación se presentan las diferentes formas en que las funciones hash se utilizan en Bitcoin.

Minería de Bitcoin

La minería de Bitcoin es un proceso que cumple con el doble propósito de procesar transacciones y emitir nuevos bitcoin en circulación. Involucra a computadoras (también conocidas como mineros) usando su poder computacional para producir hashes (también conocido como “hashpower”), para competir por agregar el próximo bloque de transacciones a la blockchain de Bitcoin y recibir un pago de recompensa de nuevos bitcoin por hacerlo. Es un sistema que democratiza la actualización del registro de transacciones de Bitcoin, sin depender de ninguna autoridad central.

¿Cómo funciona?

Los mineros toman entradas para tratar de producir un hash con propiedades específicas (un cierto número de ceros al principio), que está establecido por el software de Bitcoin. La entrada incluye información fija y variable:

  1. Información fija: La versión del software de Bitcoin, el hash del bloque anterior, el hash de las últimas transacciones del bloque (también conocido como "raíz de Merkle"), una marca de tiempo y la configuración de dificultad requerida establecida por el software de Bitcoin.
  2. Información variable: Un número, llamado "nonce".

Dado que los hashes son impredecibles, la única forma de producir un hash deseado es mediante prueba y error, volviendo a ejecutar la función hash con un nuevo nonce variable. El primer minero en producir un hash válido transmite su hallazgo y gana el derecho de agregar el próximo bloque a la blockchain. Aunque es difícil producir el hash deseado, es trivialmente fácil verificar si el hash es válido, lo que hace que la verificación sea un proceso fácil.

El software de Bitcoin ajusta automáticamente la dificultad de este proceso de hash cambiando el número de ceros requeridos para el hash objetivo para asegurar que los nuevos bloques se agreguen en promedio cada 10 minutos.

Asegurando la integridad de la blockchain

Las funciones hash se utilizan para asegurar la integridad de los datos dentro de cada bloque. Cada bloque en la blockchain contiene el hash del bloque anterior, que a su vez contiene el hash de su bloque anterior, y así sucesivamente, formando una "cadena" ininterrumpida de bloques (también conocida como una cadena de bloques o “blockchain”) que se remonta al comienzo de Bitcoin.

Alterar la información en cualquier bloque anterior cambiaría drásticamente su hash, y consecuentemente, el hash de cada bloque subsiguiente ya que todos están conectados a través de hashes secuenciales.

Esto hace que la manipulación de datos de bloque sea esencialmente imposible, ya que cualquier cambio sería fácilmente detectable e inmediatamente rechazado por todos los participantes en la red.

Asegurando la integridad de las transacciones

Las funciones hash se utilizan para mantener la integridad de los datos de las transacciones dentro de cada bloque. Esto se hace usando una estructura de datos llamada "árbol de Merkle," que es una forma de estructurar y organizar hashes.

Estos son los conceptos básicos de cómo se hashean las transacciones en árboles de Merkle:

  1. Hashear transacción: Cada transacción dentro de un bloque de Bitcoin es hasheada.
  2. Emparejar hashes: Los hashes de transacciones individuales se emparejan y se hashean juntos.
  3. Repetir emparejamiento: El proceso de emparejar y hashear se repite una y otra vez, usando los hashes resultantes del paso anterior.
  4. Crear una raíz de Merkle: El proceso iterativo continúa hasta que queda un hash final, llamado "raíz de Merkle," que se almacena en el encabezado del bloque.

La "raíz de Merkle" representa un resumen completo de todos los datos de transacciones del bloque. Es una forma rápida y eficiente de resumir datos y se puede usar para verificar si una transacción específica está incluida en un bloque, sin necesidad de todos los datos del bloque. También puede prevenir la manipulación, ya que cualquier pequeño cambio en los datos de la transacción cambiará completamente ese hash de transacción y todos los hashes subsiguientes, incluyendo la raíz de Merkle.

Manejo de claves privadas y públicas

Una clave privada es un código numérico secreto generado al azar que se utiliza para firmar transacciones, proporcionando prueba de propiedad y control sobre el bitcoin asociado con una dirección de Bitcoin específica.

Esta clave privada se somete a una serie de transformaciones criptográficas, incluyendo el hash, para producir una clave pública. Este proceso asegura que mientras la clave pública pueda compartirse libremente, la clave privada, crucial para acceder y transferir bitcoin, permanezca secreta e inalcanzable de derivar a partir de la información pública.

Generando direcciones de Bitcoin

Bitcoin utiliza una combinación de SHA-256 y otra función hash llamada RIPEMD-160 para generar direcciones de Bitcoin. La clave pública de un usuario, que se deriva de su clave privada, primero se hashea usando SHA-256, luego se hashea nuevamente usando RIPEMD-160. Este proceso de dos pasos, a menudo combinado con un checksum para la verificación de errores, genera la dirección de Bitcoin que es lo que se utiliza para enviar bitcoin.

Lee más

Lightning

¿Qué es la red Lightning?

La red global de pagos bitcoin que es instantánea, privada y de bajo o sin costo