Curso básico de funciones hash y hash256 para minado
¿Qué es hashear? Esta palabra se utiliza frecuentemente en critpografia, y en Bitcoin aparece una y otra vez.
Una función hash no es más que una función f(x) que tiene las siguientes características:
- Se trata de una función fácilmente computable. Dado un x es muy fácil encontrar su hash f(x). Apenas consume recursos.
- Su salida es fija. El hash SHA256 tiene una salida de 256 bits, independientemente de la entrada.
- Esta libre de colisión. Es decir, es improbable encontrar un x, distinto de y, tal que sus hashes sean iguales. Si x!=y h(x)!=h(y)
Alguno os preguntareis como es posible esto, porque si podemos darle de entrada cualquier valor, y la salida es fija, es lógico que haya colisión. Y si, puede haberlas, solo que no vamos a encontrarla buscándola porque tenemos , 2^256 aprox 10^77 posibles valores.
El esfuerzo de encontrarla premeditadamente es inasumible computacionalmente para un ordenador binario. Si le damos 2^130 inputs a SHA256 solo tenemos un 1.2% de posibilidades de encontrar una colisión.
Ya pondré cálculos sobre esto.
- Estás propiedades le hacen interesante para ser un resumen de un mensaje. Un mensaje con su hash, indican que el mensaje no ha podido cambiar. Esto se usa a menudo en descargas, si os suena el MD5 de un archivo, que es otros hash.
Si damos un mensaje, y su hash. Como no tenemos forma de encontrar otro mensaje que coincida con su hash, el mensaje no ha podido ser alterado.
-
La última propiedad es la de ocultación. Dado un hash, no podemos encontrar el X que lo género. El hash oculta el mensaje original.
-
Ademas, dados dos mensajes cercanos. Como “Maria” y “María” sus hash SHA256 no se parecen aunque el mensaje parezca cercano.
Maria - 9ff18ebe7449349f358e3af0b57cf7a032c1c6b2272cb2656ff85eb112232f16
María - 51c4ad29ac4067ff7007ad3ec4b5adff3fe23f8f0c23fb54d09c3b234ba45255
¿Ni puñetero sentido no? Si se lo encontráis ponerme un mensaje por favor, que nos hacemos de oro.
Esto es muy interesante, porque los hashes se usan para dos cosas en la red Bitcoin.
- En el proceso de minado. Según la potencia de hasheo disponible en la red, se ajusta la dificultad del bloque. Es decir, que el SHA256 este por debajo de un valor.
- En proceso de cierre del bloque, o estampado del Blockchain. Cada bloque lleva el hash del anterior al cerrarlo. De forma que podemos ir de atrás, adelante, comprobando que los bloques son reales porque no hay forma de introducir un bloque debido a los propiedades del hash.
Y con esto cierto el tema Hasheo, sha256. Espero que se entienda, sino, explicaré un poco más.
Btw, hay protocolos de hash más potentes que el sha256, como el sha512. Que son más seguros.
¿Por qué no se cambian directamente? Básicamente, el hardware de los mineros está especializado en cálculo del sha256, un cambio así en el protocolo les perjudicaría, y no aceptarían el cambio a no ser que hubiera un peligro tangible para el valor de su inversión.
Es, un problema de incentivos. Que se alineará llegado el momento. ¿No es increíble el regalo de satoshi?