lunes, 3 de diciembre de 2012

Funciones hash

Una función hash genera una cadena de caracteres a partir de un mensaje o de un archivo para determinar si el mismo ha sido modificado en la cadena de transmisión (de ser así, el resultado de la función cambia) y de esa manera asegurar su integridad y autenticidad.

Para evitar la posibilidad de que tanto el mensaje (archivo) como su hash correspondiente sean modificados en el camino, el emisor puede utilizar un cifrador asimétrico para encriptar el hash con una clave pública. El problema con esto es que cualquiera que tenga la clave pública puede interceptar el mensaje con su hash, modificarlos, y enviarlos nuevamente.

La manera de evitar este último incoveniente es combinar un algoritmo simétrico con uno asimétrico, generando un secreto compartido (clave simétrica) entre emisor y receptor, el cual si bien no va a ser usado para encriptar, el emisor va a concatenar esta clave al contenido del mensaje original, y a eso le va a calcular el hash, para luego encriptar este último con la clave pública. Sin embargo, lo que se envía es el mensaje original sin la clave concatenada, y el hash encriptado. Cuando se recibe, se descifra el hash enviado, se concatena el mensaje con el secreto compartido, se le calcula el hash en destino y se calcula con el que se recibió - la igualdad de ambos asegura la autenticidad y la integridad de la transmisión.

En resumen:
  1. Se genera un secreto compartido entre emisor y receptor.
  2. El emisor concatena el mensaje original junto con el secreto compartido, y calcula el hash del resultado.
  3. Se envía el mensaje original y el hash obtenido en el punto 2 de forma separada.
  4. En el destino, se concatena el mensaje recibido y el secreto compartido.
  5. Se calcula el hash del resultado obtenido en el punto 4.
  6. Se compara el hash del punto 2 con el del punto 5.
MD5 utiliza hashes de 128 bits. Se considera que, dadas las capacidades de cálculo actuales, puede llegar a ser vulnerable o que existan dos archivos cuyos hashes sean idénticos.
SHA-1 emplea hashes de 160 bits, y el SHA-512 de 512 bits.

Ejemplos:
  • Creo el archivo llamado "archivo" y le agrego la cadena "Yo uso CentOS :)".
  • Calculo el hash MD5 de archivo.
  • Le agrego un espacio (" ") a "archivo".
  • Vuelvo a calcular el hash MD5 y comparo los hashes obtenidos.
  • Creo el archivo "archivo" con el texto original ("Yo uso CentOS :)") y calculo los hashes SHA-1 (160 bits) y SHA-2 512 de 512 bits.


No hay comentarios:

Publicar un comentario