Атака по случаю дня рождения

редактировать
Тип криптографической атаки

A Атака по случаю дня рождения - это тип криптографической атаки, который использует математику, лежащую в основе проблемы дня рождения в теории вероятностей. Эта атака может использоваться для злоупотребления связью между двумя или более сторонами. Атака зависит от более высокой вероятности коллизий, обнаруженных между случайными попытками атаки и фиксированной степенью перестановок (пометок ). При атаке по случаю дня рождения можно найти конфликт хэш-функции в 2 n = 2 n / 2 {\ textstyle {\ sqrt {2 ^ {n}}} = 2 ^ {n / 2}}{\ textstyle {\ sqrt {2 ^ {n}}} = 2 ^ {n / 2}} , где 2 n {\ textstyle 2 ^ {n}}{\ textstyle 2 ^ {n}} является классической ценностью сопротивления прообразу. Существует общий (хотя и оспариваемый) результат, что квантовые компьютеры могут выполнять атаки в день рождения, тем самым нарушая сопротивление столкновениям в 2 n 3 = 2 n / 3 {\ textstyle {\ sqrt [{3}] {2 ^ {n }}} = 2 ^ {n / 3}}{\ textstyle {\ sqrt [{3}] {2 ^ {n} }} = 2 ^ {n / 3}} .

Содержание

  • 1 Понимание проблемы
  • 2 Математика
    • 2.1 Простое приближение
  • 3 Восприимчивость к цифровой подписи
  • 4 См. Также
  • 5 Примечания
  • 6 Ссылки
  • 7 Внешние ссылки

Понимание проблемы

В качестве примера рассмотрим сценарий, в котором учитель с классом из 30 студентов (n = 30) просит всех день рождения (для простоты игнорируйте високосные годы ), чтобы определить, совпадают ли дни рождения любых двух студентов (что соответствует хэш-конфликту, как описано далее). Интуитивно этот шанс может показаться небольшим. Если учитель выбрал определенный день (скажем, 16 сентября), то вероятность того, что хотя бы один ученик родился в этот конкретный день, составляет 1 - (364/365) 30 {\ displaystyle 1- (364/365) ^ {30}}1 - (364/365) ^ {30} , около 7,9%. Однако, как это ни парадоксально, вероятность того, что хотя бы один ученик имеет такой же день рождения, как и любой другой ученик, в любой день составляет около 70% (для n = 30), из формулы 1 - 365! (365 - н)! ⋅ 365 n {\ displaystyle 1 - {\ frac {365!} {(365-n)! \ Cdot 365 ^ {n}}}}{ \ displaystyle 1 - {\ frac {365!} {(365-n)! \ cdot 365 ^ {n}}}} .

Математика

Дана функция f { \ displaystyle f}f , цель атаки - найти два разных входа x 1, x 2 {\ displaystyle x_ {1}, x_ {2}}x_ {1}, x_ {2 } таких что f (x 1) = f (x 2) {\ displaystyle f (x_ {1}) = f (x_ {2})}е (x_ {1}) = f (x_ {2}) . Такая пара x 1, x 2 {\ displaystyle x_ {1}, x_ {2}}x_ {1}, x_ {2 } называется коллизией. Метод, используемый для поиска коллизии, заключается в простом вычислении функции f {\ displaystyle f}f для различных входных значений, которые могут выбираться случайным образом или псевдослучайно, пока один и тот же результат не будет найден более одного раза. Из-за проблемы с днем ​​рождения этот способ может быть достаточно эффективным. В частности, если функция f (x) {\ displaystyle f (x)}f (x) возвращает любое из H {\ displaystyle H}H разные выходные данные с равной вероятностью и H {\ displaystyle H}H достаточно велик, тогда мы ожидаем получить пару разных аргументов x 1 {\ displaystyle x_ {1}}x_ {1} и x 2 {\ displaystyle x_ {2}}x_ {2} с f (x 1) = f (x 2) {\ displaystyle f (x_ {1}) = f (x_ {2})}е (x_ {1}) = f (x_ {2}) после оценки функции в среднем для 1,25 H {\ displaystyle 1.25 {\ sqrt {H}}}1,25 \ sqrt {H} различных аргументов.

Мы рассматриваем следующий эксперимент. Из набора значений H мы выбираем n значений равномерно и случайным образом, что позволяет повторять их. Пусть p (n; H) - вероятность того, что во время этого эксперимента хотя бы одно значение будет выбрано более одного раза. Эта вероятность может быть приблизительно равна

