Usuario:Brekou/Taller

De Wikipedia, la enciclopedia libre

Punteros Hash[editar]

Un puntero hash está compuesto por dos partes:

  • Puntero al la zona donde se almacena la información.
  • Hash de dicha información.

El puntero puede ser utilizado para obtener la información, mientras que el valor hash puede ser utilizado para verificar que esa información no ha sido modificada, asegurando la autenticidad de esta.

Estructuras de datos construidas utilizando punteros hash[editar]

Blockchain[editar]

[1]​Una de las aplicaciones que tienen los punteros hash es que pueden ser utilizados para construir una cadenas de bloques (blockchain), mediante la utilización de listas enlazadas.

El primer bloque (bloque 0) de la cadena se conoce como bloque génesis[2]​, en el cual se origina la cadena de bloques. A partir del segundo bloque (bloque 1) se almacena un puntero hash al bloque anterior, el valor hash del bloque anterior y la información del bloque actual. Gracias a este mecanismo, es imposible interferir en un bloque de la cadena de bloques sin que los demás se den cuenta.

Para cualquier bloque de la cadena; el bloque i almacenará un puntero hash al boque i-1, el valor hash del bloque i-1 y la información del bloque i.

Propiedad a prueba de manipulación de Blockchain[editar]

Solamente es necesario mantener el puntero hash al último bloque de la cadena de bloques.

Entonces, cuando alguien muestra la cadenas de bloques completa y afirma que los datos no se han modificado, podemos saber si algún bloque de la cadena fue alterado, ya que es posible recorrer los bloques hacia atrás y verificar todos los valores hash uno por uno.

Ejemplo de funcionamiento: Registro a prueba de manipulaciones[editar]

  • Un atacante quiere manipular un bloque de la cadena de bloques, por ejemplo, el bloque 1.
  • El atacante cambia el contenido del bloque. Debido a la propiedad de resistencia a colisiones de las funciones hash, no será capaz de encontrar otra información que tenga el mismo valor hash que el anterior. Por tanto, ahora el valor hash del bloque 1 ha cambiado.
  • Ahora, tras el cambio, se podría detectar la inconsistencia entre estos datos y el puntero hash del siguiente bloque, a menos que el atacante también cambie dicho puntero hash en el bloque siguiente, bloque 2.
  • Si el atacante modifica el puntero hash, estos dos coinciden, pero el contenido del bloque 2 ha cambiado. Esto significa que su valor hash no va a coincidir con el puntero hash del bloque 3, por lo que para que todo sea coherente, será necesario modificar el puntero hash del bloque 3.
  • Ocurrirá lo mismo con todos los bloques siguientes.
  • Finalmente, el atacante va al puntero hash del último bloque de la cadena de bloques, el cual es un obstáculo para el atacante, ya que nosotros guardamos y recordamos el puntero hash del último bloque. Detectaríamos la inconsistencia.


Si un atacante quiere modificar los datos en cualquier parte de la cadena, debe modificar todos los punteros hash desde el principio para conseguir la coherencia, pero al llegar al puntero hash que guarda el último bloque no podrá manipular el encabezado de la cadena

Puzles Hash[editar]

[3]​La propiedad puzzle-friendly permite la minería de las criptomonedas basadas en el algoritmo de prueba de trabajo. Un ejemplo de criptomoneda que está basado en este algoritmo es Bitcoin.

Dados los siguientes valores:

  • H(), una función hash SHA-256.
  • id, un número aleatorio elegido entre una muestra de alta incertidumbre, llamado PUZZLE-ID.
  • Y, un rango de resultados/valores hash válidos.

El objetivo es encontrar una solución x, que forma parte de la entrada de la función.

y = (id||x) ϵ Y

Se dice que una función hash es amistosa a los puzles, si para cualquier valor de salida “y” dentro del rango de valores de Y, en este caso como es SHA-256 sería 2²⁵⁶ valores posibles; con una id perteneciente a una muestra de alta incertidumbre, encontrar una x específica sería imposible en un tiempo significativamente menor a 2²⁵⁶ computaciones. La única forma de encontrarla es recorrer el espacio de forma aleatoria, debido a su tamaño. Esto es la característica primordial de esta propiedad y hace posible la descentralización.

Se puede reformular diciendo que, para resolver el puzle, se debe encontrar una x que genere un resultado contenido en el intervalo de Y.

  • Si hay más posibles resultados y en el conjunto Y, hay más posibles soluciones de x. Si el rango del conjunto Y corresponde a todo el intervalo de este mismo rango, el problema es trivial.
  • Si solamente hay un único valor y en el conjunto Y, es lo más complicado posible, e incluso imposible si la función H es unidireccional.

La dificultad del puzle depende directamente del tamaño que tiene el rango Y.

La propiedad de resistencia a colisiones se cumple, pues existe un valor de x para cada valor de “y” del conjunto Y.

  1. «Hash Pointers and Data Structures». 
  2. «Bloque génesis Bitcoin». 
  3. «Las 3 propiedades primordiales de las funciones Hash».