Описание процедур

1. Процедура save_abc сохраняет значения в Hi

aa = a;

bb = b;

cc = c.

2. Процедура pass(a, b, c, mul) выполняет следующие действия:

round (a, b, c, x0, mul);

round (b, c, a, x1, mul);

round (c, a, b, x2, mul);

round (a, b, c, x3, mul);

round (b, c, a, x4, mul);

round (c, a, b, x5, mul);

round (a, b, c, x6, mul);

round (b, c, a, x7, mul).

3. Процедура round (a, b, c, x, mul) выполняет следующие действия:

c ^= x;

a -= t1[c_0] ^ t2[c_2] ^ t3[c_4] ^ t4[c_6];

b += t4[c_1] ^ t3[c_3] ^ t2[c_5] ^ t1[c_7];

b *= mul;

где c_i – это i -ый байт регистра c (0≤ i ≤7), b_i – это i -ый байт регистра b, где a_i – это i -ый байт регистра a.

x0,x1,x2,…,x7 – 64-хбитные блоки.

В алгоритме необходимо инициализировать блоки S (t1, t2, t3, t4)

Каждый из четырех 64-битовых S-блоков содержит 256 элементов:

S1,0, S1,1, …, S1,255

S2,0, S2,1, …, S2,255

S3,0, S3,1, …, S3,255

S4,0, S4,1, …, S4,255

Блоки инициализируются. Эта строка состоит из шестнадцатеричных цифр pi (меньше начальной тройки).

Например:

S1,0 = 0x243f6a8808d31319

S1,1 = 0x85a308d3243f6ad3

S1,2 = 0x123198a2e5a308d3

и т. д.

4. Процедура key_schedule выполняет следующие действия:

x0 -= x7 ^ 0xA5A5A5A5A5A5A5A5;

x1 ^= x0;

x2 += x1;

x3 -= x2 ^ ((~x1)<<19);

x4 ^= x3;

x5 += x4;

x6 -= x5 ^ ((~x4)>>23);

x7 ^= x6;

x0 += x7;

x1 -= x0 ^ ((~x7)<<19);

x2 ^= x1;

x3 += x2;

x4 -= x3 ^ ((~x2)>>23);

x5 ^= x4;

x6 += x5;

x7 -= x6 ^ 0x0123456789ABCDEF;

5. Процедура feedforward выполняет следующие действия:

a ^= aa;

b -= bb;

c += cc;

Рис. Таблица хеширования

Таблица хеширования описывает функцию Tiger. Переменные y0, y1,..., y7 и z0, z1,..., z7 определяют значения x0, x1,..., x7 на втором и третьем этапах, соответственно. В итоге, значения регистров состояния Hn является выходным значением Tiger/192.

RipeMD

RIPEMD один из алгоритмов криптографического хэширования.

Имеет длину результирующего дайджеста 128 или 160 бит. Разработан Hans Dobbertin, Antoon Bosselaers и Bart Preneel (http://homes.esat.kuleuven.be/~bosselae/ripemd160.html).

Из-за проблем, связанных с MD4 и MD5, европейская организация RACE Integrity Primitives Evaluation (RIPE) разработала стандарт RIPEMD-160. Он также был разработан на основе MD4, но генерирует дайджест длиной 160 бит. Однако так же как и SHA-1, этот алгоритм значительно менее эффективен, чем MD5.

Пример: В обоих примерах хэш-функций, закодирван символ "a".

RIPEMD-128 86be7afa339d0fc7cfc785e72f578d33
RIPEMD-160 0bdc9d2d256b3ee9daae347be6f4dc835a467ffe

Haval

HAVAL — это однонаправленная хэш-функция переменной длины. Функция HAVAL (Y. Zheng, J. Pieprzyk, J. Seberry) является модификацией функции MD5. Алгоритм HAVAL обрабатывает сообщение блоками размером в 1024 разряда, что в два раза больше, чем в алгоритме MD5. В HAVAL используется восемь 32-разрядных переменных сцепления, то есть в два раза больше, чем в MD5, и переменное число раундов обработки, от трех до пяти (на каждом раунде исполняется 16 шагов). Функция HAVAL может выдавать хэш-значения размером в 128, 160, 192, 224 или 256 разрядов (Haval128, Haval160, Haval192, Haval224, Haval256).

В алгоритме HAVAL простые нелинейные функции MD5 заменены сильно нелинейными функциями 7 переменных, каждая из которых удовлетворяет строгому лавинному критерию. На всех раундах применяется одна функция, но на каждом шаге к входным данным применяются различные операции перестановки. Используется новый порядок обработки сообщения, и на каждом шаге (за исключением первого раунда) используется своя прибавляемая константа. Также в алгоритме используются два циклических сдвига. Сердцевиной алгоритма являются такие операции:

TEMP = (f(j,A,B,C,D,E,F,G) < < 7) + (H < < < 11) + M[i][r(j)] + K(j)

H = G;G = F;F = E;E = D;D = C;C = B;B = A;A = TEMP

Переменное количество раундов и переменный размер вычисляемого алгоритмом значения означают, что существует 15 версий алгоритма. Атака на алгоритм MD5, выполненная ден Боером и Босселаерсом (англ.), не применима к алгоритму HAVAL, из-за наличия в нем операции циклического сдвига.

http://www.nic.funet.fi/pub/crypt/hash/haval/haval-hash.c

CRC

Алгоритм вычисления контрольной суммы (CRC, англ. cyclic redundancy check, проверка избыточности циклической суммы) — способ цифровой идентификации некоторой последовательности данных, который заключается в вычислении контрольного значения её циклического избыточного кода. Популярность КС обусловлена тем, что подобная проверка просто реализуема в двоичном цифровом оборудовании, легко анализируется, и хорошо подходит для обнаружения общих ошибок, вызванных наличием шума в каналах передачи данных.

Принцип КС основан на использовании свойств двоичного многочлена, в виде которого представляется исходная битовая последовательность блока данных. При этом каждый бит такой последовательности соответствует одному из полиномиальных коэффициентов. Так, к примеру, десятичное число 90 (1011010 в двоичной записи) соответствует многочлену следующего вида:

P(x) = 1 * x6 + 0 * x5 + 1 * x4 + 1 * x3 + 0 * x2 + 1 * x1 + 0 * x0

Подобным же образом в виде многочлена может быть представлен любой из блоков обрабатываемых данных.

При вычислении контрольного кода по методу КС используется свойство поведения многочленов, позволяющее выполнять с ними любые арифметические действия. Контрольный код рассчитывается, как остаток от деления по модулю 2 многочлена полученного из исходной битовой последовательности на некоторый другой заранее определённый многочлен (такой многочлен называется порождающим или примитивным).

R(x) = P(x) * xrmodG(x)

где

R(x) — контрольный код многочлена P(x).

P(x) — исходный многочлен.

G(x) — порождающий многочлен.

r — степень порождающего многочлена.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: