Интернет магазин китайских планшетных компьютеров



Компьютеры - Структура МерклаДамгарда - Пример дополнения сообщения

23 января 2011


Оглавление:
1. Структура МерклаДамгарда
2. Алгоритмы, реализующие структуру Меркла-Дамгарда
3. Пример дополнения сообщения
4. Wide pipe construction



Для того, чтобы передать сообщение в функцию сжатия, необходимо дополнить последний блок до полного определёнными данными.

   Например, предположим, сообщение - «HashInput» и размер блока для функции сжатия - 8 байт. В таком случае, получится 2 блока:
   HashInpu t0000000

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

   В нашем примере, например, сообщение «HashInput00» , будет разделено на такие же блоки, что и первоначальное сообщение «HashInput».

Чтобы этого избежать, первый бит добавляемых данных, должен быть изменен. Так как заполнитель обычно состоит из нулей, первый бит заполнителя должен быть заменён на «1».

   В нашем примере, мы получим следующее:
   HashInpu t1000000

Чтобы усилить хеш, можно добавить длину сообщения в дополнительном блоке

   В нашем примере мы получим три блока:
   HashInpu t1000000 00000009

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

   Например, возьмем в нашем примере, что длина сообщения кодируется в 5 байт. Это означает, что к последний блок содержит «00009».

То есть получаем 2 блока:

  HashInpu t1000009


Просмотров: 3394


<<< ГОСТ Р 34.11-94
CEILIDH >>>