Кіріспе

Криптографиялық емес хэш-функция
Fowler–Noll–Vo (немесе FNV) – Гленн Фаулер, Лэндон Курт Нолл және Ким Фонг Во жасаған криптографиялық емес хэш-функция. FNV хэш алгоритмінің негізі 1991 жылы Гленн Фаулер мен Фонг Воның IEEE POSIX P1003.2 комитетіне рецензия ретінде жіберген идеясынан туындаған. Келесі дауыс беру кезеңінде Лэндон Курт Нолл олардың алгоритмін жақсартты. Лэндонға жолданған электрондық хабарда олар оны Фаулер/Нолл/Во немесе FNV хэші деп атады.

Криптографиялық емес хэш

FNV хэші жылдам хэш кестесі және бақылау сомасын пайдалану үшін жасалған, шифрлау үшін емес. Авторлар алгоритмді криптографиялық хэш-функция ретінде қолдануға жарамсыз ететін келесі қасиеттерді анықтады:

Есептеу жылдамдығы – FNV 1 және FNV 1a хэштері негізінен хэш кестесі мен бақылау сомасын пайдалануға арналғандықтан, олар жылдам есептелуі үшін жасалған. Дегенмен, осы жылдамдық күш қолдану арқылы нақты хэш мәндерін (қақтығыстарды) табуды жеделдетеді.

Тұрақты күйі – Көбейту және XOR негізіндегі итеративтік хэш болғандықтан, алгоритм нөлге сезімтал. Атап айтқанда, егер хэш мәні есептеу барысында кез келген сәтте нөлге теңелсе, ал келесі байттың хэші де нөл болса, хэш өзгермейді. Бұл нөл хэш мәнін беретін хабар үшін қақтығыс тудыруды жеңілдетеді. Үшінші тұрақты санның әр қадамда қосылуы сияқты қосымша операциялар осы мәселені азайтуы мүмкін, бірақ бұл хэш мәндерінің қар көшкініне немесе кездейсоқ таралуына кері әсер етуі мүмкін.

Диффузия – Идеалды қауіпсіз хэш-функцияда кіріс байтының әрқайсысы хэштің әр битіне бірдей күрделі әсер етеді. FNV хэшінде бірліктер орны (оң жақ биті) әрқашан әрбір кіріс байтының оң жақ битінің XOR-ы болып табылады. Бұл XOR бүктеу арқылы шектеуге болады (қажетті ұзындықтан екі есе ұзын хэшті есептеу, содан кейін «жоғарғы жартысының» биттерін «төменгі жартысының» биттерімен XOR-мен біріктіру).