stringtranslate.com

Коллизия хэшей

У Джона Смита и Сандры Ди одинаковое хеш-значение 02, что приводит к хеш-коллизии.

В информатике коллизия хэшей или столкновение хэшей [1] происходит, когда два различных фрагмента данных в хэш-таблице имеют одно и то же значение хэша. Значение хэша в этом случае выводится из хэш-функции , которая принимает входные данные и возвращает фиксированную длину битов. [2]

Хотя алгоритмы хеширования, особенно криптографические алгоритмы хеширования, были созданы с намерением быть устойчивыми к коллизиям , они все еще могут иногда отображать различные данные в один и тот же хеш (в силу принципа ящика ). Злонамеренные пользователи могут воспользоваться этим, чтобы имитировать, получать доступ или изменять данные. [3]

Из-за возможных негативных применений коллизий хэшей в управлении данными и компьютерной безопасности (в частности, криптографических хэш-функций ), предотвращение коллизий стало важной темой в компьютерной безопасности.

Фон

Коллизии хэшей могут быть неизбежны в зависимости от количества объектов в наборе и от того, достаточно ли длинна строка битов, с которой они сопоставлены. Когда есть набор из n объектов, если n больше, чем | R |, который в этом случае является диапазоном значения хэша, вероятность того, что возникнет коллизия хэшей, равна 1, что означает, что она гарантированно произойдет. [4]

Другая причина, по которой в какой-то момент времени вероятны коллизии хэшей, проистекает из идеи парадокса дней рождения в математике. Эта задача рассматривает вероятность того, что у набора из двух случайно выбранных людей будет одинаковый день рождения из n числа людей. [5] Эта идея привела к тому, что было названо атакой на день рождения . Предпосылка этой атаки заключается в том, что трудно найти день рождения, который точно совпадает с вашим днем ​​рождения или определенным днем ​​рождения, но вероятность найти набор из любых двух людей с совпадающими днями рождения значительно увеличивает вероятность. Злоумышленники могут использовать этот подход, чтобы упростить себе поиск значений хэшей, которые конфликтуют с любым другим значением хэшей, — вместо поиска определенного значения. [6]

Влияние коллизий зависит от приложения. Когда хэш-функции и отпечатки пальцев используются для идентификации схожих данных, таких как гомологичные последовательности ДНК или схожие аудиофайлы, функции разрабатываются таким образом, чтобы максимизировать вероятность коллизии между различными, но схожими данными, используя такие методы, как локально-чувствительное хэширование . [7] Контрольные суммы , с другой стороны, разрабатываются для минимизации вероятности коллизий между схожими входами, без учета коллизий между очень разными входами. [8] Случаи, когда злоумышленники пытаются создать или найти коллизии хэшей, известны как атаки коллизий. [9]

На практике приложения, связанные с безопасностью, используют криптографические алгоритмы хеширования, которые разработаны так, чтобы быть достаточно длинными, чтобы случайные совпадения были маловероятными, достаточно быстрыми, чтобы их можно было использовать где угодно, и достаточно безопасными, чтобы было чрезвычайно сложно обнаружить коллизии. [8]

Разрешение столкновений

В хэш-таблицах, поскольку хэш-коллизии неизбежны, хэш-таблицы имеют механизмы для их обработки, известные как разрешения коллизий. Две наиболее распространенные стратегии — открытая адресация и раздельное цепочкование . Разрешение коллизий с учетом кэша — еще одна стратегия, которая обсуждалась в прошлом для строковых хэш-таблиц.

Джон Смит и Сандра Ди оба направляются в одну и ту же ячейку. Открытая адресация заставит хэш-таблицу перенаправить Сандру Ди в другую ячейку.

Открытая адресация

Ячейкам в хэш-таблице в этом методе присваивается одно из трех состояний — занято, пусто или удалено. Если происходит коллизия хэша, таблица будет проверена, чтобы переместить запись в альтернативную ячейку, которая указана как пустая. Существуют различные типы проверки, которые имеют место, когда происходит коллизия хэша, и этот метод реализован. Некоторые типы проверки — это линейное зондирование , двойное хэширование и квадратичное зондирование . [10] Открытая адресация также известна как закрытое хэширование. [11]

