La encriptación es un método mediante el cual información es convertida en un código secreto que oculta el significado verdadero de dicha información. La práctica de encriptar y desencriptar información es conocida como criptografía. Los métodos empleados para codificar y descodificar información mensajes son conocidos como algoritmos de encriptación.
Para que sean lo más efectivos posibles, los algoritmos de encriptación emplean una variable como parte de su proceso. Esta variable, conocida como llave, es lo que permite que el resultado de la encriptación sea único. De esta manera, si alguna entidad no autorizada llegara a interceptar un mensaje encriptado, necesitaría determinar qué algoritmo de encriptación fue utilizado, así como la llave. El tiempo requerido para desencriptar un mensaje sin la llave apropiada, así como el nivel de dificultad del proceso, es lo que hace a la encriptación una herramienta valiosa de seguridad.
Una función hash criptográfica es un algoritmo que toma una cantidad arbitraria de información como entrada y produce un resultado de tamaño fijo como resultado, conocido como digest, aunque también se le suele llamar simplemente hash. A diferencia de los algoritmos de encriptación, los cuales pueden ser de dos vías; es decir que pueden ser encriptados y desencriptados al conocer la llave adecuada, la función hash es una función de una vía que produce un resultado con el cual es difícil de conocer el valor original de entrada. Esto no quiere decir que sea un proceso imposible de revertir, pero en la práctica, sería muy complicado de realizar.
A continuación, se encuentran algunas de las características principales de las funciones hash:
No reversible. Una función hash efectiva debe ser una cuyo resultado sea difícil de asociar a su valor de entrada original.
Difusión de contenido. Un cambio realizado en tan solo un bit del valor de entrada original de resultar en un cambio a la mitad de los bits del nuevo hash. En otras palabras, cuando el valor de entrada sea alterado ligeramente, el hash producido debería cambiar drásticamente y de una forma impredecible.
Determinismo. Un valor de entrada siempre debe generar el mismo valor de hash. Adicionalmente, el hash resultante siempre tendrá un tamaño determinado, sin importar la longitud del valor de entrada.
Resistencia a colisiones. Debería ser muy difícil encontrar dos valores de entrada distintos que produzcan el mismo hash.
No predecible. La función hash no debe producir patrones discernibles que permitan predecir los hashes producidos.
Los algoritmos SHA (Secure Hash Algorithm - Algoritmo de Hash Seguro) conforman un grupo de funciones hash diseñados para mantener asegurada la información. La primera versión de este algoritmo fue creada en 1993, con el nombre de SHA, pero se le conoce como SHA-0 en la actualidad, para evitar confusiones con las demás versiones. Cabe mencionar que esta versión es obsoleta, debido a diversas vulnerabilidades encontradas. SHA-1 fue creado en 1995; a pesar de que no se han encontrado vulnerabilidades directamente contra algoritmos de esta versión, sí se han dado ataques contra otros algoritmos que poseen una estructura similar a SHA-1, lo que ha puesto en duda la seguridad a largo plazo de esta versión. Los digests producidos tanto SHA-0 como SHA-1 son de 160 bits.
Con el propósito de brindar un nivel mayor de seguridad, se desarrolló SHA-2, en el 2001. Esta familia de algoritmos está conformada por SHA-224, SHA-256, SHA-384 y SHA-512. El tamaño de los digests producidos por algoritmos de este tipo son de 224 o 256 bits. También existe la familia SHA-3, pero esta versión difiere en su estructura con las demás.
Entre los algoritmos más empleados de SHA-2 se encuentran SHA-256 y SHA-512, que son calculado con palabras de 32 y 64 bits, respectivamente. En particular, SHA-256 es utilizado comúnmente en distintas aplicaciones de Blockchain. De hecho, es el algoritmo empleado para el minado y creación de direcciones en el Blockchain de Bitcoin.
Instrucciones: A continuación, escriba un mensaje en el área de abajo y conforme lo haga, verá el hash producido por dicho mensaje.
Mensaje:
Hash: