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


5.3 Вопросы эффективности

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

В разделе 5.5 приведена конструкция семейства односторонних хэш-функций, предложенная Импальяццо и Наором. Эта конструкция основана на модулярной задаче о рюкзаке и весьма эффективна, поскольку хэширование очередного блока сообщения состоит в выполнении лишь операции сложения целых чисел по модулю, являющемуся степенью двойки. В работе [IR] приводится набросок доказательства стойкости этого семейства хэш-функций. Однако, у этой конструкции имеется серьезный недостаток -- большая длина констант. Кроме того, здесь речь идет о семействе функции, а для практики лучше пожертвовать доказуемой стойкостью, но получить схему (например, электронной подписи), не зависящую от "истории".

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

  • любой из известных алгоритмов построения коллизий не должен быть эффективнее метода "грубой силы" (т. е. метода, основанного на "парадоксе дня рождения");

  • алгоритм должен допускать эффективную программную реализацию на 32-разрядном процессоре;

  • алгоритм не должен использовать сложных структур данных и подпрограмм;

  • алгоритм должен быть оптимизирован с точки зрения его реализации на микропроцессорах типа Intel.

Как показывает анализ известных хэш-функций, практически все эффективные хэш-алгоритмы представляют собой последовательное применение к хэш-коду предыдущего шага и очередному блоку хэшируемого текста некоторой фиксированной функции (элементарной хэш-функции или функции сжатия). Хэш-кодом всего сообщения является хэш-код, получаемый после последнего шага: $ H_i=h(H_{i-1},M_i$). Для того, чтобы хэш-функция была эффективной и надежной, очевидно, и элементарная хэш-функция в целом должна удовлетворять вышеперечисленным свойствам (хотя она и не может обеспечить такой же стойкости).

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

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

При данном подходе прежде всего необходимо формализовать свойство, что документы незначительно отличаются. В работе [BGG1] авторы определяют близость двух сообщений (текстов, документов) как минимально необходимое количество элементарных преобразований, позволяющих перейти от одного сообщения к другому. Под элементарным понимается одно из следующих преобразований: удаление произвольного блока из сообщения; добавление произвольного блока в сообщение; замена произвольного блока сообщения на произвольный другой блок; перестановка двух блоков в сообщении.

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

Авторы статьи [BGG1] демонстрируют принципиальную осуществимость этой идеи на следующем примере. В качестве основного алгоритма хэширования рассматривается следующий. Хэшируемое сообщение представляется в виде последовательности блоков: $ M=M_1M_2\ldots M_n$, которые интерпретируются как целые числа. Фиксируется простое число $ p$ и некоторый набор первообразных элементов $ a_1,\ldots,a_n$ конечного поля $ GF(p)$. Хэш-кодом сообщения $ M$ является $ \prod\limits_{i=1}^na_i^{M_i}$. Нетрудно показать, что если рассматривать набор $ (a_1,\ldots,a_n)$ как описание отдельной хэш-функции, то соответствующее семейство является в предположении трудности задачи дискретного логарифмирования семейством хэш-функций с трудно обнаружимыми коллизиями (см. раздел 5.5).

Непосредственное хэширование требует $ n$ возведений в степень и $ n-1$ умножение в конечном поле $ GF(p)$. Тогда, как легко понять, для того, чтобы получить хэш-код сообщения с удаленным блоком $ M_t$, достаточно прежний хэш-код домножить на $ a_t^{-M_t}$, т. е. требуется всего одно возведение и одно умножение.

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


Вперед Вверх Назад Содержание Предметный указатель
Вперед: 5.4 Методы криптоанализа хэш-функций Вверх: 5. Хэш-функции Назад: 5.2.8 MDC   Содержание   Предметный указатель


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

TopList Rambler's Top100