Раздельное цепочкование

Эта стратегия позволяет «присоединить» более одной записи к ячейкам хэш-таблицы. Если две записи направляются в одну и ту же ячейку, обе попадут в эту ячейку как связанный список. Это эффективно предотвращает возникновение коллизии хэшей, поскольку записи с одинаковыми значениями хэшей могут попадать в одну и ту же ячейку, но у этого есть свои недостатки. Отслеживание такого количества списков затруднительно и может привести к тому, что любой используемый инструмент станет очень медленным. [10] Раздельное связывание также известно как открытое хэширование. [12]

Разрешение коллизий с учетом кэширования

Хотя он использовался гораздо реже, чем два предыдущих, в 2005 году Аскитис и Зобель (2005) предложили метод разрешения коллизий с учетом кэша . [13] Это идея, похожая на отдельные методы цепочек, хотя технически она не включает в себя цепочечные списки. В этом случае вместо цепочечных списков хеш-значения представлены в непрерывном списке элементов. Это лучше подходит для строковых хеш-таблиц, а использование для числовых значений пока неизвестно. [10]

Смотрите также

Ссылки

  1. ^ Томас, Кормен (2009), Введение в алгоритмы , MIT Press, стр. 253, ISBN 978-0-262-03384-8
  2. ^ Стапко, Тимоти (2008), «Встроенная безопасность», Practical Embedded Security , Elsevier, стр. 83–114, doi :10.1016/b978-075068215-2.50006-9, ISBN 9780750682152, получено 2021-12-08
  3. ^ Шнайер, Брюс . «Криптоанализ MD5 и SHA: время для нового стандарта». Computerworld . Архивировано из оригинала 2016-03-16 . Получено 2016-04-20 . Гораздо больше, чем алгоритмы шифрования, односторонние хэш-функции являются рабочими лошадками современной криптографии.
  4. ^ Кибербезопасность и прикладная математика. 2016. doi :10.1016/c2015-0-01807-x. ISBN 9780128044520.
  5. ^ Солтаниан, Мохаммад Реза Халифе (10 ноября 2015 г.). Теоретические и экспериментальные методы защиты от DDoS-атак. ISBN 978-0-12-805399-7. OCLC  1162249290.
  6. ^ Конрад, Эрик; Мисенар, Сет; Фельдман, Джошуа (2016), «Домен 3: Инженерия безопасности (Инженерия и управление безопасностью)», Учебное пособие CISSP , Elsevier, стр. 103–217, doi :10.1016/b978-0-12-802437-9.00004-7, ISBN 9780128024379, получено 2021-12-08
  7. ^ Раджараман, А.; Ульман, Дж. (2010). «Майнинг массивных наборов данных, Гл. 3».
  8. ^ ab Al-Kuwari, Saif; Davenport, James H.; Bradford, Russell J. (2011). Криптографические хэш-функции: последние тенденции проектирования и понятия безопасности. Inscrypt '10.
  9. ^ Schema, Mike (2012). Взлом веб-приложений .
  10. ^ abc Nimbe, Peter; Ofori Frimpong, Samuel; Opoku, Michael (2014-08-20). «Эффективная стратегия разрешения коллизий в хэш-таблицах». International Journal of Computer Applications . 99 (10): 35–41. Bibcode : 2014IJCA...99j..35N. doi : 10.5120/17411-7990 . ISSN  0975-8887.
  11. ^ Клайн, Роберт. «Закрытое хеширование». CSC241 Структуры данных и алгоритмы . Университет Вест-Честера . Получено 2022-04-06 .
  12. ^ "Открытое хеширование или раздельное цепочкование". Журнал 2 2 .
  13. ^ Аскитис, Николас; Зобель, Джастин (2005). Консенс, М.; Наварро, Г. (ред.). Разрешение коллизий с использованием кэша в строковых хэш-таблицах . Международный симпозиум по обработке строк и поиску информации. Обработка строк и поиск информации SPIRE 2005. Конспект лекций по информатике. Том 3772. Берлин, Гейдельберг: Springer Berlin Heidelberg. стр. 91–102. doi :10.1007/11575832_11. ISBN 978-3-540-29740-6.

Внешние ссылки