Introducción

Una de las funciones criptográficas más importantes en la programación del Bitcoin, es la función hash SHA-256. Esta función hash es la responsable de mantener los mecanismos de la Prueba de Trabajo (Proof of Work - PoW) de Bitcoin. Pero también es usado en los mecanismos de generación de direcciones, así como los identificadores de transacción y de bloques.

Básicamente, SHA-256 es una de las bases en la construcción de la seguridad de Bitcoin. Pero ¿Cómo funciona esta función hash? ¿Qué la hace tan especial? ¿Por qué fue elegida para realizar todas estas tareas? Pues bien examinemos estas y otras preguntas a continuación.

Relacionado: ¿Qué es un hash?

Origen de SHA-256

La historia del origen de la función hash SHA-256 nos lleva a los años en lo que el Internet comenzaba a expandirse con fuerza por el mundo. Las comunicaciones digitales en Internet necesitaban de un medio rápido y seguro para comprobar los distintos datos que transitaban la red. 

En un principio, esta tarea era realizada por la función hash MD5. Esta era una función extremadamente sencilla y computacionalmente poco costosa. Sin embargo, MD5 fue clasificada como una función poco segura en 1996. En ese año, el criptoanalista Hans Dobbertin descubrió un problema de seguridad en dicha función. Este hecho abría las puertas a que cualquier hacker con los recursos y la habilidad pudiera romper dicho algoritmo. Un acto que le llevaría a vulnerar la seguridad de las comunicaciones de Internet.

Ante esta situación, la NSA (Agencia de Seguridad Nacional de Estados Unidos) comenzó con el desarrollo de una serie de funciones hash para sustituir a MD5. Un trabajo que fue finalizado en 2001, cuando la NSA presentó ante el NIST (Instituto Nacional de Estándares y Tecnología de los Estados Unidos) la familia de funciones SHA-2. En esta familia de funciones están las opciones SHA-224, SHA-256, SHA-384 y SHA-512. Funciones que luego se transformaron en un Estándar Federal de Procesamiento de la Información (FIPS), bajo la identificación FIPS PUB 180-4.

Desde entonces, SHA-256 tomo un espacio muy especial en el mundo de la informática. Esto debido a que SHA-256, con sus claves de 256 bits era un punto de equilibrio entre seguridad y rapidez de cálculo. Su aplicación rápidamente se extendió a su uso en software para servidores y otras aplicaciones donde se necesitaba de una función hash robusta y segura.

Desentrañando el funcionamiento de SHA-256

Ahora bien, la seguridad de SHA-256 (y la de toda su familia de funciones SHA-2) se basa en la construcción de una serie de funciones criptográficas bien conocidas. Estas son las funciones hash de Merkle–Damgård creada por Ralph Merkle e Ivan Damgård en 1979, usando para ello una compresión one-way del tipo Davies–Meyer. Un método por el cual buscaban garantizar la resistencia a colisiones o repeticiones de hashes. Además de garantizar la mayor seguridad posible para la función.

Con estas bases algorítmicas y matemáticas, la NSA construyó SHA-256 como una función hash donde puedes introducir grandes cantidades de datos y obtener un resumen de longitud fija de dicha información. El sistema incluso garantiza un efecto avalancha, donde el más mínimo cambio en la información introducida termina generando un hash completamente distinto.

Para verlo de una forma más sencilla, imagina a SHA-25 como una caja donde grandes cantidades de información son reducidas a un pequeño mensaje único e irrepetible. De hecho, si introduces la misma información una y otra vez en la caja, obtendrás siempre el mismo resultado, debido a que la función es determinista. Pero si por algún motivo, alteras la información de alguna forma, incluso la más pequeña el efecto avalancha cambiará el resumen por completo.

Un pequeño experimento para SHA-256

Para entender mejor el funcionamiento de SHA-256, usaremos este generador online

Desde allí introduciremos la siguiente cadena de texto:

Una prueba para el hash SHA-256 en Cointelegraph

Al introducirla obtenemos el siguiente resultado:

00a11fee77e4ac6a3dac454f0d537ef959a58e3ec827bff28a522a1c73999021

 https://lh3.googleusercontent.com/rN9isc6_7Jk_XnEnK4KFGUhoArO5WOK0unEnqsFI0gbTPY5uStIs2580FR6eTmJxVTeyhPrlFuN7KKlSfNEbNEicI7zXELprt6kafZTRFhns-Mz5jDafaPz3-vvrAVTaEC3mBKV_

Cómo puedes ver el resultado, tiene una longitud de 64 letras en total y es completamente críptico. Si vuelves a introducir, la misma cadena de texto, sin importar cuantas veces lo hagas obtendrás el mismo resultado. Sin embargo, si cambiamos ligeramente la cadena de texto, toda la cadena cambiará drásticamente. Probemos este segundo punto introduciendo lo siguiente:

