RIPEMD-160 | |
---|---|
Создан | 1996 |
Опубликован | 18 апреля 1996 |
Размер хеша | 160 бит |
Число раундов | 5 |
Тип | хеш-функция |
RIPEMD-160 (от англ. RACE Integrity Primitives Evaluation Message Digest) — криптографическая хеш-функция, разработанная в Католическом университете Лувена Хансом Доббертином (Hans Dobbertin), Антоном Босселарсом (Antoon Bosselaers) и Бартом Пренелом (Бартом Пренелем). Для произвольного входного сообщения функция генерирует 160-разрядное хеш-значение, называемое дайджестом сообщения. RIPEMD-160 является улучшенной версией RIPEMD, которая, в свою очередь, использовала принципы MD4 и по производительности сравнима с более популярной SHA-1.
Также существуют 128-, 256- и 320-битные версии этого алгоритма, которые, соответственно, называются RIPEMD-128, RIPEMD-256 и RIPEMD-320. 128-битная версия представляет собой лишь замену оригинальной RIPEMD, которая также была 128-битной и в которой были найдены уязвимости [1]. 256- и 320-битные версии отличаются удвоенной длиной дайджеста, что уменьшает вероятность коллизий, но при этом функции не являются более криптостойкими.
RIPEMD-160 была разработана в открытом академическом сообществе, в отличие от SHA-1 и SHA-2, которые были созданы NSA. С другой стороны, RIPEMD-160 на практике используется несколько реже, чем SHA-1.
Использование RIPEMD-160 не ограничено какими-либо патентами.
Сообщение расширяется так, чтобы его длина в битах по модулю 512 равнялась 448. Таким образом, в результате расширения, сообщению недостает 64 бита до длины, кратной 512 битам. Расширение производится всегда, даже если сообщение изначально имеет нужную длину.
Расширение производится следующим образом: один бит, равный 1, добавляется к сообщению, а затем добавляются биты, равные 0, до тех пор, пока длина сообщения не станет равной 448 по модулю 512. В итоге, к сообщению добавляется, как минимум, 1 бит, и, как максимум, 512.
64-битное представление (длины сообщения перед добавлением набивочных битов) добавляется к результату предыдущего шага. В маловероятном случае, когда больше, чем , используются только 64 младших бита. Эти биты добавляются в виде двух 32-битных слов, и первым добавляется слово, содержащее младшие разряды.
На этом этапе (после добавления битов и длины сообщения) мы получаем сообщение длиной кратной 512 битам. Это эквивалентно тому, что это сообщение имеет длину, кратную 16-ти 32-битным словам. Каждое 32-битное слово содержит четыре 8-битных, но следуют они не подряд, а наоборот (например, из восьми 8-битных слов (a b c d e f g h) мы получаем два 32-битных слова (dcba hgfe)).
I. Нелинейные побитовые функции:
II. Добавляемые шестнадцатеричные константы:
III. Выбор 32-битных слов из сообщения
VI. Набор для битового поворота влево (операция rol)
V. Исходные значения слов дайджеста
После задания всех исходных функций, констант и начальных значений слов хеш-суммы можно переходить к выполнению алгоритма. Выполнение алгоритма происходит по двум параллельным путям. Обработка сообщения происходит блоками по 16 слов в 32 бита.
Под сложением «+» подразумевается сложение по модулю 232, rols обозначает циклический сдвиг влево на s позиций.
for i := 0 to (t - 1) { A := h0; B := h1; C := h2; D := h3; E := h4; A' := h0; B' := h1; C' := h2; D' := h3; E' := h4; for j := 0 to 79 { T := rols(j) (A + f(j; B; C; D) + Xi[r(j)] + K(j)) + E; A := E; E := D; D := rol10(C); C := B; B := T; T := rols'(j) (A' + f(79 — j; B'; C'; D') + Xi[r'(j)] + K'(j)) + E'; A' := E'; E' := D'; D' := rol10(C'); C' := B'; B' := T; } T := h1 + C + D'; h1 := h2 + D + E'; h2 := h3 + E + A'; h3 := h4 + A + B'; h4 := h0 + B + C'; h0 := T; }
Входная строка состоит из ASCII-символов. Выходная строка представляет собой шестнадцатеричную запись.
RIPEMD-160("The quick brown fox jumps over the lazy dog") = 37f332f68db77bd9d7edd4969571ad671cf9dd3b
Даже маленькое изменение сообщения вызывает значительное изменение дайджеста. Например, мы заменим в вышеприведённом примере d на c:
RIPEMD-160("The quick brown fox jumps over the lazy cog") = 132072df690933835eb8b6ad0b77e7b6f14acad7
Хеш-сумма нулевой строки выглядит так:
RIPEMD-160("") = 9c1185a5c5e9fc54612808977ee8f548b2258d31
В таблице для сравнения приведены скорости выполнения MD4-подобных функций. Предполагается, что код выполнения и данных находятся в кэше исполняющего устройства.
Алгоритм | Циклов | Мбит/сек | Относительная производительность |
---|---|---|---|
MD4 | 241 | 191.2 | 1.00 |
MD5 | 337 | 136.7 | 0.72 |
RIPEMD | 480 | 96.0 | 0.50 |
RIPEMD-128 | 592 | 77.8 | 0.41 |
SHA-1 | 837 | 55.1 | 0.29 |
RIPEMD-160 | 1013 | 45.5 | 0.24 |
Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".
Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.
Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .