La prueba de trabajo explicada de forma sencilla

La prueba de trabajo (Proof of work), es un sistema que requiere una cantidad de esfuerzo elevada pero factible para resolver en este caso un problema matemático y proteger la red.

En el artículo anterior hemos hablado de la regla de la cadena más larga. Esta regla tiene un problema de seguridad bastante crítico. ¿Qué pasaría si un minero malintencionado creara su propia cadena y minara los bloques de una manera más rápida que el resto? Pues básicamente que su cadena se convertiría en la más larga y por tanto se convertiría en la oficial. Los bloque legítimos se borrarían y los fraudulentos se convertirían en los oficiales.

Nonces

¿Cómo podemos parar estos ataques? Pues lo primero que tenemos que hacer es que minar un bloque sea muy difícil. Para esto Satoshi Nakamoto hice que minar un bloque cueste mucho tiempo.

El proceso se diseño de la siguiente forma:

Las transacciones realizadas esperan a ser confirmadas en lo que se denomina grupo de transacciones o grupo de memoria. Cuando queremos crear un bloque elegimos unas cuantas transacciones de ese grupo, las verificamos y empezamos a crear el bloque.

Después de esto, tan solo tenemos que generar el hash del bloque y seremos capaces de ponerlo en la cadena y recibir nuestra recompensa.

Generar este hash no es tan fácil. Requiere tres importantes parámetros. El hash del último bloque, las transacciones y unos datos especiales. Uno de ellos es un número especial que se llama Nonce. Nonce viene del nombre en ingles «number used only once» o número usado solo una vez, ya que solo pruebas con el una vez y si no es el correcto lo desechas.

La función hash requiere de tres inputs para generar el hash del nuevo bloque.

Adivinar el hash correcto

En Bitcoin solo se te permite añadir un bloque si el hash empieza por un número determinado de ceros. Por lo que la clave esta en el Nonce. Al cambiar el Nonce el hash cambia completamente. Así que lo que hay que hacer es probar hasta que tengamos un hash válido.

El problema que tenemos aquí es que el Nonce es un número limitado de 4Bytes, es decir, el número máximo de Nonces es 4294967296. Puede parecer un número muy grande, pero hasta un ordenador medio tardaría unos 40 segundos en probar todos las combinaciones de hashes para sacar el hash válido.

Para ello se añade una variable más que es la marca de tiempo actual. La marca de tiempo actual no es más que un número que se incrementa en 1 cada segundo. La marca de tiempo a la hora de crear este artículo es 1649962496 (20:55:25 del día 14/04/2022). Cada segundo que pasa este número se incrementa en uno, por tanto el valor del hash cambia completamente aun con el mismo Nonce. Por ello tienes un segundo para probar las 2^32 combinaciones de Nonces. Aún que pudieras con un ordenador muy potente, es muy probable que no saques un hash válido y tengas que esperar a que cambie la marca de tiempo.

Para ordenadores tan potentes (ASIC) donde pueden recorrer todos los Nonces varias veces por segundo lo que se hace es cambiar algunas transacciones del pool de transacciones y seguir probando hashes, así no tienes que dejar las máquinas sin funcionamiento la gran mayoría del tiempo, ya que estas máquinas no suelen ser baratas.

Otra de las cosas que hace realmente difícil conseguir un hash válido, es que no sigue ningún patrón. No hay manera de predecir el hash a través de los inputs. Un pequeño cambio en uno de los inputs y el hash resultante es completamente distinto.

Para añadir más dificultad al problema, las funciones hash son lo que se denomina como funciones unidireccionales. Es fácil generar una salida a través de una entrada, pero es casi imposible averiguar la entrada a través de la salida.

Funciones unidireccionales.

Para hacernos una idea de lo difícil que es realizar la acción de descifrar un entrada a través de su salida, en el caso de Bitcoin, que usa la función has SHA-256, se tardaría millones de años descifrar la entrada.

Deja un comentario

11 + dieciseis =