Escucho mucho que para minar bitcoins hay que hacer operaciones muy complejas y nada más lejos de la realidad. La operación es muy sencilla, sólo hay que calcular el hash de un conjunto de transacciones (bloque) y si está por debajo de un hash determinado, pues se ha minado ese bloque. Lo difícil no es realizar la operación, lo difícil es que esa operación te dé el resultado buscado.
Poniendo un símil, ¿Es difícil que te caiga el gordo de la lotería de Navidad? Depende, es difícil porque hay 100.000 números y si no eres pudiente no puedes comprar muchos números y tus probabilidades son escasas. Si dispusieras de mucho capital y pudieras comprar los 100.000 números, te caería el gordo seguro.
Pues esto mismo pasa con los hashes, yo puedo coger un bloque y calcular su hash y a lo mejor cae la breva y doy con ello pero las probabilidades son ridículas, pero si resulta que tengo un ASIC que es capaz de calcular millones y millones de hashes por segundo, la probabilidad de que saque el hash «premiado» es mayor que los que tengan un ordenador y con su CPU esté calculando hashes. Y lo malo de los hashes es que una pequeña modificación en el bloque supone un hash totalmente distinto, por lo que no se puede saber cómo llegar al resultado, sólo generando hashes como si no hubiese mañana.
Veamos esto de los hashes. Supongamos que tenemos un bloque, que es un fichero de texto para simplificar:
$ cat bloque.txt
Y supongamos que el contenido es:
Esto es un bloque
Ahora a ese contenido le añadimos un número, por ejemplo el 1 y se obtendría un fichero con el contenido:
Esto es un bloque 1
Si calculamos su hash de 256 bits:
$ sha256sum bloque.txt
Obtenemos el siguiente hash:
66aa412393c535db1b137a4da30a733071d01722d33f1a67f76a61307cc8a346
Si se modifica el fichero y en vez de poner un 1 ponemos un 2 el hash que se obtendría:
4e6ca4e80e667037033a09a1c7a5416a1685fa6980feb258c44d4195aab8e5db
Como se puede ver sólo cambia un número y el hash cambia absolutamente. Es imposible saber a priori qué número poner para obtener un determinado hash, que suelen ser del tipo:
00000000000000000003b6b49e78f0dfbfe13a0c388600256bfd0e8fa14bd987
En resumen, comprar un décimo de lotería (calcular el hash) no es difícil, lo difícil es que te toque (acertar con el hash adecuado). Y es más fácil que te toque cuantos más décimos compres (realizas muchos millones de hashes por segundo).