Función hash criptográfica

De Wikipedia, la enciclopedia libre
Ir a la navegación Ir a la búsqueda
Una función hash criptográfica (específicamente SHA-1) en ejecución. Un pequeño cambio en la entrada (en la palabra "over") cambia drásticamente la salida (resumen). Este es el llamado efecto avalancha.

Funciones hash criptográficas (CHF) son aquellas que cifran una entrada y actúan de forma parecida a las funciones hash, ya que comprimen la entrada a una salida de menor longitud y son fáciles de calcular.

Se llaman funciones hash criptográficas a aquellas funciones hash que se utilizan en el área de la criptografía. Este tipo de funciones se caracterizan por cumplir propiedades que las hacen idóneas para su uso en sistemas que confían en la criptografía para dotarse de seguridad. Estas propiedades las hacen resistentes frente ataques maliciosos que intentan romper esa seguridad.

Propiedades[editar]

Fundamentalmente queremos pedir las siguientes propiedades a estas funciones: que dada una x sea muy fácil calcular h(x), pero que, contrariamente, x sea difícil de calcular dada una y=h(x). Además pedimos que sea difícil encontrar una pareja (x,y) con x≠y tal que h(x)=h(y), es decir, que sea difícil producir colisiones.[1]

Establecer qué propiedades[2][3]​ tiene que cumplir una función hash criptográfica es difícil ya que son usadas en aplicaciones criptográficas muy diversas, y que por tanto requieren propiedades diferentes. Sin embargo en general podemos decir que es necesario que sean deterministas (un mensaje siempre tiene el mismo valor hash) y de bajo coste (para que sean utilizables en la práctica). Además normalmente se suele requerir que sean uniformes y con efecto avalancha con el objetivo de que sea imposible predecir cualquier valor hash a partir de otros valores hash capturados.

Para determinar las propiedades requeridas para asegurar la seguridad es necesario saber cuál es el objetivo principal de la función. Podemos distinguir dos tipos de funciones: las que tienen como objetivo principal verificar la integridad, a las que se llaman Códigos de detección de modificaciones, y las que tienen como objetivo principal la autenticación del origen del mensaje, a las que se llaman Códigos de autenticación de mensajes.[4]​Estos nombres no son muy correctos ya que estas funciones no son códigos y además ambos tipos permiten la autenticación de mensajes. Sin embargo son los más ampliamente aceptados.

Código de detección de modificaciones[editar]

El objetivo de estas funciones es poder detectar si un mensaje ha sido modificado o no. Por tanto permiten la verificación de la integridad del mensaje. Su funcionamiento consiste en calcular el valor hash del mensaje y que este sirva como prueba para una posible verificación de si el mensaje ha sido modificado. A las funciones hash diseñadas con este objetivo se las llama Códigos de detección de modificaciones (en inglés, Modification Detection Codes, MDC)

Para cumplir su objetivo la función hash tiene que cumplir propiedades que la haga resistente frente ataques de adversarios maliciosos cuyo objetivo es que la función no cumpla su cometido. Según la propiedad que se estime necesaria que cumpla se puede decir que hay dos tipos de Códigos de detección de modificaciones:

  • Las que requieren que la función hash sea CRHF. Por tanto es difícil encontrar dos mensajes con el mismo valor hash.

Código de autenticación de mensajes[editar]

El objetivo de estas funciones es permitir comprobar, sin usar ningún mecanismo adicional, la autenticidad del origen de un mensaje asegurando además la integridad de dicho mensaje. Debido a esta funcionalidad se las llama Códigos de Autenticación de Mensajes (en inglés, Message Authentication Codes, MAC).

Las MAC son funciones hash con clave, la cual mantienen en secreto tanto el que se quiere autenticar como el que verifica la autenticación. Para que sea resistente frente ataques es necesario que la función comprima y que sea resistente a la computación de nuevos valores hash.

Implementación[editar]

A continuación listamos la implementación de Azrael en Java, una función hash criptográfica iterativa construida a la medida[5]​ que devuelve una salida de 320 bits o 40 bytes para entradas de longitud arbitraria,[6]​ y también Azrael512 con una salida de 512 bits o 64 bytes.[7]

A raíz de los algoritmos cuánticos, la paradoja del cumpleaños cuántico (∛) ahora nos impone una cota de 768 bits de salida para mantener la seguridad, ante este asunto ofrecemos AzraelX4.[8][9]

Véase también[editar]

Referencias[editar]

  1. Medina Rosas, Jorge Alberto (2009). UNAM – Dirección General de Bibliotecas. Tesis Digitales, ed. Funciones Hash Criptográficas. p. 23. 
  2. A. J. Menezes et al «Handbook of Applied Cryptography». CRC Press 2011.
  3. Maike Massierer, «Provably Secure Cryptographic Hash Function». School of Mathematics,The University of New South Wales.2006
  4. Bart Preenel,"Cryptographic Primitives for Information Authentication - State of the Art". Katholieke Universiteit Leuven
  5. Ivica Nikoli, Alex Biryukov and Dmitry Khovratovich. Hash family LUX - Algorithm Specifications and Supporting Documentation. Submission to NIST, 2008.
  6. Jorge Alberto Medina Rosas. «Función Hash Criptográfica Iterativa» (en inglés). Consultado el 2 de diciembre de 2017. 
  7. Jorge Alberto Medina Rosas. «Función Hash Criptográfica Iterativa» (en inglés). Consultado el 5 de octubre de 2020. 
  8. Jorge Alberto Medina Rosas. «Función Hash Criptográfica Iterativa» (en inglés). Consultado el 14 de octubre de 2020. 
  9. Jorge Alberto Medina Rosas. «Función Hash Criptográfica Iterativa» (en inglés). Consultado el 14 de octubre de 2020.