Кіріспе

Хаш-функцияларды таңдау техникасы Математика және информатикада әмбебап хэшинг (рандомизацияланған алгоритм немесе деректер құрылымы) — белгілі бір математикалық қасиеттері бар хаш-функциялар отбасынан кездейсоқ хаш-функцияны таңдауды білдіреді (төмендегі анықтаманы қараңыз). Бұл, егер деректерді қарсылас таңдаған жағдайда да, күтілетін соқтығысу санын азайтуға кепілдік береді. Хаш-функцияларды бүтін сандарға, векторларға, жолдарға қолдану үшін көптеген әмбебап отбасылар белгілі, олардың есептелуі көбінесе өте тиімді. әмбебап хэшинг компьютерлік ғылымда кеңінен қолданылады, мысалы, хаш-кестелерді, рандомизацияланған алгоритмдерді және криптографияны жүзеге асыруда.

Кіріспе

Біз кейбір ғаламның кілттерін (белгіленген) контейнерлерге орналастырғымыз келсе, алгоритм алдын ала белгісіз кілттердің деректер жиынтығын өңдеуге тиіс. Хэштеудің мақсаты, әдетте, соқтығысулардың санын азайту, яғни ғаламнан кілттердің бір контейнерге түсуін қамтамасыз ету. Детерминистік хэш-функция қарсыластық ортада ешқандай кепілдік бере алмайды, себебі қарсылас контейнердің алдын ала бейнесін таңдап алуы мүмкін. Бұл жағдайда барлық деректер кілттері бір контейнерге түсіп, хэштеудің мәнісіз болуына әкеледі. Сонымен қатар, детерминистік хэш-функция қайта хэштеуге мүмкіндік бермейді: кейде кіріс деректері хэш-функция үшін қолайсыз болып шығады (мысалы, тым көп соқтығысулар пайда болады), сондықтан хэш-функцияны өзгерту қажеттігі туындайды. Бұл мәселелерді шешу үшін хэш функцияларының отбасынан кездейсоқ функцияны таңдау керек. Функциялардың отбасы, егер ғаламның екі түрлі кілті хэш функциясы кездейсоқ түрде таңдалғанда, соқтығысу ықтималдығы белгілі бір мәннен аспаса, универсалды отбасы деп аталады. Бұл, хэш функциясы әр кілтке толығымен кездейсоқ хэш кодтарын тағайындағанда күтілетін соқтығысу ықтималдығымен сәйкес келеді. Кейде анықтама тұрақты фактормен жеңілдетіледі. Бұл ұғымды Картер мен Вегман 1977 жылы енгізген, және компьютерлік ғылымда көптеген қолданыс тапқан (мысалы, қараңыз). Егер соқтығысу ықтималдығының жоғарғы шегі болса, онда отбасы «жақындағы универсалдыққа» ие деп айтуға болады. Мысалы, универсалды отбасы жақындағы универсалдыққа ие. Көптеген, бірақ барлық емес, универсалды отбасыларда келесідей біркелкі айырмашылық қасиеті бар: хэш функциясы отбасынан кездейсоқ алынғанда, айырмашылық біркелкі таралады. Біркелкі айырмашылық қасиеті күштірек. (Сонымен қатар, универсалды отбасы XOR-универсалды болуы мүмкін, егер айырмашылықтың мәні біркелкі таратылса, онда біттік эксклюзивті немесе операциясы қолданылады. Бұл тек екінің дәрежесі болғанда ғана мүмкін.) Одан да күшті шарт – жұптық тәуелсіздік: егер кез келген екі кілттің хэш-мәндерінің жұбы толығымен кездейсоқ болса, онда бұл қасиетке ие болады. Жұптық тәуелсіздік кейде «күшті универсалдық» деп аталады. Тағы бір қасиет – біркелкілік. Егер барлық хэш-мәндер бірдей ықтималдыққа ие болса, онда отбасы біркелкі деп айтылады. Универсалдылық біркелкілікті білдірмейді. Алайда, күшті универсалдылық біркелкілікті білдіреді. Біркелкі қашықтық қасиетіне ие отбасы берілген жағдайда, жұптық тәуелсіз немесе күшті универсалды хэш отбасын жасау үшін хэш функцияларына біркелкі таратылған кездейсоқ тұрақты қосу арқылы алуға болады. (Сонымен қатар, егер екінің дәрежесі болса, XOR-универсалды хэш отбасынан жұптық тәуелсіздікке қол жеткізу үшін эксклюзивті немесе операциясын біркелкі таратылған кездейсоқ тұрақтымен орындауға болады.) Тұрақты ауытқу кейде қолданбаларда маңызды емес болғандықтан, біркелкі қашықтық қасиеті мен жұптық тәуелсіздік арасындағы айырмашылыққа көңіл бөлмейді. Кейбір қолданбалар үшін (мысалы, хэш-кестелерде) хэш-мәндерінің ең кіші маңызды биттері де универсалды болуы маңызды. Отбасы күшті универсалды болған кезде, бұл кепілдендіріледі: егер отбасы күшті универсалды болса, онда барлық функциялардан тұратын отбасы да күшті универсалды болады. Өкінішке орай, (тек) универсалды отбасылар үшін бұл дұрыс емес. Мысалы, сәйкестік функциясынан тұратын отбасы анық универсалды, бірақ функциядан тұратын отбасы универсалды бола алмайды. UMAC және Poly1305 AES және басқа да бірнеше хабарламаны аутентификациялау алгоритмдері универсалды хэштеуге негізделген. Мұндай қолданбаларда бағдарламалық қамтамасыз ету әрбір хабарлама үшін жаңа хэш-функцияны таңдайды, бұл хабарламаның бірегей нонсіне негізделген. Бірнеше хэш-кестелерді жүзеге асыру универсалды хэштеуге негізделген. Мұндай қолданбаларда бағдарламалық қамтамасыз ету әдетте «өте көп» кілттердің соқтығысқанын байқағаннан кейін ғана жаңа хэш-функцияны таңдайды; сол кезге дейін, бірдей хэш-функция қайта-қайта қолданыла береді. (Кейбір соқтығысуды шешу схемалары, мысалы, динамикалық кемелді хэштеу, соқтығысу болған сайын жаңа хэш функциясын таңдайды. Басқа соқтығысуды шешу схемалары, мысалы, кукушкалы хэштеу және 2 таңдаулы хэштеу, жаңа хэш функциясын таңдамас бұрын бірнеше соқтығысуларға мүмкіндік береді.) Бүкіл сандар, векторлар және тізбектер үшін ең жылдам белгілі универсалды және күшті универсалды хэш функцияларының шолуы табылды.