Una prueba para el hash SHA-256 en Cointelegraph.

El único cambio introducido ha sido un "." al final de la cadena que inicialmente usamos. Sin embargo, el resultado de la función hash es completamente distinto:

1403b5cedd3477732f70cd1aa5aeaba77cc4357a38603f54813c3d7626ff9c1e

Este cambio drástico se ha dado por el conocido "efecto avalancha", que nos transforma totalmente el resultado de nuestro hash.

https://lh4.googleusercontent.com/7ddwsd3623lEQDIvtvdvgaBRt9NarYgb6nsMWm5lLwwcPCHBReW5SlX6ryotKTxwjmvcqPop2fKMpBAHtw2VJWhX4wh7V5oVMadz7tMWm9uvpZSYOtSkqJO64aThk1O17nOjIfwy

Ahora bien seguramente te preguntarás ¿Es posible tomar el resultado de la función SHA-256 y transformarlo en la cadena de texto que le dio origen? La respuesta corta es: No, eso es prácticamente imposible de momento. Realizar los cálculos para hacer el proceso inverso de momento es muy complejo, incluso para las supercomputadoras más poderosas que existen. Esto nos garantiza la seguridad del algoritmo frente a distintos ataques. Sin embargo, muchos criptoanalistas buscan activamente fallas de este tipo de funciones para mejorarlas y crear nuevas opciones seguras para todos.

Especialmente cuando confiamos en estas características para tener un alto nivel de seguridad en comunicaciones por Internet. De hecho, en la actualidad SHA-256 es parte de la base de la seguridad Internet. Por ejemplo, los certificados de seguridad de las páginas webs en su mayoría llevan una firma digital certificada por un hash SHA-256. De hecho, el sitio web de Cointelegraph usa este sistema para mantener la seguridad de las comunicaciones entre nuestros servidores y los cientos de miles de visitantes que van a nuestro sitio web.

https://lh6.googleusercontent.com/aeKMjeMy5BSFexHHyzWLCkS4ZSONjHV38VvKE6xIi8My4bc0jT9SzQtggm-ahbTs_y58TkK-CcPH1JnP7LBHAi5_mLs3WbXgJIaYbQ3hnvYynI6IvaVVc3FD93BPQeGsQyxFkaPc

Pero no solo eso, SHA-256 es usado en varios sistemas operativos y otras funcionalidades digitales con el fin de crear sistemas seguros. Por ejemplo, en GNU/Linux es común ver cómo las claves de los usuarios son almacenadas usando SHA-256 o su función hermana, SHA-512. Estos sistemas reciben la clave del usuario y la almacenan en un hash derivado de estas funciones. 

De esa forma, cada vez que el sistema pregunta por la clave, lo que sucede es que se calcula el hash de la misma y si coincide se da acceso al sistema. Así, solo existe una forma de acceder, tener la clave correcta, porque de lo contrario sería imposible sacar la clave haciendo el proceso contrario. Esto nos demuestra también otra cosa y es que las funciones hash como SHA-256 son universales y actúan de la misma forma en distintos sistemas y plataformas.

SHA-256 en Bitcoin y otras criptomonedas

La seguridad que brinda SHA-256 resulta muy llamativa para distintos usos, y uno de esos usos lo podemos ver en Bitcoin y otras criptomonedas. En 2009, cuando Satoshi Nakamoto liberó al mundo el código fuente de Bitcoin, este mostraba un fuerte uso de la función SHA-256. Prácticamente, la seguridad de Bitcoin se asentaba sobre esta función hash en particular.

Pero conozcamos los distintos puntos donde Nakamoto y su Bitcoin hicieron uso de SHA-256

Minería de Bitcoin e identificación de bloques

En primer lugar, Nakamoto diseñó el Protocolo de Prueba de Trabajo de Bitcoin para usar SHA-256. Esto significa, que los mineros de Bitcoin debían resolver complejos acertijos criptográficos en los que tenían que hacer uso intensivo de esta función. Un trabajo nada fácil, incluso teniendo en cuenta que SHA-256 es una función muy optimizada.

El truco de Nakamoto para lograr este "trabajo forzado", es hacer que la red le indique a los mineros conseguir un target u objetivo. Así los mineros deberían buscar este objetivo calculando repetidamente hashes SHA-256. El trabajo se considera terminado cuando el minero consigue un hash SHA-256 cuyo valor decimal es menor al target u objetivo que ha solicitado la red.

