Атака дня рождения — это атака методом грубой силы , которая использует математику, лежащую в основе проблемы дня рождения в теории вероятностей . Эта атака может быть использована для злоупотребления связью между двумя или более сторонами. Атака зависит от более высокой вероятности столкновений, обнаруженных между случайными попытками атаки и фиксированной степенью перестановок ( pigeonholes ). Пусть будет числом возможных значений хэш-функции, при этом . С атакой дня рождения можно найти столкновение хэш-функции с вероятностью в , где — длина бита выходного хэш-кода, [1] [2] и при том же значении классического сопротивления прообразу с той же вероятностью. [2] Существует общий (хотя и спорный [3] ) результат , что квантовые компьютеры могут выполнять атаки дня рождения, тем самым нарушая сопротивление коллизии, в . [4]
Хотя существуют некоторые уязвимости цифровой подписи, связанные с атакой по дням рождения, ее нельзя использовать для взлома схемы шифрования быстрее, чем при атаке методом полного перебора . [5] : 36
В качестве примера рассмотрим сценарий, в котором учитель с классом из 30 учеников (n = 30) спрашивает день рождения каждого (для простоты проигнорируйте високосные годы ), чтобы определить, совпадают ли дни рождения любых двух учеников (что соответствует коллизии хэшей, описанной далее). Интуитивно этот шанс может показаться небольшим. Вопреки интуиции, вероятность того, что по крайней мере у одного ученика день рождения совпадает с днем рождения любого другого ученика в любой день, составляет около 70% (для n = 30) по формуле . [6]
Если учитель выбрал конкретный день (например, 16 сентября), то вероятность того, что хотя бы один ученик родился в этот день , составляет около 7,9%.
В атаке дня рождения злоумышленник подготавливает много различных вариантов доброкачественных и вредоносных контрактов, каждый из которых имеет цифровую подпись . Ищете пару доброкачественных и вредоносных контрактов с одинаковой подписью. В этом вымышленном примере предположим, что цифровая подпись строки — это первый байт ее хэша SHA-256 . Найденная пара обозначена зеленым цветом — обратите внимание, что поиск пары доброкачественных контрактов (синий) или пары вредоносных контрактов (красный) бесполезен. После того, как жертва принимает доброкачественный контракт, злоумышленник заменяет его вредоносным и утверждает, что жертва его подписала, что подтверждается цифровой подписью.
В контексте атаки по дням рождения ключевые переменные связаны с известной проблемой шаров и корзин в теории вероятностей следующим образом.
Переменная n представляет собой количество вводов (или попыток). По аналогии с задачей о шарах и корзинах, n относится к количеству шаров, которые случайным образом бросаются в H корзин. Каждый ввод соответствует бросанию шара в одну из корзин (значения хэш-функции).
Переменная H представляет собой общее количество возможных выходов хэш-функции. Это количество уникальных «корзин», в которые могут попасть шарики. Общее количество выходов хэша часто выражается как , где l — длина бита выходного хэша. В аналогии с шариками и корзинами H представляет собой количество корзин, каждая из которых соответствует уникальному значению хэша.
Переменная l относится к длине бит выходных данных хэш-функции. Поскольку хэш-функция с длиной бит l может создавать уникальные выходные данные, число возможных значений хэш-функции (или ячеек) равно .
Переменная p представляет вероятность того, что произойдет столкновение, то есть вероятность того, что двум или более входам (шарам) будет назначен один и тот же выход (корзина). В атаке дня рождения p часто устанавливается равным 0,5 (50%), чтобы оценить, сколько входов необходимо, чтобы иметь 50%-ную вероятность столкновения.
Атаку на день рождения можно смоделировать как вариант задачи о шарах и контейнерах . В этой задаче:
При наличии функции цель атаки — найти два разных входа, таких что . Такая пара называется коллизией. Метод, используемый для поиска коллизии, заключается в простой оценке функции для разных входных значений, которые могут быть выбраны случайным образом или псевдослучайно, пока один и тот же результат не будет найден более одного раза. Из-за проблемы дней рождения этот метод может быть довольно эффективным. В частности, если функция выдает любой из разных выходов с равной вероятностью и достаточно велика, то мы ожидаем получить пару разных аргументов и с после оценки функции для примерно разных аргументов в среднем.
Рассмотрим следующий эксперимент. Из набора значений H мы выбираем n значений равномерно случайным образом, тем самым допуская повторения. Пусть p ( n ; H ) будет вероятностью того, что в ходе этого эксперимента хотя бы одно значение будет выбрано более одного раза. Эту вероятность можно аппроксимировать как
где — количество выбранных значений (входов), а — количество возможных результатов (возможных выходов хэша).
Пусть n ( p ; H ) будет наименьшим числом значений, которые нам нужно выбрать, так что вероятность обнаружения столкновения будет не менее p . Инвертируя это выражение выше, мы находим следующее приближение
и присваивая вероятность столкновения 0,5, мы получаем
Пусть Q ( H ) будет ожидаемым числом значений, которые мы должны выбрать, прежде чем найти первое столкновение. Это число можно аппроксимировать как
Например, если используется 64-битный хэш, то существует приблизительно1,8 × 10 19 различных выходов. Если все они равновероятны (лучший случай), то потребуется «всего» около 5 миллиардов попыток (5,38 × 10 9 ) для генерации коллизии с использованием грубой силы. [8] Это значение называется границей дня рождения [9] и для l -битных кодов его можно приблизительно определить как 2 l /2 [10] Другие примеры приведены ниже:
Легко видеть, что если выходные данные функции распределены неравномерно, то коллизия может быть найдена еще быстрее. Понятие «баланса» хэш-функции количественно определяет устойчивость функции к атакам по дням рождения (использующим неравномерное распределение ключей). Однако определение баланса хэш-функции обычно требует вычисления всех возможных входных данных и, таким образом, неосуществимо для популярных хэш-функций, таких как семейства MD и SHA. [12]
Подвыражение в уравнении для не вычисляется точно для small при прямом переводе на распространенные языки программирования из- за потери значимости . Когда доступно (как в C99 ), например, вместо этого следует использовать эквивалентное выражение . [13] Если этого не сделать, первый столбец приведенной выше таблицы вычисляется как ноль, а несколько элементов во втором столбце не имеют даже одной правильной значащей цифры.log(1/(1-p))
log1p
-log1p(-p)
Хорошим практическим правилом , которое можно использовать для устных вычислений, является соотношение
что также можно записать как
или
Это хорошо работает для вероятностей, меньших или равных 0,5.
Эта схема аппроксимации особенно проста в использовании при работе с экспонентами. Например, предположим, что вы создаете 32-битные хэши ( ) и хотите, чтобы вероятность коллизии была не более одного на миллион ( ), сколько документов у нас может быть максимум?
что близко к правильному ответу 93.
Атака дня рождения — это метод, который использует математику коллизий в хэш-функциях. Ниже мы приводим верхние и нижние границы вероятности коллизии, основанные на аналогии с задачей о шарах и контейнерах, и выводим ключевые уравнения.
Атаку дня рождения можно смоделировать как бросание n шаров (входов) в H ячеек (возможные выходы хэша). Вероятность столкновения ограничена следующим уравнением:
Это уравнение следует из границы объединения, которая дает верхнюю границу вероятности того, что произойдет хотя бы одно столкновение. Мы обозначаем событие, когда i-й шар сталкивается с одним из предыдущих шаров, как . Вероятность столкновения для i-го шара равна:
Таким образом, общая вероятность столкновения после бросания всех n шаров ограничена:
Это дает верхнюю границу вероятности коллизии в хеш-функции.
Нижнюю границу вероятности столкновения можно получить, предположив, что столкновения не произойдет после бросания i шаров, которые должны занимать разные ячейки. Вероятность отсутствия столкновения после бросания (i+1)-го шара равна:
Общая вероятность отсутствия столкновения после бросания всех n шаров равна произведению следующих членов:
Используя неравенство , мы можем аппроксимировать это как:
Таким образом, вероятность хотя бы одного столкновения ограничена снизу:
Это дает нижнюю границу вероятности столкновения.
Из приведенного выше рассуждения следует, что вероятность хотя бы одного столкновения ограничена:
Допустим , что почти наверняка столкновение произойдет, когда число попыток n будет равно:
Это иллюстрирует, как количество входов, необходимых для коллизии, растет в зависимости от длины бит выходного хэша.
Цифровые подписи могут быть подвержены атаке дня рождения или, точнее, атаке коллизии выбранного префикса. Сообщение обычно подписывается сначала вычислением , где — криптографическая хэш-функция , а затем использованием некоторого секретного ключа для подписи . Предположим, Мэллори хочет обманом заставить Боба подписать мошеннический контракт. Мэллори готовит честный контракт и мошеннический . Затем она находит ряд позиций, в которых можно изменить , не меняя смысла, например, вставляя запятые, пустые строки, один пробел после предложения вместо двух, заменяя синонимы и т. д. Объединяя эти изменения, она может создать огромное количество вариаций, все из которых являются честными контрактами.
Аналогичным образом Мэллори также создает огромное количество вариаций мошеннического контракта . Затем она применяет хэш-функцию ко всем этим вариациям, пока не найдет версию честного контракта и версию мошеннического контракта, которые имеют одинаковое значение хэш-функции, . Она представляет честную версию Бобу для подписания. После того, как Боб подписал, Мэллори берет подпись и прикрепляет ее к мошенническому контракту. Эта подпись затем «доказывает», что Боб подписал мошеннический контракт.
Вероятности немного отличаются от исходной задачи о днях рождения, так как Мэллори ничего не выигрывает, находя два честных или два мошеннических контракта с одинаковым хешем. Стратегия Мэллори заключается в генерации пар из одного честного и одного мошеннического контракта. Для заданной хеш-функции есть количество возможных хешей, где — длина бита выходного хеша. Уравнения задачи о днях рождения здесь не совсем применимы. Для 50% вероятности коллизии Мэллори нужно было бы сгенерировать приблизительно хеши, что в два раза больше, чем требуется для простой коллизии в классической задаче о днях рождения.
Чтобы избежать этой атаки, выходную длину хэш-функции, используемой для схемы подписи, можно выбрать достаточно большой, чтобы атака по дням рождения стала вычислительно неосуществимой, т. е. примерно в два раза больше бит, чем требуется для предотвращения обычной атаки методом перебора .
Помимо использования большей длины бита, подписывающее лицо (Боб) может защитить себя, внеся некоторые случайные, безобидные изменения в документ перед его подписанием, а также сохранив копию подписанного им договора у себя, чтобы он мог, по крайней мере, продемонстрировать в суде, что его подпись соответствует этому договору, а не только поддельному.
Алгоритм Ро Полларда для логарифмов является примером алгоритма, использующего атаку дня рождения для вычисления дискретных логарифмов .
Такое же мошенничество возможно, если подписавшим является Мэллори, а не Боб. Боб может предложить Мэллори контракт для подписи. Мэллори может найти как безобидно-измененную версию этого честного контракта, которая имеет ту же подпись, что и мошеннический контракт, так и Мэллори может предоставить измененный честный контракт и подпись Бобу. Позже Мэллори может предоставить мошенническую копию. Если у Боба нет безобидно-измененной версии контракта (возможно, он нашел только свое оригинальное предложение), мошенничество Мэллори идеально. Если у Боба оно есть, Мэллори может по крайней мере утверждать, что именно Боб является мошенником.
Вот дополнительные подробности:
1. Первоначальное предложение по контракту: Боб предлагает Мэллори справедливый контракт, ожидая, что она его подпишет.
2. Измененные и мошеннические контракты Мэллори: вместо того, чтобы подписать контракт Боба напрямую, Мэллори создает две версии контракта.
3. Мэллори предоставляет измененный контракт: Мэллори подписывает измененную версию и передает ее Бобу. Подпись на этой версии та же самая, что и на мошенническом контракте.
4. Риск Боба: Если Боб не сохранит копию измененной версии, подписанной Мэллори, а сохранит только оригинальное предложение, у него не будет доказательств того, на что согласился Мэллори. Позже Мэллори может представить мошеннический контракт (на котором стоит та же подпись) и заявить, что это был тот, который был подписан.
5. Результаты:
{{cite journal}}
: Цитировать журнал требует |journal=
( помощь )