El hash es una técnica para convertir datos en un código. Este código se llama hash y suele utilizarse para proteger datos importantes o para la minería. En esta lección vamos a hablar del hashing. Desde luego, no es fácil, pero no dejaremos que eso nos disuada. Vamos allá.
✔️ Hacer un hash es convertir una colección de datos en un código, el hash, mediante un cálculo predeterminado.
✔️ El hashing se utiliza a menudo para proteger las contraseñas de modo que sólo el usuario pueda leerlas y para comparar sumas de comprobación al descargar archivos.
✔️ Las firmas digitales utilizan hashing para la autenticación, en la que el destinatario necesita la clave privada para descifrar el mensaje.
✔️ Las criptomonedas utilizan el hashing para el mining, que requiere que los ordenadores utilicen su potencia de cálculo para resolver enigmas y recibir recompensas.
Definición:
El hash es el proceso mediante el cual una función convierte un conjunto de datos en un código, el hash. ¿Cómo se dice?
Así que expliquemos primero qué es un hash. Un hash es el resultado de algún tipo de cálculo basado en condiciones predefinidas. Un hash consiste en una serie de números y letras.
Pondremos un ejemplo de hashing, para hacerlo un poco más visual. Con SHA (Secure Hashing Algorithm) 256, puedes obtener un hash para cualquier tipo de información textual. Voy a crear dos frases muy parecidas, pero cuyo resultado (el hash) es muy diferente.
La frase "qué es el hashing" (la entrada) produce el siguiente hash:
a85eaf708bd0da1c0b7206ab8d69c30403b34be19588b71702d420ff9b21f09c (la salida)
La frase "¿Qué es el hashing?" produce un hash muy diferente:
4bc6139ce79a8c6aeca74cd9397259fb54d4ea4fc7b930bb74404cfe94c34bcd
SHA-256 produce un hash de 256 bits de longitud (64 caracteres).
Por cierto, los hash funcionan en una sola dirección. Puedes crear el hash de una frase, pero no puedes reconstruir una frase a partir del hash.
Un hash debe configurarse de modo que requiera un esfuerzo inaceptable adivinar el hash basándose en la fuerza bruta (simplemente comprobando todas las posibilidades 1 a 1). Cuantos más caracteres genere una función hash, más difícil será descifrar una entrada.
Ahora la idea del hashing debe haber tomado forma en tu imaginación.
Qué bien, vaya jartá de hashing. Pero, ¿qué puedes hacer realmente con él?
En general, podemos decir que el hashing se utiliza para asegurar datos. Lo más habitual es que se utilice en informática para proteger las contraseñas.
Supongamos que inventas una contraseña y tienes que enviarla por Internet introduciéndola en algún sitio. Si se envía en texto plano sin cifrado ni hash, los piratas informáticos pueden leer lo que introduzcas allí. Por eso hoy en día las contraseñas se convierten en un hash, para que sólo el usuario pueda leer lo que introduce.
El hash también se puede utilizar al descargar archivos. Primero calculas el hash del archivo antes de descargarlo, y luego compruebas si la llamada suma de comprobación es la misma. Si ambos valores son iguales, entonces el archivo es el original. Muy útil si no quieres que virus o troyanos pasen por los puertos.
Un fenómeno bien conocido del mundo criptográfico es la firma digital. En ella, tienes un emisor y un receptor. Se hace un hash de un mensaje. Sin la clave privada, el mensaje no puede leerse. El receptor del mensaje necesita la clave secreta para descifrarlo. Si el hash del mensaje coincide con el hash que puede calcularse con esta clave, entonces el mensaje es el mismo que el mensaje original.
En cryptocurrency, trabajan con el la clave privada y la clave pública para mostrar tu dirección (pública) o determinar si puedes gastar esa cantidad de dinero (clave privada).
También se utiliza para los datos personales. Cuando haces un pedido en línea a una tienda, primero creas una cuenta. La mayoría de tus datos se codifican, por lo que puedes hacer el pedido de forma anónima, pero la entrega puede hacerse en tu dirección.
El hash puede asegurarse aún más mediante las técnicas llamadas sal y pimienta. La sal permite añadir un número generado aleatoriamente al hash, tras lo cual se crea un nuevo hash a partir de él, haciendo aún más difícil que los piratas informáticos descifren el código.
Con pimienta, añades la misma cadena de 32 caracteres aleatorios a todos los registros, eliminando prácticamente un ataque de fuerza bruta.
Cuando se Minera Bitcoin, a menudo se habla del hashrate. Puede que ahora seas capaz de adivinar su significado.
El hashrate de un ordenador es la potencia de cálculo que posee para realizar una difícil criptográfico puzzle para resolver. Este difícil rompecabezas consiste en adivinar la entrada de un hash. Quien lo adivine primero consigue añadir un nuevo block a la blockchain y obtiene la recompensa en forma de comisiones por transacción y nuevos Bitcoins.
El hashrate del Bitcoin es la potencia de cálculo total de todos los ordenadores que minan Bitcoin. A medida que aumenta, el puzzle debe ser más difícil. El hecho es que hay que encontrar un nuevo block aproximadamente cada 10 minutos según Satoshi Nakamoto. Si la potencia de cálculo disminuye, por ejemplo si muchos Miner abandonan, el puzzle tiene que ser más fácil, de lo contrario esos 10 minutos pronto se convertirán en 11 o 12 minutos y se complicará el trabajo.
Cuando se crea un nuevo bloque en Bitcoin, tiene varias secciones. Cada bloque contiene un hash del bloque anterior. Esto se hace para garantizar que todos los bloques se almacenan secuencialmente.
A continuación, te encuentras con tx_root, que es el valor hash raíz del Merkle tree que contiene todas las transacciones. Un Merkle tree puede considerarse como una colección de hashes. Es un diagrama de árbol, en el que todas las transacciones reciben un hash y se fusionan hasta que sólo queda un registro con todas las transacciones (hashes) en un único hash, la raíz Merkle o también llamada hash raíz. Con este método, un bloque está mucho menos poblado que si tuvieras que escribir todas las transacciones en él, lo que mejora la velocidad.
Le sigue el timestamp. Contiene la hora en la que se creó el bloque. De esta forma, sólo puedes crear bloques hacia adelante en el tiempo.
Luego viene el nonce. Se trata de un hash que el Miner debe adivinar para que se le permita minar un nuevo block.
En cryptocurrency se utiliza el hashing porque funciona muy bien y rápido. El hashing también contribuye de forma importante a la seguridad porque es un sistema unidireccional. Puedes generar un hash muy fácilmente, pero adivinar la entrada a partir del hash es casi imposible.
Dado que el hashing es esencial para la seguridad, se utilizará durante mucho tiempo. Aunque con la llegada de los ordenadores cuánticos, habrá que inventar un nuevo truco.