Кіріспе

Хеш функциясы құбылысы

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

Өмірбаян

Хеш-соқтығысулар жиынтықтағы нысандардың санына және оларға сәйкестендірілген биттік тізбектің жеткілікті ұзындығына байланысты туындауы мүмкін. Егер n нысаннан тұратын жиынтық болса, және n саны хэш-мәнінің диапазоны R-ден үлкен болса, онда хэш-соқтығысуының ықтималдығы 1-ге тең, яғни оның болуы кепілді. Хэш-соқтығысулардың кез келген уақытта пайда болуының тағы бір себебі – математикадағы туған күн парадоксының идеясы. Бұл мәселе n адамның арасынан кездейсоқ таңдалған екі адамның бірдей туған күніне ие болу ықтималдығын қарастырады. Осы идея туған күнге жасалған шабуыл деп аталатын нәрсенің пайда болуына әкелді. Бұл шабуылдың мәні – нақты сіздің туған күніңізге немесе белгілі бір туған күніне сәйкес туған күнді табу қиын, бірақ кез келген екі адамның туған күндері сәйкес келу ықтималдығы артады. Зардап шегушілер осы тәсілді нақты мәнді іздеудің орнына, кез келген басқа хэш-мәнімен соқтығысатын хэш-мәндерін табуды жеңілдету үшін пайдалана алады. Соқтығысудың әсері қолданылған салаға байланысты. Хэш-функциялар мен сақтандырғыштар гомологты ДНК тізбектері немесе ұқсас аудио файлдар сияқты ұқсас деректерді анықтау үшін қолданылғанда, функциялар жергілікті сезімтал хэштеу сияқты әдістерді пайдаланып, ерекше бірақ ұқсас деректер арасындағы соқтығысу ықтималдығын арттыруға бағытталған. Ал тексеру сомалары ұқсас кірістер арасындағы соқтығысу ықтималдығын азайту үшін жасалған, әртүрлі кірістер арасындағы соқтығысуларға назар аудармай. Зардап шегушілер хэш-соқтығысуларын жасауға немесе табуға тырысатын жағдайлар соқтығысу шабуылдары деп аталады. Іс жүзінде, қауіпсіздікке қатысты қолданыстар криптографиялық хэш-алгоритмдерін пайдаланады, олар кездейсоқ сәйкестіктердің болу ықтималдығын азайту үшін жеткілікті ұзын, кез келген жерде қолдануға болатын жылдам және соқтығысуларды табудың өте қиын болуын қамтамасыз ететін қауіпсіз болып жасалған.

CRC-32

CRC 32 хэш-соқтығысулары үшін ең жоғары тәуекел тудырады. Бұл хэш-функцияны қолдану көбінесе ұсынылмайды. Егер хабта 77 163 хэш-мәні болса, хэш-соқтығысу пайда болу ықтималдығы 50% құрайды, бұл басқа әдістермен салыстырғанда өте жоғары деңгей.

MD5

MD5 – ең көп қолданылатын және басқа екі хэш-функциясымен салыстырғанда, хэш-тұрастыру қаупі тұрғысынан орташа деңгейде болып табылады. Хэш-тұрастырудың 50% мүмкіндігін тудыру үшін хабта 5,06 миллиардтан астам жазба болуы керек. Ашық адрестеу – жабық хэштеу деп те аталады.

Бөлек тізбектеу

Бұл стратегия бірнеше жазбаны хэш-кестенің ұяшықтарына "тізбектеуге" мүмкіндік береді. Егер екі жазба бір ұяшыққа бағытталса, екеуі де сол ұяшыққа байланысты тізім түрінде орналасады. Бұл хэш-соқтығысудың алдын алуға көмектеседі, себебі бірдей хэш-мәні бар жазбалар бір ұяшыққа түсе алады, бірақ бұның да кемшіліктері бар. Ондай көптеген тізімдерді қадағалау қиын, және қолданылып жатқан құралдың жұмысы өте баяулау болуы мүмкін.

Кэшке бейімделген соқтығысуды шешу

Алдыңғы екеуінен гөрі әлдеқайда сирек қолданылса да, 2005 жылы кэшті ескеретін соқтығысуды шешу әдісі ұсынылды. Бұл бөлек тізбектеу әдістеріне ұқсас идея, бірақ ол техникалық тұрғыдан тізбекті тізімдерді қамтымайды. Оның орнына, хэш-мәндер элементтердің үздісіз тізімінде көрсетіледі. Бұл әдіс мәтіндік хэш-кестелерге жақсырақ сай келеді, ал сандық мәндер үшін қолданылуы әлі белгісіз.