Хашинг векторлары

Бұл бөлім машиналық сөздердің белгілі бір ұзындығындағы векторды хэштеуге арналған. Кірісті машиналық сөздердің векторы ретінде қарастырыңыз (әрқайсысы біттен тұратын бүтін сандар). Егер – біртекті айырмашылық қасиетіне ие әмбебап отбасы болса, келесі отбасы (Картер мен Вегманға дейін жетеді). Егер қос дәлдік арифметикасы қолжетімді болса, бұл көбейту-қайыру хэш функцияларының отбасымен жүзеге асырылады. Егер қос дәлдік операциялары қолжетімді болмаса, кірісті жарты сөздердің векторы ретінде қарастыруға болады (биттік бүтін сандар). Алгоритм көбейтуді қолданады, онда – вектордағы жарты сөздердің саны болды. Осылайша, алгоритм кіріс сөзінің біріне көбейту «жылдамдығымен» жұмыс істейді. Осы схеманы бүтін сандарды хэштеу үшін де қолдануға болады, олардың биттерін байттардың векторлары ретінде қарастыру арқылы. Бұл нұсқада векторлық техника кестелік хэштеу деп аталады және көбейтуге негізделген әмбебап хэштеу схемаларына практикалық балама ұсынады. Жоғары жылдамдықта күшті әмбебаптыққа да қол жеткізуге болады. Хэш-функцияны біттегі кездейсоқ бүтін сандардың векторымен бастаңыз. Нәтиже бітте күшті әмбебап болады. Эксперименттік түрде, бұл соңғы Intel процессорларында байтқа 0,2 CPU циклымен жұмыс істейтіні анықталды.