Все о геологии :: на главную страницу! Геовикипедия 
wiki.web.ru 
Поиск  
  Rambler's Top100 Service
 Главная страница  Конференции: Календарь / Материалы  Каталог ссылок    Словарь       Форумы        В помощь студенту     Последние поступления
   Геология | Курсы лекций
 Обсудить в форуме  Добавить новое сообщение
Вперед Вверх Назад Содержание Предметный указатель
Вперед: 5.5 Теоретические аспекты Вверх: 5. Хэш-функции Назад: 5.3 Вопросы эффективности   Содержание   Предметный указатель


5.4 Методы криптоанализа хэш-функций

Ввиду большого разнообразия способов построения хэш-функций, универсальных методов поиска коллизий не существует. Для тех хэш-функций, которые мы в разделе 5.2 условно отнесли ко второй группе, единственная возможность нахождения эффективных алгоритмов поиска коллизий состоит в анализе соответствующих математических задач. Так, используя некоторые свойства задачи РЮКЗАК, Камион и Патарэн [CP] разработали алгоритм, который для хэш-функции Дамгорда [D] находит $ x$ такое, что $ h(x)=b$ для произвольного, но фиксированного значения $ b$, за приблизительно $ 2^{32}$ операций и используя 128 Гбайтов памяти. Патарэн [Pat] модифицировал этот алгоритм для поиска коллизий. Модифицированный алгоритм требует порядка $ 2^{24}$ операций и порядка 512 Мбайтов памяти. Эти работы интересно сравнить с приведенным в разделе 5.5 результатом Импальяццо и Наора о доказуемой стойкости семейства хэш-функций, основанного на модульной задаче РЮКЗАК (теорема 4).

Для хэш-функций, у которых длина хэш-значения невелика, универсальным методом поиска коллизий является метод, основанный на так называемом "парадоксе дня рождения" (birthday paradox). Этот метод хорошо известен в криптографии и был описан еще в 1979 г. Ювалом [Yuv]. Пусть длина хэш-значения равна $ n$ битам. Атака состоит в генерации двух псевдослучайных наборов сообщений по $ 2^{n/2}$ сообщений каждое. Тогда, согласно парадоксу дня рождения, вероятность того, что в этих наборах найдется пара сообщений, имеющих одинаковые хэш-значения, больше $ 1/2$. Метод требует большого объема памяти для хранения генерируемых наборов, а также эффективных методов сортировки.

По существу, на той же идее основаны и алгоритмы поиска коллизий для функций шифрования блочных шифраторов. Пусть $ f(m,k)$ -- такая функция, где $ m$ -- блок сообщения, а $ k$ -- ключ. Коллизией для $ f$ называется тройка $ m,
k_{0}, k_{1}$ такая, что $ f(m,k_{0})=f(m,k_{1})$. Если зафиксировать некоторое значение $ m$, то $ f$ можно рассматривать как функцию от одного аргумента. Далее случайно выбирается некоторое начальное значение ключа $ x$ и вычисляется последовательность $ f^{0}(x)=x$, $ f^{1}(x)=f(x)$, $ f^{2}(x)=f(f(x))$$ \ldots$. Как только будут найдены константы $ l$ и $ c$ такие, что $ f^{l+c}(x)=f^{l}(x)$, но $ f^{l+c-1}(x)\ne f^{l-1}(x)$, алгоритм завершает работу, поскольку $ f^{l+c-1}(x)$ и $ f^{l-1}(x)$ образуют искомую коллизию. Для шифраторов типа DES, где длина ключа меньше длины блока, на каждом шаге необходимо применить некоторую "проецирующую" функцию (выбор которой может существенно повлиять на эффективность поиска). Проблемой, опять-таки, является большой объем памяти, требуемой для хранения промежуточных значений. Кискате и Делесэй [QD1], [QD2] предлагают запоминать лишь некоторые "выделенные" значения (на практике, они хранили те значения, в которых фиксированные 20 битов равны 0). Это приводит к некоторому замедлению работы алгоритма, поскольку при обнаружении совпадающих выделенных значений необходимо вернуться к предыдущим таким значениям и повторить часть вычислений, запоминая уже все промежуточные результаты. Однако значительная экономия памяти делает этот метод применимым на практике. Так, в работах Кискате и Делесэя [QD1], [QD2] сообщается о результатах вычислительного эксперимента по поиску коллизий для DES. Было обнаружено 26 коллизий для одного и того же сообщения. Это позволяет строить коллизии, например, для хэш-функции Дэвиса -- Мейера, описанной в разделе 5.2. В самом деле, пусть $ m_{1}$ и $ m_{1}'$ -- два блока таких, что $ \qopname\relax o{DES}_{m_{1}}(I)=\qopname\relax o{DES}_{m_{1}'}(I)$. Тогда сообщения $ m_{1},m_{2},\ldots,m_{r}$ и $ m_{1}',m_{2},
\ldots,m_{r}$ имеют одинаковые хэш-значения при любых $ m_{2},\ldots,m_{r}$.

Аналогичным методом в работе [QD2] была найдена коллизия $ m_{1}$ и $ m_{1}'$ для фиксированных значений $ h_{0}$ и $ h_{1}$ следующего вида:

$\displaystyle \qopname\relax o{DES}_{m_{1}'}(\qopname\relax o{DES}_{m_{1}}(h_{0}))=h_{1}.
$

Ее также можно использовать для построения коллизий для той же хэш-функции. Пусть $ h_{0}=I$ и $ h_{1}=\qopname\relax o{DES}_{m_{0}}(I)$. Тогда сообщения $ m_{0},m_{2},\ldots,m_{r}$ и $ m_{1},m_{1}',m_{2}, \ldots,m_{r}$ имеют одинаковые хэш-значения при любых $ m_{2},\ldots,m_{r}$.

Как уже отмечалось выше, при построении хэш-функций "с нуля" применяются те же методы и конструкции, что и при разработке блочных шифраторов. Поэтому к ним применимы и все методы криптоанализа шифраторов. Например, Бихам и Шамир в своей известной работе [BS], посвященной дифференциальному криптоанализу, описывают в числе прочих и успешную атаку с помощью этого метода на хэш-функцию Snefru [Me].

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

В работе Миягучи, Охты и Иваты [MOI] излагаются атаки на некоторые хэш-функции, построенные с помощью блочных шифраторов. Часть этих атак осуществима только при некоторых дополнительных условиях, например, в предположении, что противник может изменять начальные значения.


Вперед Вверх Назад Содержание Предметный указатель
Вперед: 5.5 Теоретические аспекты Вверх: 5. Хэш-функции Назад: 5.3 Вопросы эффективности   Содержание   Предметный указатель


Проект осуществляется при поддержке:
Геологического факультета МГУ,
РФФИ
   

TopList Rambler's Top100