Un hash es el resultado de una función hash, la cual es una operación criptográfica que genera identificadores únicos e irrepetibles a partir de una información dada. Los hashes son una pieza clave en la tecnología blockchain y tiene una amplia utilidad.

El nombre de hash se usa para identificar una función criptográfica muy importante en el mundo informático. Estas funciones tienen como objetivo primordial codificar datos para formar una cadena de caracteres única. Todo ello sin importar la cantidad de datos introducidos inicialmente en la función. Estas funciones sirven para asegurar la autenticidad de datos, almacenar de forma segura contraseñas, y la firma de documento electrónicos.

Las funciones hash son ampliamente utilizadas en la tecnología blockchain con el fin de agregar seguridad a las mismas. El Bitcoin, es un claro ejemplo de como los hashes pueden usarse para hacer posible la tecnología de las criptomonedas.

Historia de las funciones Hash

La aparición de la primera función hash data del año 1961. En ese entonces, Wesley Peterson creó la función Cyclic Redundancy Check (Comprobación de Redundancia Cíclica). Fue creada para comprobar cómo de correctos eran los datos transmitidos en redes (como Internet) y en sistema de almacenamiento digital. Fácil de implementar y muy rápida, ganó aceptación y es hoy un estándar industrial. Con la evolución de la informática y los computadores, estos sistemas se fueron especializando cada vez más.

Esto permitió crear nuevas y mejores funciones hash entre las que se pueden destacar:

  1. MD2: es una de las primeras funciones hash criptográficas. Creada por Ronald Rivest, en el año de 1989. Con un alto nivel de eficiencia y seguridad para el momento, era fundamental en la seguridad de Internet. Su consecuente evolución llevó a la creación de la función hash MD5. La cual es aún usada en ambientes donde la seguridad no es una alta prioridad.
  2. RIPEMD: es  una función hash criptográfica creada por el proyecto europeo RIPE en el año de 1992. Su principal función era la de sustituir al estándar del momento, la función hash MD4. En la actualidad aún se considera muy seguro, especialmente en sus versiones RIPEMD-160RIPEMD-256 y RIPEMD-320.
  3. SHA: el estándar actual de hashes criptográficos. Creada por la NSA en 1993, como parte de su proyecto interno para autentificar documentos electrónicos. SHA y sus derivadas son consideradas las funciones hash más seguras hasta el momento. Es de especial interés, SHA-256 por ser fundamental en la tecnología que hizo posible el Bitcoin.

Funciones Hash – ¿Cómo funcionan?

Las funciones hash funcionan gracias a una serie de complejos procesos matemáticos y lógicos. Estos procesos, son trasladado a un software de ordenador con el fin de usarlos desde el propio ordenador. Desde allí, podemos tomar cualquier serie de datos, introducirlos en la función y procesarlos. Con esto se busca obtener una cadena de caracteres de longitud fija y única para los datos introducidos. A la vez que se hace prácticamente imposible realizar el proceso contrario. Es decir, es prácticamente imposible obtener los datos originales desde un hash ya formado. Esto gracias a que el proceso de creación de hashes, es un proceso de un solo sentido.

Un ejemplo sencillo y de la vida diaria de este proceso sería; la realización de un pastel. Cada uno de los ingredientes del pastel, sería el equivalente a la entrada de datos. El proceso de preparación y cocción del pastel, sería el proceso de codificación de dichos datos (ingredientes) por la función. Al finalizar, obtenemos un pastel con características únicas e irrepetibles dadas por los ingredientes del mismo. Mientras que el proceso contrario (llevar al pastel a su estado de ingredientes inicial), es prácticamente imposible de realizar.

Un ejemplo visual del proceso se puede mostrar usando las funciones MD5 y SHA-256, en dos casos de uso distintos.

  • Ejemplo de como codifica una función MD5
  • Ejemplo de como codifica una función SHA-256

Una explicación más cercana

Observando ambos casos de uso podemos notar lo siguiente:

La primera entrada de datos, da como resultado un hash único, para los casos de MD5 y SHA-256. Resultados que están ajustados a la realidad de cada una de esas funciones.  En la segunda entrada se ha realizado una pequeña modificación en el texto. Esta aunque es mínima, alteró completamente el resultado de los hashes para MD5 y SHA-256.

Esto prueba que los hash serán únicos en todo caso. Lo que nos permite estar seguros, de que ningún actor malicioso podrá forzar hashes de forma sencilla. Aunque lograr esto no sea imposible, un hacker podría pasar cientos de años procesando datos para lograr su cometido.

Son estas dos observaciones las que nos dan la seguridad de usar este método en distintas áreas sensibles. Certificados digitales, firmas única de documentos sensibles o secretos, identificación digital y almacenamiento de claves, son algunos casos de uso. Pero no se detiene allí, puesto que la flexibilidad y seguridad de esta tecnología la hace idónea en muchas áreas.

Características de las funciones de hash

Entre las principales características de las funciones hash, se pueden mencionar las siguientes:

  1. Son fáciles de calcular. Los algoritmos de hash son muy eficientes y no requieren de grandes potencia de cálculo para ejecutarse.
  2. Es compresible. Esto quiere decir que, sin importar el tamaño de la entrada de datos, el resultado siempre será una cadena de longitud fija. En el  caso de SHA-256, la cadena tendrá una longitud de 64 caracteres.
  3. Funcionamiento tipo avalancha. Cualquier mínimo cambio en la entrada de datos, origina un hash distinto a la entrada de datos original.
  4. Resistencia débil y fuerte a colisiones. Hace referencia a que es imposible calcular un hash, que permita encontrar otro hash igual. Mejores conocidos como pre-imagen y segunda preimagen, es el concepto base de la seguridad de los hashes.
  5. Son irreversibles. Tomar un hash y obtener los datos que dieron origen al mismo, en la práctica no puede ser posible. Esto es uno de los principios que hacen a los hashes seguros.

