Курсовая работа: Хеш-функция UMAC
bit(S,t-1) + bit(S,t).
uint2str(n,i): и-тый байт строки, например str2uint(S) = n.
3.1.4 Математические операции в строках
Одно из первичных действий в UMAC – повторение применения операций сложения и умножения в строках. Действия "+_32", "+_64", и "*_64" определены:
"S +_32 T" as uint2str(str2uint(S) + str2uint(T) mod 2^32, 4),
"S +_64 T" as uint2str(str2uint(S) + str2uint(T) mod 2^64, 8), and
"S *_64 T" as uint2str(str2uint(S) * str2uint(T) mod 2^64, 8).
Эти операции отлично выполняются на современных компьютерах.
3.2 Алгоритм UHASH
Вход:
K, строка длиной KEYLEN байт.
M, строка длиной меньше чем 2^67 бит.
taglen, числа 3,4, 8, 12 or 16.
Выход:
Y, строка длиной taglen байт.
Вычисление Y использует следующий алгоритм:
//
// одна целая итерация за 3 байта для выхода
//
iters = taglen / 3
//
// определим общее число требуемых ключей при помощи KDF.
// L1Key reuses most key material between iterations.
//
L1Key = KDF(K, 1, 1024 + (iters - 1) * 16)
L2Key = KDF(K, 2, iters * 24)
L3Key1 = KDF(K, 3, iters * 64)
L3Key2 = KDF(K, 4, iters * 4)
//
// Для каждой итерации устанавливаем свой ключ и делаем трехслойный hash.
// If bytelength(M) <= 1024, then skip L2-HASH.