Hash
En informática, hash se refiere a una función o método para generar claves o llaves que representen de manera casi unívoca a un documento, registro, archivo, etc., resumir o identificar un dato a través de la probabilidad, utilizando una función hash o algoritmo hash. Un hash es el resultado de dicha función o algoritmo.
Una función de hash es una función para resumir o identificar probabilísticamente un gran conjunto de información, dando como resultado un conjunto imagen finito generalmente menor (un subconjunto de los números naturales por ejemplo). Varían en los conjuntos de partida y de llegada y en cómo afectan a la salida similitudes o patrones de la entrada. Una propiedad fundamental del hashing es que si dos resultados de una misma función son diferentes, entonces las dos entradas que generaron dichos resultados también lo son.
Es posible que existan claves resultantes iguales para objetos diferentes, ya que el rango de posibles claves es mucho menor que el de posibles objetos a resumir (las claves suelen tener en torno al centenar de bits, pero los ficheros no tienen un tamaño límite).
Son usadas en múltiples aplicaciones, como los arrays asociativos, criptografía, procesamiento de datos y firmas digitales, entre otros. Una buena función de hash es una que experimenta pocas colisiones en el conjunto esperado de entrada; es decir que se podrán identificar unívocamente las entradas (ver función inyectiva).
Muchos sistemas relacionados con la seguridad informática usan funciones o tablas hash.
La función de hash está definida por su dominio (cadenas de bytes de longitud variable), su imagen (secuencias de bytes de longitud fija) y por la función que relaciona dichos conjuntos (llamada función H). La característica deseada en una función Hash es:
Primer criterio: H(x) = H(y) \Rightarrow x = y
Desafortunadamente esta idealización (denominada colisiones de hash) es precisa pero indeterminada. Si el conjunto de valores que puede tomar H(x) es mucho menor que las posibilidades de x, entonces esto no puede ser cierto siempre que todos los valores de x pueden ser igualmente probables. Entonces, existe una segunda condición para hacer la función útil. Por ejemplo:
Segundo criterio (1): dado un H(x) es complejo encontrar y tal que H(y) = H(x).
Segundo criterio (2): dados x y H(x + s) no es sencillo encontrar s.
En estos ejemplos anteriores, al referirse al grado de dificultad de una tarea se habla siempre en un sentido puramente computacional. Esto es, que el tiempo necesario para ejecutar dicha tarea sea increíblemente grande (ver NP-C). Además, + puede ser cualquier operación válida sobre el conjunto de partida.
En la práctica, para la mayoría de las aplicaciones sin contar la corrección de errores las funciones hash criptográficas son suficientemente útiles. Los algoritmos MD5 y SHA-1 son dos de los más populares.
Más información en wikipedia.org.
Fuente: wikipedia.org