Nivel de seguridad de las funciones hash

Las actuales funciones hash tienen un alto nivel de seguridad, aunque esto no significa que sean infalibles. Un buen ejemplo de esto es; la función hash MD5. En principio, las especificaciones de la misma prometían una seguridad muy alta. Su uso se extendió en Internet por la necesidad de un sistema de hash para mantener su seguridad. Pero en el año 1996, se pudo romper la seguridad de la función. Con ello quedó obsoleta y se recomendó abandonar su uso.

Por otro lado funciones como RIPEMD-160 y SHA-256, son tan complejas que su seguridad aún está garantizada. Por ejemplo, para SHA-256 se calcula que para romper su seguridad harían falta miles de años usando supercomputadores actuales. Lo mismo aplica en el caso de RIPEMD-160 y sus consecuentes evoluciones. Esto significa que ambas funciones aún brindan un alto nivel de seguridad y pueden utilizarse sin problemas.

Pero pese a que estas funciones son muy seguras, no significa que no se investiguen y desarrollen otras más opciones. Esta constante evolución nos dice que siempre tendremos a disposición herramientas seguras para usar en cualquier caso.

¿Cuánto sabes, criptonauta?

¿Las funciones hash son seguras de usar?

¡CIERTO!

Las funciones hash son construidas bajo el uso de potentes funciones matemáticas y lógicas que garantizan altos niveles de seguridad. En primer lugar, un hash ya generado no puede ser devuelto a un estado anterior. En segundo lugar, cada hash es único y cualquier mínimo cambio en los datos de entradas generará un nuevo hash distinto. Bajo estas dos premisas, los hash ofrecen entonces un altísimo nivel de seguridad capaz de hacer frente a cualquier tipo de necesidad.

Las funciones hash en el mundo Blockchain

Gracias a que son rápidos, eficientes, económicos computacionalmente y únicos, las funciones de hash son muy usadas en la tecnología blockchain. Cuando Satoshi Nakamoto publicó su whitepaper de Bitcoin, explicó el porque y como uso de SHA-256 y RIPEMD-160 en Bitcoin. Desde entonces, la tecnología blockchain ha evolucionado mucho, pero las bases siguen siendo las mismas. Hacer uso de criptografía fuerte y hashes para que la tecnología sea muy segura, privada e incluso anónima.

De todos los usos de las funciones de hash en blockchain se pueden destacar los siguientes casos:

Creación de la dirección (Address Wallet)

Las direcciones de los monederos de criptomonedas, son una representación segura de las claves públicas de la cartera. Las claves públicas, por lo general son muy largas y complejas. Es por esta razón; que las blockchains utilizan funciones de hash para derivar una dirección más corta. Este proceso se usa en varias ocasiones para acortar la dirección y agregar una capa extra de seguridad.

En Bitcoin, el proceso de crear una dirección de monedero, usa las funciones hash RIPEMD-160 y SHA-256. Ambas son usadas para mejorar la seguridad del proceso y hacer que las mismas sean únicas e irrepetibles.

Proceso de Minería

El proceso de minería, es otra etapa importante de la tecnología blockchain donde se usan las funciones hash. En Bitcoin, la minería hace un uso intensivo de cálculo de hashes SHA-256 de forma distribuida en cada uno de sus nodos. Los mineros, son los responsables de calcular millones de hashes para crear nuevos bloques Bitcoin. El proceso también se usa para verificar las transacciones que se hacen en la red.

Si bien el proceso de calcular hashes es muy rápido, su uso intensivo dificulta el proceso drásticamente. Esto lleva a los mineros a usar un alto poder de cómputo para resolver los acertijos Bitcoin. Al resolverlos, los mineros son recompensados con 12.5 BTC por bloque. Esto es un valor cercano a los $ 45,000 (Febrero 2019). Este incentivo económico es el que mantiene el funcionamiento y la seguridad de toda la red Bitcoin.

Contratos Inteligentes (Smart Contracts)

Esta es otra área donde se usan mucho las funciones de hashes. Las blockchains como Bitcoin, Ethereum, NEO o TRON hacen uso de contratos inteligentes para potenciar distintas aplicaciones. Estas aplicaciones son manejadas por un contrato público entre partes. Sin embargo, muchos de estos datos son muy sensibles, o simplemente es demasiada información para ser almacenada en una blockchain. Por lo que la mejor forma de solventar estos escenarios es a través de funciones de hash. De esta manera, todo el contrato es público pero información enlazada o que se quiere mantener privada no es publicada. Estos datos pueden incluir nombres, direcciones, direcciones de monederos, datos de terceros participantes. Es decir; información privilegiada y solo de interés entre partes.

Los hashes también son usados para versionar los contratos. Es decir, un contrato público tiene un hash único que viene dado por lo que dice el contrato. Si el contrato es modificado, el contrato anterior es terminado y se genera uno nuevo con un nuevo hash. De esta manera el hash determina el contrato correcto a usar dentro de aplicación descentralizado facilitando su control. Otro uso de las hash en contratos inteligentes es; para marcar la validez y autenticidad del mismo. Un ejemplo puede ser; un contrato hecho para la venta de una casa con un pago hecho en criptomonedas. La realización del contrato y su hash serán testigos inalterables de venta realizada entre las partes.