Кіріспе
Криптографиялық емес хэш-функция
Fowler–Noll–Vo (немесе FNV) – Гленн Фаулер, Лэндон Курт Нолл және Ким Фонг Во жасаған криптографиялық емес хэш-функция. FNV хэш алгоритмінің негізі 1991 жылы Гленн Фаулер мен Фонг Воның IEEE POSIX P1003.2 комитетіне рецензия ретінде жіберген идеясынан туындаған. Келесі дауыс беру кезеңінде Лэндон Курт Нолл олардың алгоритмін жақсартты. Лэндонға жолданған электрондық хабарда олар оны Фаулер/Нолл/Во немесе FNV хэші деп атады.
Fowler–Noll–Vo (or FNV) is a non cryptographic hash function created by Glenn Fowler, Landon Curt Noll, and Kiem Phong Vo. The basis of the FNV hash algorithm was taken from an idea sent as reviewer comments to the IEEE POSIX P1003.2 committee by Glenn Fowler and Phong Vo in 1991. In a subsequent ballot round, Landon Curt Noll improved on their algorithm. In an email message to Landon, they named it the Fowler/Noll/Vo or FNV hash.
Криптографиялық емес хэш
FNV хэші жылдам хэш кестесі және бақылау сомасын пайдалану үшін жасалған, шифрлау үшін емес. Авторлар алгоритмді криптографиялық хэш-функция ретінде қолдануға жарамсыз ететін келесі қасиеттерді анықтады:
Speed of computation – As a hash designed primarily for hashtable and checksum use, FNV 1 and FNV 1a were designed to be fast to compute. However, this same speed makes finding specific hash values (collisions) by brute force faster. Sticky state – Being an iterative hash based primarily on multiplication and XOR, the algorithm is sensitive to the number zero. Specifically, if the hash value were to become zero at any point during calculation, and the next byte hashed were also all zeroes, the hash would not change. This makes colliding messages trivial to create given a message that results in a hash value of zero at some point in its calculation. Additional operations, such as the addition of a third constant prime on each step, can mitigate this but may have detrimental effects on avalanche effect or random distribution of hash values. Diffusion – The ideal secure hash function is one in which each byte of input has an equally complex effect on every bit of the hash. In the FNV hash, the ones place (the rightmost bit) is always the XOR of the rightmost bit of every input byte. This can be mitigated by XOR folding (computing a hash twice the desired length, and then XORing the bits in the "upper half" with the bits in the "lower half").
Есептеу жылдамдығы – FNV 1 және FNV 1a хэштері негізінен хэш кестесі мен бақылау сомасын пайдалануға арналғандықтан, олар жылдам есептелуі үшін жасалған. Дегенмен, осы жылдамдық күш қолдану арқылы нақты хэш мәндерін (қақтығыстарды) табуды жеделдетеді.
Speed of computation – As a hash designed primarily for hashtable and checksum use, FNV 1 and FNV 1a were designed to be fast to compute. However, this same speed makes finding specific hash values (collisions) by brute force faster. Sticky state – Being an iterative hash based primarily on multiplication and XOR, the algorithm is sensitive to the number zero. Specifically, if the hash value were to become zero at any point during calculation, and the next byte hashed were also all zeroes, the hash would not change. This makes colliding messages trivial to create given a message that results in a hash value of zero at some point in its calculation. Additional operations, such as the addition of a third constant prime on each step, can mitigate this but may have detrimental effects on avalanche effect or random distribution of hash values. Diffusion – The ideal secure hash function is one in which each byte of input has an equally complex effect on every bit of the hash. In the FNV hash, the ones place (the rightmost bit) is always the XOR of the rightmost bit of every input byte. This can be mitigated by XOR folding (computing a hash twice the desired length, and then XORing the bits in the "upper half" with the bits in the "lower half").
Тұрақты күйі – Көбейту және XOR негізіндегі итеративтік хэш болғандықтан, алгоритм нөлге сезімтал. Атап айтқанда, егер хэш мәні есептеу барысында кез келген сәтте нөлге теңелсе, ал келесі байттың хэші де нөл болса, хэш өзгермейді. Бұл нөл хэш мәнін беретін хабар үшін қақтығыс тудыруды жеңілдетеді. Үшінші тұрақты санның әр қадамда қосылуы сияқты қосымша операциялар осы мәселені азайтуы мүмкін, бірақ бұл хэш мәндерінің қар көшкініне немесе кездейсоқ таралуына кері әсер етуі мүмкін.
Speed of computation – As a hash designed primarily for hashtable and checksum use, FNV 1 and FNV 1a were designed to be fast to compute. However, this same speed makes finding specific hash values (collisions) by brute force faster. Sticky state – Being an iterative hash based primarily on multiplication and XOR, the algorithm is sensitive to the number zero. Specifically, if the hash value were to become zero at any point during calculation, and the next byte hashed were also all zeroes, the hash would not change. This makes colliding messages trivial to create given a message that results in a hash value of zero at some point in its calculation. Additional operations, such as the addition of a third constant prime on each step, can mitigate this but may have detrimental effects on avalanche effect or random distribution of hash values. Diffusion – The ideal secure hash function is one in which each byte of input has an equally complex effect on every bit of the hash. In the FNV hash, the ones place (the rightmost bit) is always the XOR of the rightmost bit of every input byte. This can be mitigated by XOR folding (computing a hash twice the desired length, and then XORing the bits in the "upper half" with the bits in the "lower half").
Диффузия – Идеалды қауіпсіз хэш-функцияда кіріс байтының әрқайсысы хэштің әр битіне бірдей күрделі әсер етеді. FNV хэшінде бірліктер орны (оң жақ биті) әрқашан әрбір кіріс байтының оң жақ битінің XOR-ы болып табылады. Бұл XOR бүктеу арқылы шектеуге болады (қажетті ұзындықтан екі есе ұзын хэшті есептеу, содан кейін «жоғарғы жартысының» биттерін «төменгі жартысының» биттерімен XOR-мен біріктіру).
Speed of computation – As a hash designed primarily for hashtable and checksum use, FNV 1 and FNV 1a were designed to be fast to compute. However, this same speed makes finding specific hash values (collisions) by brute force faster. Sticky state – Being an iterative hash based primarily on multiplication and XOR, the algorithm is sensitive to the number zero. Specifically, if the hash value were to become zero at any point during calculation, and the next byte hashed were also all zeroes, the hash would not change. This makes colliding messages trivial to create given a message that results in a hash value of zero at some point in its calculation. Additional operations, such as the addition of a third constant prime on each step, can mitigate this but may have detrimental effects on avalanche effect or random distribution of hash values. Diffusion – The ideal secure hash function is one in which each byte of input has an equally complex effect on every bit of the hash. In the FNV hash, the ones place (the rightmost bit) is always the XOR of the rightmost bit of every input byte. This can be mitigated by XOR folding (computing a hash twice the desired length, and then XORing the bits in the "upper half" with the bits in the "lower half").