En matemáticas e informática , el hashing universal (en un algoritmo o estructura de datos aleatorios ) se refiere a la selección aleatoria de una función hash de una familia de funciones hash con una propiedad matemática determinada (véase la definición a continuación). Esto garantiza un bajo número de colisiones en promedio , incluso si los datos son elegidos por un adversario. Se conocen muchas familias universales (para el hashing de enteros, vectores y cadenas), y su evaluación suele ser muy eficiente. El hashing universal tiene numerosos usos en informática, por ejemplo, en implementaciones de tablas hash , algoritmos aleatorios y criptografía .
Introducción
Supongamos que queremos mapear claves de algún universoencontenedores (etiquetados). El algoritmo tendrá que manejar algún conjunto de datosdeclaves, que no se conocen de antemano. Por lo general, el objetivo del hashing es obtener un número bajo de colisiones (claves deque caen en el mismo contenedor). Una función hash determinista no puede ofrecer ninguna garantía en un entorno adversario si, puesto que el adversario puede elegirser precisamente la preimagen de un contenedor. Esto significa que todas las claves de datos terminan en el mismo contenedor, lo que hace que el hashing sea inútil. Además, una función hash determinista no permite el rehashing : a veces los datos de entrada resultan inadecuados para la función hash (por ejemplo, hay demasiadas colisiones), por lo que se desea cambiar la función hash.
La solución a estos problemas consiste en elegir una función al azar de una familia de funciones hash. Una familia de funcionesSe denomina familia universal si,.
En otras palabras, cualesquiera dos claves diferentes del universo chocan con una probabilidad máxima decuando la función hashse extrae uniformemente al azar deEsta es exactamente la probabilidad de colisión que cabría esperar si la función hash asignara códigos hash verdaderamente aleatorios a cada clave.
A veces, la definición se relaja mediante un factor constante, requiriendo únicamente la probabilidad de colisión.en vez deEste concepto fue introducido por Carter y Wegman [ 1 ] en 1977 y ha encontrado numerosas aplicaciones en la ciencia de la computación (véase, por ejemplo , [ 2 ] ) .
Si tenemos un límite superior desobre la probabilidad de colisión, decimos que tenemos-casi universalidad. Por ejemplo, una familia universal tiene-casi universalidad.
Muchas familias universales, pero no todas, tienen la siguiente propiedad de diferencia uniforme más fuerte :
- , cuandose extrae al azar de la familia, la diferenciase distribuye uniformemente en.
Tenga en cuenta que la definición de universalidad solo se ocupa de si, que cuenta las colisiones. La propiedad de diferencia uniforme es más fuerte.
(De manera similar, una familia universal puede ser universal XOR si, el valorse distribuye uniformemente endóndees la operación OR exclusiva a nivel de bits. Esto solo es posible sies una potencia de dos.)
Una condición aún más fuerte es la independencia por pares : tenemos esta propiedad cuando tenemos la probabilidad de quegenerará un hash para cualquier par de valores hash.es como si fueran completamente aleatorios:La independencia por pares a veces se denomina universalidad fuerte .
Otra propiedad es la uniformidad. Decimos que una familia es uniforme si todos los valores hash son igualmente probables:para cualquier valor hashLa universalidad no implica uniformidad. Sin embargo, la universalidad fuerte sí implica uniformidad.
Dada una familia con la propiedad de distancia uniforme, se puede producir una familia hash independiente por pares o fuertemente universal agregando una constante aleatoria distribuida uniformemente con valores ena las funciones hash. (De manera similar, sies una potencia de dos, podemos lograr la independencia por pares de una familia de hash universal XOR haciendo un OR exclusivo con una constante aleatoria uniformemente distribuida. Dado que un desplazamiento por una constante a veces es irrelevante en las aplicaciones (por ejemplo, tablas hash), a veces no se hace una distinción cuidadosa entre la propiedad de distancia uniforme y la independencia por pares. [ 3 ]
Para algunas aplicaciones (como las tablas hash), es importante que los bits menos significativos de los valores hash también sean universales. Cuando una familia es fuertemente universal, esto está garantizado: sies una familia fuertemente universal con, entonces la familia hizo de las funcionesa pesar deTambién es fuertemente universal paraDesafortunadamente, lo mismo no ocurre con las familias (meramente) universales. Por ejemplo, la familia formada por la función identidad.es claramente universal, pero la familia hizo de la funciónNo es universal.
UMAC y Poly1305-AES , así como otros algoritmos de autenticación de mensajes, se basan en el hash universal. [ 4 ] [ 5 ] En estas aplicaciones, el software elige una nueva función hash para cada mensaje, basada en un nonce único para ese mensaje.
Varias implementaciones de tablas hash se basan en el hash universal. En estas aplicaciones, el software suele elegir una nueva función hash solo después de detectar que se han producido colisiones de demasiadas claves; hasta entonces, se sigue utilizando la misma función hash repetidamente. (Algunos esquemas de resolución de colisiones, como el hash perfecto dinámico , eligen una nueva función hash cada vez que se produce una colisión. Otros esquemas de resolución de colisiones, como el hash cuco y el hash de dos opciones , permiten un número determinado de colisiones antes de elegir una nueva función hash). En [ 6 ] se encuentra un estudio de las funciones hash universales y fuertemente universales más rápidas conocidas para enteros, vectores y cadenas.
Garantías matemáticas
Para cualquier conjunto fijodeLas llaves, al utilizar una familia universal, garantizan las siguientes propiedades.
- Para cualquier fijoen, el número esperado de llaves en el contenedoresAl implementar tablas hash mediante encadenamiento , este número es proporcional al tiempo de ejecución esperado de una operación que involucre la clave.(por ejemplo, una consulta, inserción o eliminación).
- El número esperado de pares de clavesenconque chocan () está delimitado superiormente por, que es de orden. Cuando el número de contenedores,se elige linealmente en(es decir, está determinado por una función en), el número esperado de colisiones es. Al realizar el hash encontenedores, no hay colisiones en absoluto con una probabilidad de al menos la mitad.
- El número esperado de llaves en contenedores con al menosLas claves en ellas están limitadas arriba por. [ 7 ] Por lo tanto, si la capacidad de cada contenedor se limita a tres veces el tamaño promedio (), el número total de claves en contenedores desbordados es como máximoEsto solo se cumple con una familia de funciones hash cuya probabilidad de colisión está limitada superiormente por. Si se utiliza una definición más débil, limitándola por, este resultado ya no es cierto. [ 7 ]
Dado que las garantías anteriores se mantienen para cualquier conjunto fijoEstas condiciones se cumplen si el conjunto de datos es elegido por un adversario. Sin embargo, el adversario debe realizar esta elección antes (o independientemente) de la selección aleatoria de la función hash por parte del algoritmo. Si el adversario puede observar la selección aleatoria del algoritmo, la aleatoriedad resulta inútil y la situación es la misma que en el hashing determinista.
La segunda y la tercera garantía se suelen utilizar junto con el rehashing . Por ejemplo, se puede preparar un algoritmo aleatorio para manejar algunosnúmero de colisiones. Si observa demasiadas colisiones, elige otro número aleatorio.de la familia y se repite. La universalidad garantiza que el número de repeticiones es una variable aleatoria geométrica .
Construcciones
Dado que cualquier dato informático puede representarse como una o más palabras de máquina, generalmente se necesitan funciones hash para tres tipos de dominios: palabras de máquina ("enteros"); vectores de longitud fija de palabras de máquina; y vectores de longitud variable ("cadenas").
Hash de enteros
Esta sección se refiere al caso del hash de enteros que caben en palabras de máquina; por lo tanto, operaciones como la multiplicación, la suma, la división, etc., son instrucciones baratas a nivel de máquina. Sea el universo que se va a hashear.y sea el rango de las funciones hash.
La propuesta original de Carter y Wegman [ 1 ] consistía en elegir un número primo.y definir
dóndeson números enteros elegidos aleatoriamente módulocon(Esta es una sola iteración de un generador congruencial lineal ).
Para ver esoes una familia universal, tenga en cuenta quesolo se cumple cuando
para algún número enteroentrey. Desde, sisu diferenciaes distinto de cero y tiene un módulo inverso. Resolviendo pararendimientos
- .
Hayposibles opciones para(desdeestá excluido) y, variabledentro del rango permitido,posibles valores distintos de cero para el lado derecho. Por lo tanto, la probabilidad de colisión es
- .
Otra forma de veres una familia universal es a través de la noción de distancia estadística . Escribe la diferenciacomo
- .
Desdees distinto de cero yse distribuye uniformemente enDe ello se deduce quemódulotambién se distribuye uniformemente en. La distribución dees, por lo tanto, casi uniforme, salvo una diferencia en la probabilidad deentre las muestras. Como resultado, la distancia estadística a una familia uniforme es, que se vuelve insignificante cuando.
La familia de funciones hash más simples
es solo aproximadamente universal:a pesar de. [ 1 ] Además, este análisis es casi exacto; Carter y Wegman [ 1 ] muestran quecuando sea.
Evitar la aritmética modular
El estado del arte para el hash de enteros es el esquema de multiplicación-desplazamiento descrito por Dietzfelbinger et al. en 1997. [ 8 ] Al evitar la aritmética modular , este método es mucho más fácil de implementar y también se ejecuta significativamente más rápido en la práctica (generalmente por al menos un factor de cuatro [ 9 ] ). El esquema supone que el número de bins es una potencia de dos,. Dejarsea el número de bits en una palabra de máquina. Entonces, las funciones hash se parametrizan sobre enteros positivos impares.(que encaja en una palabra debits). Para evaluarmultiplicarpormóduloy luego mantener el orden altobits como el código hash. En notación matemática , esto es
Este esquema no satisface la propiedad de diferencia uniforme y es solo-casi-universal ; para cualquier,.
Para comprender el comportamiento de la función hash, observe que, siytienen los mismos bits 'M' de orden más alto, entoncestiene todos 1 o todos 0 como sus M bits de orden más alto (dependiendo de sioes mayor). Supongamos que el bit menos significativo de activación deaparece en posición. Desdees un número entero impar aleatorio y los números enteros impares tienen inversos en el anillo.De ello se deduce quese distribuirá uniformemente entreenteros de -bits con el bit menos significativo activado en la posiciónPor lo tanto, la probabilidad de que estos bits sean todos 0 o todos 1 es como máximo. Por otro lado, si, luego M bits de orden superior de contienen tanto 0 como 1, por lo que es seguro que. Finalmente, sientonces mordiscode es 1 ysi y solo si bitstambién son 1, lo cual ocurre con probabilidad.
Este análisis es riguroso, como puede demostrarse con el ejemplo.yPara obtener una función hash verdaderamente "universal", se puede utilizar el esquema de multiplicación, suma y desplazamiento que selecciona bits de orden superior.
dóndees un número entero positivo aleatorio conyes un número entero no negativo aleatorio conEsto requiere realizar operaciones aritméticas enEnteros sin signo de -bits. Esta versión de multiplicación-desplazamiento se debe a Dietzfelbinger y fue analizada posteriormente con mayor precisión por Woelfel. [ 10 ]
Vectores de hash
Esta sección se ocupa del hash de un vector de longitud fija de palabras de máquina. Interprete la entrada como un vector.depalabras de máquina (enteros debits cada uno). Sies una familia universal con la propiedad de diferencia uniforme, la siguiente familia (que se remonta a Carter y Wegman [ 1 ] ) también tiene la propiedad de diferencia uniforme (y por lo tanto es universal):
- , donde cadase elige de forma independiente y aleatoria.
Sies una potencia de dos, se puede reemplazar la suma por la disyunción exclusiva. [ 11 ]
En la práctica, si se dispone de aritmética de doble precisión, esta se instancia con la familia de funciones hash de desplazamiento múltiple. [ 12 ] Inicialice la función hash con un vectorde números enteros impares aleatorios enbits cada uno. Entonces, si el número de contenedores espara:
- .
Es posible reducir a la mitad el número de multiplicaciones, lo que en la práctica se traduce aproximadamente en una aceleración del doble. [ 11 ] Inicialice la función hash con un vectorde números enteros impares aleatorios enbits cada uno. La siguiente familia de funciones hash es universal: [ 13 ]
- .
Si no se dispone de operaciones de doble precisión, se puede interpretar la entrada como un vector de medias palabras (enteros de bits). El algoritmo utilizará entoncesmultiplicaciones, dondeera el número de medias palabras en el vector. Por lo tanto, el algoritmo se ejecuta a una "tasa" de una multiplicación por palabra de entrada.
El mismo esquema también puede utilizarse para el hash de enteros, interpretando sus bits como vectores de bytes. En esta variante, la técnica vectorial se conoce como hash por tabulación y proporciona una alternativa práctica a los esquemas de hash universales basados en la multiplicación. [ 14 ]
También es posible una fuerte universalidad a alta velocidad. [ 15 ] Inicialice la función hash con un vectorde números enteros aleatorios enbits. Calcular
- .
El resultado es fuertemente universal enbits. Experimentalmente, se descubrió que funciona a 0,2 ciclos de CPU por byte en procesadores Intel recientes para.
Hash de cadenas
Esto se refiere al hash de un vector de palabras de máquina de tamaño variable . Si la longitud de la cadena se puede limitar con un número pequeño, lo mejor es usar la solución vectorial anterior (que consiste conceptualmente en rellenar el vector con ceros hasta el límite superior). El espacio requerido es la longitud máxima de la cadena, pero el tiempo para evaluares solo la longitud deSiempre que los ceros estén prohibidos en la cadena, el relleno con ceros puede ignorarse al evaluar la función hash sin afectar la universalidad. [ 11 ] Tenga en cuenta que si se permiten ceros en la cadena, entonces podría ser mejor agregar un carácter ficticio distinto de cero (por ejemplo, 1) a todas las cadenas antes del relleno: esto garantizará que la universalidad no se vea afectada. [ 15 ]
Ahora supongamos que queremos aplicar un hash, donde un buen límite enno se conoce a priori. Una familia universal propuesta por [ 12 ] trata la cadenacomo los coeficientes de un polinomio módulo un primo grande. Si, dejarSé un primo y define:
- , dóndees uniformemente aleatorio yse elige aleatoriamente de una familia universal que mapea el dominio entero.
Utilizando las propiedades de la aritmética modular, lo anterior se puede calcular sin producir números grandes para cadenas largas de la siguiente manera: [ 16 ]
uint hash ( String x , int a , int p ) uint h = VALOR_INICIAL for ( uint i = 0 ; i < x . length ; ++ i ) h = (( h * a ) + x [ i ]) mod p return hEste hash rodante de Rabin-Karp se basa en un generador congruencial lineal . [ 17 ] El algoritmo anterior también se conoce como función hash multiplicativa . [ 18 ] En la práctica, el operador módulo y el parámetro p se pueden evitar por completo permitiendo que el entero se desborde, ya que es equivalente a mod ( Max-Int-Value + 1) en muchos lenguajes de programación. Sin embargo, al usar el no primoEl módulo es propenso a colisiones con ciertas entradas , independientemente del valor de a . La siguiente tabla muestra los valores elegidos para inicializar h y a en algunas de las implementaciones más populares.
Consideremos dos cadenasy dejarsea la longitud de la más larga; para el análisis, la cadena más corta se rellena conceptualmente con ceros hasta la longitud. Una colisión antes de aplicarimplica quees una raíz del polinomio con coeficientesEste polinomio tiene como máximoraíces módulo, por lo que la probabilidad de colisión es como máximo. La probabilidad de colisión a través del azarlleva la probabilidad total de colisión aPor lo tanto, si el primoes suficientemente grande en comparación con la longitud de las cadenas hash, la familia es muy cercana a universal (en distancia estadística ).
Otras familias universales de funciones hash utilizadas para convertir cadenas de longitud desconocida en valores hash de longitud fija incluyen la huella digital de Rabin y Buzhash .
Evitar la aritmética modular
Para mitigar la penalización computacional de la aritmética modular, en la práctica se utilizan tres trucos: [ 11 ]
- Uno elige el primoestar cerca de una potencia de dos, como un primo de Mersenne . Esto permite la aritmética módulodebe implementarse sin división (utilizando operaciones más rápidas como la suma y los desplazamientos). Por ejemplo, en arquitecturas modernas se puede trabajar con, mientrasLos valores son de 32 bits.
- Se puede aplicar el hash vectorial a los bloques. Por ejemplo, se aplica el hash vectorial a cada bloque de 16 palabras de la cadena y se aplica el hash de cadena a laresultados. Dado que el hash de cadena más lento se aplica a un vector sustancialmente más pequeño, esto será esencialmente tan rápido como el hash de vector.
- Se elige una potencia de dos como divisor, lo que permite la aritmética móduloSe implementará sin división (utilizando operaciones más rápidas de enmascaramiento de bits ). La familia de funciones hash NH adopta este enfoque.
Véase también
- Hashing k -independiente : Familia de funciones hash
- Hash rotativo : tipo de función hash. Páginas que muestran descripciones breves de los destinos de redirección.
- Hashing por tabulación : funciones hash calculadas mediante exclusión o
- Independencia min-wise : técnica de minería de datos. Páginas que muestran descripciones breves de los destinos de redireccionamiento.
- Función hash unidireccional universal
- Secuencia de baja discrepancia : tipo de secuencia matemática.
- Hash perfecto : función hash sin colisiones. Páginas que muestran descripciones breves de los destinos de redirección.
Referencias
- 1 2 3 4 5 Carter, Larry; Wegman, Mark N. (1979). "Clases universales de funciones hash" . Journal of Computer and System Sciences . 18 (2): 143– 154. doi : 10.1016/0022-0000(79)90044-8 . Versión de la conferencia en STOC'77.
- ↑ Miltersen, Peter Bro. "Universal Hashing" (PDF) . Archivado del original (PDF) el 24 de mayo de 2011. Recuperado el 24 de junio de 2009 .
- ↑ Motwani, Rajeev; Raghavan, Prabhakar (1995). Algoritmos aleatorios . Cambridge University Press. pág. 221. ISBN 0-521-47465-5.
- ↑ David Wagner, ed. "Avances en criptología - CRYPTO 2008" . pág. 145.
- ↑ Jean-Philippe Aumasson, Willi Meier, Raphael Phan, Luca Henzen. "La función hash BLAKE" . 2014. pág. 10.
- ↑ Thorup, Mikkel (2015). "High Speed Hashing for Integers and Strings". arXiv : 1504.06804 [ cs.DS ].
- 1 2 Baran, Ilya; Demaine, Erik D.; Pătraşcu, Mihai (2008). "Algoritmos subcuadráticos para 3SUM" (PDF) . Algorítmica . 50 (4): 584– 596. doi : 10.1007/s00453-007-9036-3 . S2CID 9855995 .
- ↑ Dietzfelbinger, Martin; Hagerup, Torben; Katajainen, Jyrki; Penttonen, Martti (1997). "Un algoritmo aleatorio fiable para el problema del par más cercano" (Postscript) . Journal of Algorithms . 25 (1): 19– 51. doi : 10.1006/jagm.1997.0873 . Consultado el 10 de febrero de 2011 .
- ^ Thorup, Mikkel (18 de diciembre de 2009). "Algoritmos de libros de texto en SODA" .
- ↑ Woelfel, Philipp (1999). Hashing universal fuerte y óptimo eficiente . Fundamentos matemáticos de la informática 1999. LNCS. Vol. 1672. pp. 262– 272. doi : 10.1007/3-540-48340-3_24 .
- ^ Thorup , Mikkel (2009 ) . Hashing de cadenas para sondeo lineal . Proc. XX Simposio ACM-SIAM sobre Algoritmos Discretos (SODA) . págs. 655–664 . CiteSeerX 10.1.1.215.4253 . doi : 10.1137/1.9781611973068.72 . ISBN 978-0-89871-680-1., sección 5.3
- 1 2 Dietzfelbinger, Martin; Gil, Joseph; Matias, Yossi; Pippenger, Nicholas (1992). Las funciones hash polinomiales son fiables (resumen extendido) . Actas del 19.º Coloquio Internacional sobre Autómatas, Lenguajes y Programación (ICALP) . págs. 235–246 .
- ↑ Black, J.; Halevi, S.; Krawczyk, H.; Krovetz, T. (1999). UMAC: Autenticación de mensajes rápida y segura (PDF) . Avances en criptología (CRYPTO '99) ., Ecuación 1
- ↑ Pătraşcu, Mihai ; Thorup, Mikkel (2011). El poder del hash de tabulación simple . Actas del 43.º Simposio anual de la ACM sobre Teoría de la Computación (STOC '11) . págs. 1–10 . arXiv : 1011.5200 . doi : 10.1145/1993636.1993638 . ISBN 9781450306911.
- 1 2 Kaser, Owen; Lemire, Daniel (2013). "El hash de cadena universal fuerte es rápido". Computer Journal . 57 (11). Oxford University Press: 1624– 1638. arXiv : 1202.4961 . doi : 10.1093/comjnl/bxt070 .
- ↑ "Diapositivas del curso de la Universidad Hebrea" (PDF) .
- ↑ Robert Uzgalis . "Funciones hash de biblioteca" . 1996.
- ↑ Kankowsk, Peter. "Funciones hash: una comparación empírica" .
- ↑ Yigit, Ozan. "Funciones hash de cadena" .
- ↑ Kernighan; Ritchie (1988). "6" . El lenguaje de programación C (2.ª ed.). Prentice Hall. 118 págs . ISBN 0-13-110362-8.
{{cite book}}: CS1 maint: varios nombres: lista de autores ( enlace ) - ↑ "String (Java Platform SE 6)" . docs.oracle.com . Consultado el 10 de junio de 2015 .
Lecturas adicionales
- Knuth, Donald Ervin (1998). El arte de la programación informática, vol. III: Ordenación y búsqueda (3.ª ed.). Reading, Mass.; Londres: Addison-Wesley. ISBN 0-201-89685-0.
Enlaces externos
- Estructuras de datos abiertas - Sección 5.1.1 - Hashing multiplicativo , Pat Morin
- funciones hash criptográficas
- Hashing
- Algoritmos de búsqueda
- Teoría de la complejidad computacional