p (n; H) ≈ 1 - e - n (n - 1) / (2 H) ≈ 1 - e - n 2 / (2 H) {\ displaystyle p (n; H) \ приблизительно 1-e ^ {- n (n-1) / (2H)} \ приблизительно 1-e ^ {- n ^ {2} / (2H)}}{\ displaystyle p (n; H) \ приблизительно 1-e ^ {- n (n-1) / (2H)} \ приблизительно 1- e ^ {- n ^ {2} / (2H)}}

Пусть n (p; H) - наименьшее количество значений, которые мы должны выбрать, чтобы вероятность обнаружения столкновения была не менее p. Обращая это выражение выше, мы находим следующее приближение

n (p; H) ≈ 2 H ln ⁡ 1 1 - p {\ displaystyle n (p; H) \ приблизительно {\ sqrt {2H \ ln {\ frac {1} {1-p}}}}}{\ displaystyle n (p; H) \ приблизительно {\ sqrt {2H \ ln {\ frac {1} {1-p}}}}}

и присвоив вероятность столкновения 0,5, мы приходим к

n (0,5; H) ≈ 1,1774 H {\ displaystyle n (0,5; H) \ приблизительно 1,1774 { \ sqrt {H}}}{\ displaystyle n (0,5; H) \ приблизительно 1,1774 {\ sqrt {H}}}

Пусть Q (H) будет ожидаемым количеством значений, которые мы должны выбрать перед обнаружением первого столкновения. Это число может быть приблизительно равно

Q (H) ≈ π 2 H {\ displaystyle Q (H) \ приблизительно {\ sqrt {{\ frac {\ pi} {2}} H}}}{\ displaystyle Q (H) \ приблизительно {\ sqrt {{\ frac {\ pi} {2 }} H}}}

В качестве Например, если используется 64-битный хэш, имеется примерно 1,8 × 10 различных выходных данных. Если все они равновероятны (лучший случай), то потребуется «всего» приблизительно 5 миллиардов попыток (5,38 × 10), чтобы сгенерировать столкновение с использованием грубой силы. Это значение называется граница дня рождения, и для n-битных кодов оно может быть вычислено как 2. Другие примеры:

БитыВозможные выходы (H)Желаемая вероятность случайного столкновения. (2 sf) (p)
10101010100,1%1%25%50%75%
162 (~ 6,5 x 10)<2<2<2<2<21136190300430
322 (~ 4,3 × 10)<2<2<23932900930050,00077,000110,000
642 (~ 1,8 × 10)61906100190,00061000001,9 × 106,1 × 103,3 × 105,1 × 107,2 × 10
1282 (~ 3,4 × 10)2,6 × 108,2 × 102,6 × 108,2 × 102,6 × 108,3 × 102,6 × 101,4 × 102,2 × 103,1 × 10
2562 (~ 1,2 × 10)4,8 × 101,5 × 104,8 × 101,5 × 104,8 × 101,5 × 104,8 × 102,6 × 104,0 × 105,7 × 10
3842 (~ 3,9 × 10)8,9 × 102,8 × 108,9 × 102,8 × 108,9 × 102,8 × 108,9 × 104,8 × 107,4 × 101,0 × 10
5122 (~ 1,3 × 10)1,6 × 105,2 × 101,6 × 105,2 × 101,6 × 105,2 × 101,6 × 108,8 × 101,4 × 101,9 × 10
В таблице показано количество хешей n (p), необходимое для достижения заданной вероятности успеха, при условии, что все хеши одинаково вероятны. Для сравнения, от 10 до 10 - это уровень неисправимых битовых ошибок типичного жесткого диска. Теоретически хэши MD5 или UUID, состоящие из 128 бит, должны оставаться в этом диапазоне примерно до 820 миллиардов документов, даже если его возможных выходных данных намного больше.

Это просто чтобы увидеть, что если выходные данные функции распределены неравномерно, то коллизия может быть обнаружена еще быстрее. Понятие «баланс» хэш-функции количественно определяет устойчивость функции к атакам по случаю дня рождения (используя неравномерное распределение ключей). Однако для определения баланса хэш-функции обычно требуется вычислить все возможные входные данные, и поэтому это невозможно для популярных хэш-функции, такие как семейства MD и SHA. Подвыражение ln ⁡ 1 1 - p {\ displaystyle \ ln {\ frac {1} {1-p}}}\ ln \ frac {1} {1-p} в уравнении для n (p; H) {\ displaystyle n (p; H)}n (p; H) не вычисляется точно для малых p {\ displaystyle p}p при прямом переводе на общие языки программирования как log (1 / (1-p))из-за потери значимости. Например, когда log1pдоступен (как в C99 ), вместо него следует использовать эквивалентное выражение -log1p (-p). Если этого не сделать, первый столбец приведенной выше таблицы считается равным нулю, а несколько элементов во втором столбце не имеют ни одной правильной значащей цифры.

