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



Компьютеры - RIPEMD-160 - Реализация RIPEMD-160

27 июня 2011


Оглавление:
1. RIPEMD-160
2. Реализация RIPEMD-160
3. RIPEMD-160 на псевдокоде
4. Производительность



Шаг 1. Добавление недостающих битов.

Сообщение расширяется так, чтобы его длина в битах по модулю 512 равнялась 448. Таким образом, в результате расширения, сообщению недостает 64 бита до длины, кратной 512 битам. Расширение производится всегда, даже если сообщение изначально имеет нужную длину.

Расширение производится следующим образом: один бит, равный 1, добавляется к сообщению, а затем добавляются биты, равные 0, до тех пор, пока длина сообщения не станет равной 448 по модулю 512. В итоге, к сообщению добавляется, как минимум, 1 бит, и, как максимум, 512.

Шаг 2. Добавление длины сообщения.

64-битное представление ~b~ добавляется к результату предыдущего шага. В маловероятном случае, когда ~b~ больше, чем 2, используются только 64 младших бита. Эти биты добавляются в виде двух 32-битных слов, и первым добавляется слово, содержащее младшие разряды.

На этом этапе мы получаем сообщение длиной кратной 512 битам. Это эквивалентно тому, что это сообщение имеет длину, кратную 16-ти 32-битным словам. Каждое 32-битное слово содержит четыре 8-битных, но следуют они не подряд, а наоборот мы получаем два 32-битных слова).

Шаг 3. Определение действующих функций и констант

I. Нелинейные побитовые функции:

Выполнение алгоритма хеширования
  • f = x \otimes y \otimes z       ~~~~~~~~~~~~~
  • f = \lor~~~
  • f = \otimes z  ~~~~~~~~~~
  • f = \lor~~~~
  • f = x \otimes~~~~~~~~~

II. Добавляемые шестнадцатеричные константы:

  • K = 00000000x  ~~~~~
  • K = 5A827999x   ~~~~
  • K = 6ED9EBA1x   ~~~~
  • K = 8F1BBCDCx  ~~~~~
  • K = A953FD4Ex   ~~~~
  • K' = 50A28BE6x  ~~~~
  • K' = 5C4DD124x   ~~~
  • K' = 6D703EF3x   ~~~~
  • K' = 7A6D76E9x   ~~~~
  • K' = 00000000x   ~~~~

III. Выбор 32-битных слов из сообщения

  • r = j при
  • r = 7; 4; 13; 1; 10; 6; 15; 3; 12; 0; 9; 5; 2; 14; 11; 8
  • r = 3; 10; 14; 4; 9; 15; 8; 1; 2; 7; 0; 6; 13; 11; 5; 12
  • r = 1; 9; 11; 10; 0; 8; 12; 4; 13; 3; 7; 15; 14; 5; 6; 2
  • r = 4; 0; 5; 9; 7; 12; 2; 10; 14; 1; 3; 8; 11; 6; 15; 13
  • r' = 5; 14; 7; 0; 9; 2; 11; 4; 13; 6; 15; 8; 1; 10; 3; 12
  • r' = 6; 11; 3; 7; 0; 13; 5; 10; 14; 15; 8; 12; 4; 9; 1; 2
  • r' = 15; 5; 1; 3; 7; 14; 6; 9; 11; 8; 12; 2; 10; 0; 4; 13
  • r' = 8; 6; 4; 1; 3; 11; 15; 0; 5; 12; 2; 13; 9; 7; 10; 14
  • r' = 12; 15; 10; 4; 1; 5; 8; 7; 6; 2; 13; 14; 0; 3; 9; 11

VI. Набор для битового поворота влево

  • s = 11; 14; 15; 12; 5; 8; 7; 9; 11; 13; 14; 15; 6; 7; 9; 8
  • s = 7; 6; 8; 13; 11; 9; 7; 15; 7; 12; 15; 9; 11; 7; 13; 12
  • s = 11; 13; 6; 7; 14; 9; 13; 15; 14; 8; 13; 6; 5; 12; 7; 5
  • s = 11; 12; 14; 15; 14; 15; 9; 8; 9; 14; 5; 6; 8; 6; 5; 12
  • s = 9; 15; 5; 11; 6; 8; 13; 12; 5; 12; 13; 14; 11; 8; 5; 6
  • s' = 8; 9; 9; 11; 13; 15; 15; 5; 7; 7; 8; 11; 14; 14; 12; 6
  • s' = 9; 13; 15; 7; 12; 8; 9; 11; 7; 7; 12; 7; 6; 15; 13; 11
  • s' = 9; 7; 15; 11; 8; 6; 6; 14; 12; 13; 5; 14; 13; 13; 7; 5
  • s' = 15; 5; 8; 11; 14; 14; 6; 14; 6; 9; 12; 9; 12; 5; 15; 8
  • s' = 8; 5; 12; 9; 12; 5; 14; 6; 8; 13; 6; 5; 15; 13; 11; 11

V. Исходные значения слов дайджеста

  • h0 = 67452301x;
  • h1 = EFCDAB89x;
  • h2 = 98BADCFEx;
  • h3 = 10325476x;
  • h4 = C3D2E1F0x;

Шаг 4. Выполнение алгоритма хеширования

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



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


<<< RIPEMD-256