Adicional a esto, el sistema se ajusta de forma regular para aumentar o disminuir la dificultad del trabajo que se asigna. Este ajuste de dificultad está relacionado con el incremento en la potencia de la red para calcular dichos hashes SHA-256. Es decir, mientras más potencia tenga la red más difícil se hace el trabajo de minería y más costoso es calcular los hashes correcto para alcanzar el target. En definitiva, Nakamoto diseñó el sistema de minería de criptomonedas más seguro que se conoce hasta el momento. Uno que exige mucha potencia de cálculo y grandes cantidades energía.

El resultado de este enorme trabajo se resume en el Block ID o Hash del Bloque, un identificador único e irrepetible que podemos ver en cada bloque de Bitcoin. Este hash es efectivamente un hash SHA-256 en todo su esplendor.

Generación de direcciones de Bitcoin

Por otro lado, Nakamoto dispuso de la función SHA-256 para generar las direcciones de Bitcoin. Las direcciones de Bitcoin son el resultado de usar un sistema de criptografía asimétrica que usa la función de firma digital ECDSA. Las firmas digitales ECDSA son muy extensas y complejas, por lo que Nakamoto diseñó un método para hacerlas más sencillas.

En primer lugar, se generan las claves públicas y privadas usando ECDSA. Seguidamente, se toma la clave pública y se pasa por un proceso de hash usando SHA-256. Al hash resultante, se le aplica otra función hash de nombre RIPEMD-160, que genera una dirección más corta que la SHA-256 pero igualmente única y segura.

Inmediatamente al hash RIPEMD-160 se le agrega un identificador hexadecimal "0x00". Este identificador es la forma digital de identificar la dirección como Bitcoin. Inmediatamente después, se aplica dos veces la función SHA-256 nuevamente y a su resultado se le toman 4 bytes (8 letras) para unirlas al final del hash RIPEMD-160 con el identificador 0x00 agregado. Finalmente se usa una función de nombre Base58Check, que termina arrojando la dirección Bitcoin final.

Este complejo proceso garantiza lo siguiente:

  1. Todas las direcciones de Bitcoin (al menos las legacy) comienzan en 1. Existen otras direcciones en Bitcoin actualmente que empiezan con 3 o con bc, pero su proceso de generación es ligeramente distinto.
  2. Todas las direcciones de Bitcoin son únicas e irrepetibles.
  3. Las direcciones de Bitcoin son fácilmente verificable.

Identificación de transacciones

Otro uso vital de la función SHA-256 lo vemos en la identificación de transacciones. Cada vez que emitimos una transacción en Bitcoin, esta va acompañada de un identificador que en realidad es un hash SHA-256. Esto es importante, porque que esta manera cada transacción en Bitcoin tiene un identificador único e irrepetible, evitando así la manipulación de las mismas.

Relacionado: ¿Qué es la criptografía asimétrica?

SHA-256 en otros proyectos de criptomonedas

Bitcoin no es el único proyecto donde SHA-256 es usado. La verdad es que prácticamente todos los proyectos de criptomonedas derivados de Bitcoin usan SHA-256 para distintos. Incluso, los proyectos no derivados lo usan. La razón es muy sencilla: SHA-256 es un estándar muy seguro y es una función sencilla de implementar y conocida por no dar problemas.

En la actualidad el listado de criptomonedas que usan SHA-256 para su minería y otros procesos es muy amplio, pero podemos mencionar claramente las siguientes:

  1. Bitcoin Cash
  2. Bitcoin Cash SV
  3. Namecoin
  4. Peercoin
  5. RSK Token
  6. Counterparty
  7. Steem Dollars

SHA-256 y su seguridad en el futuro

Un punto que preocupa a muchos en la actualidad, es la seguridad de SHA-256 a medida que se evoluciona en el campo de la informática y el criptoanálisis. De hecho, en la actualidad existen formas de ataque que romperían la seguridad de SHA-256, pero ninguno de ellos es realmente práctico de momento.

Estos hechos significan que SHA-256 podría ser vulnerado de un momento a otro. Entonces ¿Qué pasará cuando eso suceda? La verdad es que de momento no hay que preocuparnos, SHA-256 será seguro por un buen periodo de tiempo. Pero en caso de que llegue el momento de cambiar, esto no sería realmente el fin de las criptomonedas como muchos pregonan. De hecho, bastaría con actualizar los procesos de minería y de generación de identificadores y direcciones para sortear este problema. Un cambio de este tipo sería algo relativamente sencillo de hacer y dejaría a las criptomonedas nuevamente en el campo de la seguridad.

Esta es una realidad que muchos especialistas en criptografía entienden, especialmente los que trabajan en proyectos de criptomonedas. Así que podemos estar tranquilos en este sentido, la seguridad de Bitcoin y de otras criptomonedas con SHA-256 está bien cuidada.