Простое приближение

Хорошее эмпирическое правило, которое можно использовать для мысленных вычислений, - это соотношение

p (n) ≈ n 2 2 H {\ displaystyle p (n) \ приблизительно {n ^ {2} \ over 2H}}{\ displaystyle p (n) \ приблизительно {n ^ {2} \ over 2H}}

, которое также можно записать как

H ≈ n 2 2 p (n) {\ displaystyle H \ приблизительно {n ^ {2} \ over 2p (n)}}{\ displaystyle H \ приблизительно {n ^ {2} \ over 2p (n)}} .

или

n ≈ 2 H × p (n) {\ displaystyle n \ приблизительно {\ sqrt {2H \ times p (n)}}}{\ displaystyle n \ приблизительно {\ sqrt { 2H \ times p (n)}}} .

Это хорошо работает для вероятностей, меньших или равных 0,5.

Эта схема аппроксимации особенно удобна при работе с показателями степени. Например, предположим, что вы строите 32-битные хэши (H = 2 32 {\ displaystyle H = 2 ^ {32}}{\ displaystyle H = 2 ^ {32}} ) и хотите, чтобы вероятность столкновения была не более одной миллион (p ≈ 2-20 {\ displaystyle p \ приблизительно 2 ^ {- 20}}p \ приблизительно 2 ^ {- 20} ), сколько документов у нас может быть самое большее?

n ≈ 2 × 2 32 × 2-20 = 2 1 + 32-20 = 2 13 = 2 6,5 ≈ 90,5 {\ displaystyle n \ приблизительно {\ sqrt {2 \ times 2 ^ {32} \ times 2 ^ {-20}}} = {\ sqrt {2 ^ {1 + 32-20}}} = {\ sqrt {2 ^ {13}}} = 2 ^ {6.5} \ приблизительно 90,5}n \ приблизительно \ sqrt {2 \ times 2 ^ {32} \ times 2 ^ {-20}} = \ sqrt {2 ^ {1 + 32-20}} = \ sqrt {2 ^ {13}} = 2 ^ {6.5} \ приблизительно 90,5

, что близко к правильному ответу 93.

Восприимчивость к цифровой подписи

Цифровые подписи могут быть уязвимы для атаки дня рождения. Сообщение m {\ displaystyle m}m обычно подписывается первым вычислением f (m) {\ displaystyle f (m)}f (m) , где f {\ displaystyle f}f - это криптографическая хеш-функция, а затем использование секретного ключа для подписи f (m) {\ displaystyle f (m)}f (m) . Предположим, Мэллори хочет обманом заставить Боба подписать мошеннический контракт. Мэллори готовит честный контракт m {\ displaystyle m}m и мошеннический m ′ {\ displaystyle m '}m'. Затем она находит несколько позиций, в которых m {\ displaystyle m}m может быть изменено без изменения значения, например, вставка запятых, пустых строк, одного или двух пробелов после предложения, замены синонимов, и т. д. Объединив эти изменения, она может создать огромное количество вариаций для m {\ displaystyle m}m , которые все являются честными контрактами.

Подобным образом Мэллори также создает огромное количество вариантов мошеннического контракта m ′ {\ displaystyle m '}m'. Затем она применяет хеш-функцию ко всем этим вариантам, пока не найдет версию честного контракта и версию мошеннического контракта, которые имеют одинаковое хеш-значение, f (m) = f (m ') {\ displaystyle f (m) = f (m ')}f(m) = f(m'). Она представляет Бобу на подпись справедливую версию. После того, как Боб подписал, Мэллори берет подпись и прикрепляет ее к мошенническому контракту. Эта подпись затем «доказывает», что Боб подписал мошеннический контракт.

Вероятности немного отличаются от исходной задачи о дне рождения, поскольку Мэллори ничего не получает, обнаруживая два честных или два мошеннических контракта с одинаковым хешем. Стратегия Мэллори заключается в создании пары из одного честного и одного мошеннического контракта. Применяются уравнения задачи дня рождения, где n {\ displaystyle n}n - количество пар. Фактически генерируемое Мэллори количество хешей составляет 2 n {\ displaystyle 2n}2n .

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

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

Ро-алгоритм Полларда для логарифмов является примером алгоритма, использующего атаку по случаю дня рождения для вычисления дискретных логарифмов.

См. Также

Примечания

Ссылки

  • Михир Белларе, Тадаёши Коно: Баланс хеш-функции и его влияние на атаки в день рождения. EUROCRYPT 2004: pp401–418
  • Прикладная криптография, 2-е изд. автор Брюс Шнайер

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

Последняя правка сделана 2021-05-12 07:26:34
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте