Hash

 Hash

Definición


Una función hash es un algoritmo matemático que nos da un resultado B al aplicarlo a un valor inicial A. Es como cualquier función matemática, por ejemplo la función raiz cuadrada nos daría como resultado 2 si se la aplicamos al número 4. E igual que cualquier función matemática tiene que actuar de tal forma y tiene que cumplir con ciertos criterios. No nos puede devolver cualquier cosa, lo que nos devuelva requiere que tenga ciertas propiedades para que podamos usarlo.


Requisitos de las funciones Hash


La finalidad de una función hash es la de obtener una «huella» de un archivo, mensaje u otro bloque de datos. Para que resulte útil a la autentificación de mensajes, una función hash H debe poseer las siguientes propiedades:

1. H puede aplicarse a un bloque de datos de cualquier tamaño.

2. H produce una salida de tamaño fijo. 

3. H(x) es relativamente fácil de computar para cualquier  x dado, haciendo que tanto las implementaciones de hardware como de software sean prácticas.

 4 Para cualquier valor h dado, es imposible desde el punto de vista computacional encontrar x tal que H(x) = h lo cual, con frecuencia, se conoce en la literatura como propiedad unidireccional.

5. Para cualquier bloque dado x, es imposible desde el punto de vista computacional, encontrar y * x con H(y) = H(x), lo que a veces se conoce como, resistencia débil a la colisión.
6 Es imposible desde el punto de vista computacional encontrar un par (x, y) tal que H(x) = H(y), lo que normalmente se conoce como resistencia fierte a la colisión

Funcionamiento

Todas las funciones hash usan los siguientes principios generales. La entrada (mensaje, archivo, etc.) se ve como una secuencia de bloques de n bits. La entrada se procesa bloque a bloque de forma iterativa para producir una función hash de n bits.

Una de las funciones hash más simples es el OR exclusivo bit a bit (XOR) de cada bloque. Se puede expresar de la siguiente manera:




donde:



La Figura siguiente ilustra esta operación; produce una paridad simple por cada posición de bit y se conoce como una comprobación de redundancia longitudinal. Es bastante efectivo para datos aleatorios como comprobación de la integridad de los datos. Cada valor hash de n bits es igualmente parecido. Así, la probabilidad de que un error en los datos resulte en un valor hash inalterable es 2^-n. Con datos formateados más predeciblemente, la función es menos efectiva. Por ejemplo, en la mayoría de los archivos de texto normales, el bit más significativo de cada octeto siempre es cero. Así, si se usa un valor hash de 128 bits en vez de una efectividad de 2^128, la función hash en este tipo de datos tiene una efectividad de 2 ^-112. Una forma sencilla de mejorar los hechos es realizar una rotación circular de un bit en el valor hash después de que se haya procesado cada bloque. El procedimiento se puede resumir de la siguiente manera:
1.Inicialmente, establecer el valor hash de n bits en cero.
2 Procesar cada bloque de datos sucesivo de n bits como sigue:

  •  Rotar el valor hash actual a la izquierda en un bit.
  •  Realizar la operación XOR del bloque con el valor hash
El efecto que se produce es el de «aleatorizar» la entrada de forma más completa y salvar cualquier regularidad que se presente en la entrada.

Función hash simple mediante XOR bit a bit




Aunque el segundo procedimiento constituye una medida aceptable para la integridad de los datos, es prácticamente inútil para su seguridad cuando un código hash cifrado se usa con un mensaje de texto claro.

Dado un mensaje, es fácil producir un nuevo mensaje que produzca ese código hash: sólo hay que preparar el mensaje alternativo deseado y luego añadir un bloque de n bits que obligue al nuevo mensaje y al bloque a producir el código hash deseado. 

Aunque un XOR simple o un XOR rotado (RXOR) no es suficiente si sólo se cifra el código hash, todavía puede parecer que una función tan simple sería útil cuando se cifran tanto el mensaje como el código hash Pero se debe tener cuidado. Una técnica propuesta originalmente por la Agencia Nacional de Estándares usaba el XOR simple aplicado a bloques de mensajes de 64 bits y luego un cifrado de todo el mensaje que usaba el modo de cadena de bloques de cifrado (CBC). El esquema se puede definir como sigue: dado un mensaje que consiste en una secuencia de bloques de 64 bits X¡, Xn, definir el código hash C como el XOR bloque a bloque o todos los bloques y añadir el código hash como bloque final: 


Conclusión

Las funciones hash es una buena forma de poder darle la autentificación  fácil y segura  a nuestro conjunto de datos, y que por esta razón es tan fácil ver como esta herramienta puede tener un rol importante tanto para la protección de grupos de datos y ademas de dar elementos de seguridad como  como son las firmas digitales, o incluso llegar a proteger un sistema contra el malware que pudiera este dar.

Fuentes;
https://sites.google.com/a/espe.edu.ec/programacion-ii/home/tablas-hash
https://es.wikipedia.org/wiki/Funci%C3%B3n_hash




Comentarios

Entradas populares de este blog

Cifrado Asimetrico

CIfrado