Función hash de Fowler-Noll-Vo


Fowler–Noll–Vo (o FNV ) es una función hash no criptográfica creada por Glenn Fowler, Landon Curt Noll y Kiem-Phong Vo.

La base del algoritmo hash FNV se tomó de una idea enviada como comentarios de un revisor al comité IEEE POSIX P1003.2 por Glenn Fowler y Phong Vo en 1991. En una ronda de votación posterior, Landon Curt Noll mejoró su algoritmo. En un mensaje de correo electrónico a Landon, lo llamaron hash Fowler/Noll/Vo o FNV. [1]

Las versiones actuales son FNV-1 y FNV-1a, que proporcionan un medio para crear una base de compensación de FNV distinta de cero . FNV actualmente viene en versiones de 32, 64, 128, 256, 512 y 1024 bits. Para implementaciones puras de FNV, esto se determina únicamente por la disponibilidad de números primos de FNV para la longitud de bit deseada; sin embargo, la página web de FNV analiza métodos para adaptar una de las versiones anteriores a una longitud más pequeña que puede o no ser una potencia de dos. [2] [3]

Los algoritmos hash de FNV y el código fuente de referencia de FNV [4] [5] se han liberado al dominio público . [6]

El lenguaje de programación Python utilizó anteriormente una versión modificada del esquema FNV para su hashfunción predeterminada. A partir de Python 3.4, FNV se reemplazó con SipHash para resistir los ataques de denegación de servicio de "inundación de hash" . [7]

Una de las principales ventajas de FNV es que es muy fácil de implementar. Comience con un valor hash inicial de la base de compensación de FNV . Para cada byte en la entrada, multiplique hash por el FNV prime , luego XOR con el byte de la entrada. El algoritmo alternativo, FNV-1a, invierte los pasos de multiplicación y XOR.