Атака на день рождения - Birthday attack
А атака на день рождения это тип криптографический атака что эксплуатирует математика за проблема дня рождения в теория вероятности. Эта атака может использоваться для злоупотребления связью между двумя или более сторонами. Атака зависит от более высокой вероятности столкновения найденный между случайными попытками атаки и фиксированной степенью перестановок (почтовые ящики ). При атаке дня рождения можно найти столкновение хеш-функция в , с участием быть классическим сопротивление прообразу безопасность. Есть генерал (хоть и спорный[1]) приводят к тому, что квантовые компьютеры могут выполнять атаки по случаю дня рождения, тем самым нарушая сопротивление столкновениям в .[2]
Понимание проблемы
В качестве примера рассмотрим сценарий, в котором учитель с классом из 30 учеников (n = 30) спрашивает всех о дне рождения (для простоты игнорируйте високосные годы ), чтобы определить, есть ли у двух студентов одинаковый день рождения (соответствующий хэш-коллизия как описано далее). Интуитивно этот шанс может показаться небольшим. Если учитель выбрал определенный день (скажем, 16 сентября), то вероятность того, что хотя бы один ученик родился в этот конкретный день, равна , около 7,9%. Однако, как это ни парадоксально, вероятность того, что хотя бы у одного студента день рождения совпадает с любой другой студент в любой день составляет около 70% (для n = 30), по формуле .[3]
Математика
Учитывая функцию , цель атаки - найти два разных входа такой, что . Такая пара называется столкновение. Метод, используемый для обнаружения столкновения, заключается в простой оценке функции для различных входных значений, которые могут выбираться случайным образом или псевдослучайно, пока один и тот же результат не будет найден более одного раза. Из-за проблемы с днем рождения этот способ может быть достаточно эффективным. В частности, если функция дает любой из разные выходы с равной вероятностью и достаточно велико, то мы ожидаем получить пару различных аргументов и с после оценки функции примерно разные аргументы в среднем.
Рассмотрим следующий эксперимент. Из набора ЧАС ценности, которые мы выбираем п значения равномерно и произвольно, что позволяет повторять. Позволять п(п; ЧАС) - вероятность того, что во время этого эксперимента хотя бы одно значение будет выбрано более одного раза. Эта вероятность может быть аппроксимирована как
Позволять п(п; ЧАС) - наименьшее количество значений, которые мы должны выбрать, так чтобы вероятность обнаружения столкновения была не менееп. Обращая это выражение выше, мы находим следующее приближение
и присвоив вероятность столкновения 0,5, мы приходим к
Позволять Q(ЧАС) - ожидаемое количество значений, которые мы должны выбрать, прежде чем найти первую коллизию. Это число может быть приблизительно равно
Например, если используется 64-битный хеш, получается примерно 1,8 × 1019 разные выходы. Если все они равновероятны (лучший случай), то потребуется «всего» примерно 5 миллиардов попыток (5,38 × 109) для генерации столкновения с использованием грубой силы. Это значение называется день рождения[5] и для п-битовых кодов это может быть вычислено как 2п/2.[6] Другие примеры:
Биты Возможные выходы (H) Желаемая вероятность случайного столкновения
(2 н.ф.) (п)10−18 10−15 10−12 10−9 10−6 0.1% 1% 25% 50% 75% 16 216 (~ 6,5 х 104) <2 <2 <2 <2 <2 11 36 190 300 430 32 232 (~4.3 × 109) <2 <2 <2 3 93 2900 9300 50,000 77,000 110,000 64 264 (~1.8 × 1019) 6 190 6100 190,000 6,100,000 1.9 × 108 6.1 × 108 3.3 × 109 5.1 × 109 7.2 × 109 128 2128 (~3.4 × 1038) 2.6 × 1010 8.2 × 1011 2.6 × 1013 8.2 × 1014 2.6 × 1016 8.3 × 1017 2.6 × 1018 1.4 × 1019 2.2 × 1019 3.1 × 1019 256 2256 (~1.2 × 1077) 4.8 × 1029 1.5 × 1031 4.8 × 1032 1.5 × 1034 4.8 × 1035 1.5 × 1037 4.8 × 1037 2.6 × 1038 4.0 × 1038 5.7 × 1038 384 2384 (~3.9 × 10115) 8.9 × 1048 2.8 × 1050 8.9 × 1051 2.8 × 1053 8.9 × 1054 2.8 × 1056 8.9 × 1056 4.8 × 1057 7.4 × 1057 1.0 × 1058 512 2512 (~1.3 × 10154) 1.6 × 1068 5.2 × 1069 1.6 × 1071 5.2 × 1072 1.6 × 1074 5.2 × 1075 1.6 × 1076 8.8 × 1076 1.4 × 1077 1.9 × 1077
- В таблице указано количество хешей n(п) необходим для достижения заданной вероятности успеха при условии, что все хэши равновероятны. Для сравнения, 10−18 к 10−15 - коэффициент неисправимых битовых ошибок типичного жесткого диска.[7] Теоретически, MD5 хеши или UUID будучи 128 битами, он должен оставаться в этом диапазоне примерно до 820 миллиардов документов, даже если его возможные результаты намного больше.
Легко видеть, что если выходы функции распределены неравномерно, то коллизия может быть обнаружена еще быстрее. Понятие «баланс» хэш-функции количественно определяет устойчивость функции к атакам по случаю дня рождения (используя неравномерное распределение ключей). Однако для определения баланса хэш-функции обычно требуется вычислить все возможные входные данные, и поэтому это невозможно для популярных хэш-функции, такие как семейства MD и SHA.[8]Подвыражение в уравнении для не вычисляется точно для малых при прямом переводе на распространенные языки программирования как журнал (1 / (1-p))
из-за потеря значимости. Когда log1p
доступно (как в C99 ), например, эквивалентное выражение -log1p (-p)
следует использовать вместо этого.[9] Если этого не сделать, первый столбец приведенной выше таблицы считается равным нулю, а несколько элементов во втором столбце не имеют ни одной правильной значащей цифры.
Простое приближение
Хороший практическое правило который можно использовать для мысленный расчет это отношение
который также можно записать как
- .
или
- .
Это хорошо работает для вероятностей, меньших или равных 0,5.
Эта схема аппроксимации особенно удобна при работе с показателями степени. Например, предположим, что вы строите 32-битные хэши () и хотите, чтобы вероятность столкновения была не более одной из миллиона (), сколько документов у нас может быть самое большее?
что близко к правильному ответу 93.
Восприимчивость к цифровой подписи
Цифровые подписи может быть восприимчивым к атаке на день рождения. Сообщение обычно подписывается первым вычислением , где это криптографическая хеш-функция, а затем с помощью секретного ключа подписать . Предполагать Мэллори хочет обмануть Боба подписать мошеннический контракт. Мэллори готовит честный контракт и мошеннический . Затем она находит ряд позиций, в которых можно изменить без изменения значения, например, вставив запятые, пустые строки, один вместо двух пробелов после предложения, заменив синонимы и т. д. Объединив эти изменения, она может создать огромное количество вариаций все это справедливые контракты.
Подобным образом Мэллори также создает огромное количество вариантов мошеннического контракта. . Затем она применяет хэш-функцию ко всем этим вариантам, пока не найдет версию честного контракта и версию мошеннического контракта, которые имеют одинаковое хеш-значение, . Она представляет Бобу на подпись справедливую версию. После того, как Боб подписал, Мэллори берет подпись и прикрепляет ее к мошенническому контракту. Эта подпись затем «доказывает», что Боб подписал мошеннический контракт.
Вероятности немного отличаются от исходной задачи о дне рождения, поскольку Мэллори ничего не получает, находя два честных или два мошеннических контракта с одним и тем же хешем. Стратегия Мэллори заключается в создании пары из одного честного и одного мошеннического контракта. Уравнения задачи дня рождения применяются там, где количество пар. Фактически генерируемое Мэллори количество хешей равно .
Чтобы избежать этой атаки, выходная длина хэш-функции, используемой для схемы подписи, может быть выбрана достаточно большой, чтобы атака дня рождения стала вычислительно невыполнимой, то есть примерно вдвое больше бит, чем необходимо для предотвращения обычного атака грубой силой.
Помимо использования большей длины в битах, подписывающий (Боб) может защитить себя, внося в документ некоторые случайные, безобидные изменения перед его подписанием, а также сохраняя копию подписанного им контракта в своем собственном владении, чтобы он мог по крайней мере продемонстрировать в суде, что его подпись соответствует этому контракту, а не только фальшивому.
Алгоритм ро Полларда для логарифмов это пример алгоритма, использующего атаку дня рождения для вычисления дискретные логарифмы.
Смотрите также
Примечания
- ^ Дэниел Дж. Бернштейн. «Анализ затрат на хэш-коллизии: сделают ли квантовые компьютеры SHARCS устаревшими?» (PDF). Cr.yp.to. Получено 29 октября 2017.
- ^ Брассар, Жиль; Хёйер, Питер; Тэпп, Ален (20 апреля 1998 г.). LATIN'98: Теоретическая информатика. Конспект лекций по информатике. 1380. Шпрингер, Берлин, Гейдельберг. С. 163–169. arXiv:Quant-ph / 9705002. Дои:10.1007 / BFb0054319. ISBN 978-3-540-64275-6. S2CID 118940551.
- ^ «Математический форум: спросите доктора математики: вопросы и ответы: проблема дня рождения». Mathforum.org. Получено 29 октября 2017.
- ^ Гупта, Ганеш (2015). "Что такое атака по случаю дня рождения ??". Дои:10.13140/2.1.4915.7443. Цитировать журнал требует
| журнал =
(Помогите) - ^ Видеть верхняя и нижняя границы.
- ^ Жак Патарен, Одри Монтрей (2005). "Переосмысление схем Бенеша и бабочки" (PostScript, PDF ). Университет Версаля. Получено 2007-03-15. Цитировать журнал требует
| журнал =
(Помогите) - ^ Грей, Джим; ван Инген, Катарина (25 января 2007 г.). «Эмпирические измерения частоты отказов дисков и ошибок». arXiv:cs / 0701166.
- ^ "CiteSeerX". Архивировано из оригинал на 2008-02-23. Получено 2006-05-02.
- ^ «Точно вычислить журнал (1 + x) для малых значений x». Mathworks.com. Получено 29 октября 2017.
Рекомендации
- Михир Белларе, Тадаёши Коно: Баланс хеш-функции и его влияние на атаки на день рождения. ЕВРОКРИПТ 2004: стр. 401–418
- Прикладная криптография, 2-е изд. к Брюс Шнайер
внешняя ссылка
- «Что такое цифровая подпись и что такое аутентификация?» из RSA Безопасность крипто Вопросы-Ответы.
- "Атака на день рождения" X5 Networks Crypto: часто задаваемые вопросы