Свойства безопасности
Хеш-функции — это математические преобразования, которые принимают на вход данные произвольного размера и возвращают фиксированный по длине результат, называемый хешем или дайджестом. Они широко применяются в программировании, базах данных и криптографии.
Существует несколько классов хеш-функций, каждый из которых ориентирован на свои задачи:
- Простые хеш-функции, такие как контрольные суммы и CRC, предназначены для проверки целостности данных и обнаружения ошибок при передаче. Они работают быстро, но не обеспечивают защиты от намеренного искажения данных.
- Криптографические хеш-функции разработаны с целью обеспечить безопасность: сделать невозможным восстановление исходных данных по хешу, найти другие данные с таким же хешем или две любые разные записи с совпадающим хешем. Эти свойства называются устойчивостью к нахождению прообраза, второго прообраза и коллизиям соответственно.
- Специализированные хеш-функции используются для оптимизации задач, таких как быстрый поиск в базах данных или хранение паролей с применением дополнительных методов защиты. Они не всегда криптографически стойкие, но эффективны для своих целей.
Свойства безопасности
Устойчивость к атакам
- Нахождения прообраза - когда известен хеш (результат), и требуется определить исходные данные. Это занимает огромное количество времени при использовании надёжного алгоритма.
- Нахождения второго прообраза - когда известны данные и их хеш, и требуется найти другие данные, которые при хешировании дадут такой же хеш. Это сложнее, чем нахождение прообраза, поскольку один из входов фиксирован.
- Нахождения коллизий - Поиск любых двух различных данных, у которых совпадают хеши. Эта атака чаще всего используется для того, чтобы подменить документы или подписи - ты показываешь, что хеш валиден, но на самом деле меняешь содержимое.
Размер хеша
Существует обязательный минимальный размер хеш-функции - 256 бит, или 32 байта. При таком большом размере выхода коллизий быть не должно.
В реальной криптографии алгоритмы ориентируются на минимальный уровень безопасности в 128 бит. Злоумышленник, который хочет взломать алгоритма обеспечивающий 128-битную защиту, должен выполнить около $2^{128}$ операций (например, перебор всех возможных входных строк длиной 128 бит потребует $2^{128}$ операций). Самой простой атакой обычно является поиск коллизий в связи с ограниченностью дней рождения.
Парадокс дней рождений и поиск коллизий
Парадокс дней рождений - это известное явление из теории вероятностей. Он говорит о том, что в группе из всего 23 человек вероятность того, что у двух из них совпадет день рождения уже превышает 50%. Это кажется удивительным, потому что дней в году 364, а людей всего 23, но совпадения происходят чаще, чем интуитивно ожидается.
Хеш-функция превращает данные в короткий набор символов — хеш. Поскольку набор возможных хешей ограничен (например, 2^128 вариантов), при большом количестве различных данных с очень высокой вероятностью найдутся два разных входа, которые дадут одинаковый хеш.
Парадокс дней рождений показывает, что для обнаружения такой коллизии не нужно перебирать все возможные варианты, а достаточно проверить значительно меньшее количество. Это делает поиск коллизий более эффективным, чем поиск прообраза или второго прообраза.
Важно понимать, что этот парадокс применим именно к поиску любых двух данных с одинаковым хешем (коллизиям) и не облегчает нахождение прообраза или второго прообраза, где задача сложнее и требует гораздо больших вычислительных ресурсов.
Парадокс дней рождений: математическое объяснение
Есть группа из $n$ человек, и необходимо узнать вероятность того, что хотя бы у двух из них совпадёт день рождения. Считаем, что в году $d=365$ дней, и что дни рождения равновероятны и независимы.
-
Вероятность того, что у всех nnn человек дни рождения разные, равна: $P(\text{все разные}) = \frac{d}{d} \times \frac{d-1}{d} \times \frac{d-2}{d} \times \cdots \times \frac{d - n + 1}{d} = \prod_{k=0}^{n-1} \left(1 - \frac{k}{d}\right)$
-
Тогда вероятность того, что есть хотя бы одна пара с одинаковым днем рождения: $P(совпадение)=1−P(все разные)=1-\prod_{k=0}^{n-1} \left(1 - \frac{k}{d}\right)$
Для $n=23$ эта вероятность уже больше 0.5 — то есть более 50%, что кого-то с днем рождения совпадёт.
Как это связано с поиском коллизий в хеш-функциях
В случае хеш-функций:
- $d$ - количество всех возможных хеш-значений (например, $2^{128}$ для 128-битного хеша).
- $n$ - количество хешей, которые мы вычисляем для разных входных данных.
Парадокс показывает, что вероятность найти хотя бы одну пару с одинаковым хешем (коллизию) становится значительной при количестве вычисленных хешей примерно около $\sqrt{d}$ (корень из общего числа возможных хешей). Это - следствие вероятностного анализа, аналогичного парадоксу дней рождений.