Смекни!
smekni.com

Хеш-функция UMAC (стр. 2 из 3)

должна быть очень небольшой, желательно 1 / | D |.

Можно легко построить класс хэш-функции, когда D является полем. Например, если | D | является простым, все операции, принятые по модулю | D |. Сообщение а затем кодируется как н-мерный вектор над D (a1, a2, .., аn). Н затем | D | n +1 членов, каждый из которых соответствует n +1- мерному вектору над D (h0, h1, .., hn). Если принять, что


мы можем использовать правила вероятностей и комбинаторикичтобы доказать, что

Если мы правильно зашифровали все дайджесты (например, при поможи кодировки (OTP)), злоумышленник не сможет получить от них что-либо и в то же время хэш-функция может быть использована для всех контактов между двумя сторонами. Это не может быть правдой для шифрования ECB, поскольку может быть весьма вероятным, что два послания производят то же хэш-значение. Потом какой-либо вектор инициализации должен быть использован, который часто называют «nonce». Это стало распространенной практикой для установки h0 = f (nonce), где f является также секретом.

Обратите внимание, что наличие огромного количества вычислительной мощности не поможет злоумышленнику вообще. Если получатель ограничивает количество подделок она принимает ,| D | может быть 2 в 32 степени или меньше.


2. ПОСТАНОВКАЗАДАЧИ

Создатьхэш-функциюUMAC (message authentication code based on universal hashing).

Наша функция будет 24-битной. Причем ключ должен быть не длиннее сообщения. А зашифрованное сообщение будет также 24 бита и уже содержит ключ. Например, f («nonce»). Причем «nonce» не обязательно должно содержаться в незашифрованом сообщении.


3. ОПИСАНИЕ ПРОГРАММЫ

3.1 Основные действия.

3.1.1 Операции со строками

Сообщения, которые будут хэшированными рассматриваются как строки битов, заполненные нулями до определенной длины байта. После того, как сообщение мягкий, все строки рассматриваются как строки байт. А "байт" состоит из 8 бит строка. Следующие записи используется для того, чтобы манипулировать этими строками.

bytelength (S): Длина строки S в байтах.

bitlength (S): Длина строки S в битах.

zeroes(n): Строка из n нулевых байт.

S xor T: Строка, которая является результатом суммы по модулю 2 S

и Т. Строки S и T всегда имеют одинаковые

длины.

S and T: Строка, которая получается в результате побитовой коньюнкции Sи T

S[i]: i-тый байт строки(индексация начинаеися с 1)

S[i...j]: Подстрока строки S состоящая из байтов iчерез j.

S || T: Логическое «или» строк S и T.

zeropad(S,n): Строка S заполненая нуль-битами до ближайшего положительного кратного n байту. Формально, zeropad(S,n) = S || T, где Tкратчайшая строка нуль-битов (возможно пустая) ,следовательно S|| Tне пустое и 8nделит bitlength(S ||T).

3.1.2 Операции с числами

Используется тандартная запись,как для большинства математических операций, такие как "*" для умножения, "+" для сложения и "mod" для модульного сокращения.

Некоторые менее стандартной нотации определяются здесь.

a^i: целое растущее до i-той мощности.

ceil(x): минимальное целое больше равное x.

начало(n): самое большое простое число менее чем 2^n.

Простые числа использованные в UMAC:

3.1.3 Преобразовательные действия для строк и чисел.

Преобразование между строками и целыми сделаны используя следующие функции. Каждая функция рассматривает начальные биты как более значимые чем те что идут позже

bit(S,n): Возвращает целому 1 если n-th бит строки равен S - 1, в противном . случае возвращает целое 0 (индексы начинаются с 1).

str2uint(S): Неотрицательное целое, чье бинарное представление является . трокой S. Более формально :

S is t bits long then str2uint(S) = 2^{t-1} *

bit(S,1) + 2^{t-2} * bit(S,2) + ... + 2^{1} *

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.

//

Y = <пустаястрока>

Для i = 1 to iters do

L1Key_i = L1Key [(i-1) * 16 + 1 ... (i-1) * 16 + 1024]

L2Key_i = L2Key [(i-1) * 24 + 1 ... i * 24]

L3Key1_i = L3Key1[(i-1) * 64 + 1 ... i * 64]

L3Key2_i = L3Key2[(i-1) * 4 + 1 ... i * 4]

A = L1-HASH(L1Key_i, M)

Если (bitlength(M) <= bitlength(L1Key_i)) тогда,

B = zeroes(8) || A

иначеполучим

B = L2-HASH(L2Key_i, A)

аесли

C = L3-HASH(L3Key1_i, L3Key2_i, B)

Y = Y || C

end for

Return Y


4. Стойкость алгоритма к атакам.

В соответствии с MAC спецификой, документ является защищенным. Здесь мы описываем некоторые соображения по безопасности важные для соответствующего понимания и использования UMAC.

4.1Сопротивление в Криптанализе

Сила UMAC зависит от силы своих основных шифровальных функций: ключевой вывод функции (KDF) и панель-вывода функции (PDF). В этой спецификации, оба действия осуществлены используя блочный шифр, по умолчанию Передовой Шифровальный Стандарт (AES). Тем не менее, проект UMAC учитывает замену этих компонентов. На самом деле, возможно даже использовать другое блочное кодирование или другие шифровальные объекты, как например, SHA-1 или HMAC для реализации KDF или PDF.

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

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

4.Повторная атака взломщика, повторяющего сообщение, nonce, и этикетку аутентификации. Во многих приложениях, посторная атака может окончательно повредить сообщение, поэтому должна иметь препятствия. В UMAC, это должно быть реализовано при получении собщения, получатель проверяет, что никакая «nonce» величина не используется дважды. При надежной связи, когда «nonce» - счетчик, это тривиально. При ненадежной связи, когда «nonce» - счетчик, в окне происходит кэширование последних «nonces». Поврежденное сообщение не запустится ,т.к. выдастса ошибка в противном случае этикетки аутентификации правильные.

Сообщение дойдет до получателя, когда данныйе (сообщение, nonce, этикетка) посчиталсись подлиными. Несомненно, этикетка должна быть в силе для сообщения и для «nonce», как определено в UMAC, но сообщение может все еще посчитаться неаутентифицированным, поскольку «nonce» будет повторен.


5. Инструкция пользователя

Для начала работы с программой находим umac.exe и запускаем его.

На экране появится «Entermessage», после чего мы воодим нужное нам сообщение и нажимаем Enter. Затем на экране появится «Enterkey», после чего мы вводим ключ (длина ключа короче чем сообщения или равна ему. В противном случае те символы, которые вышли за рамки сообщения принимать участия в кодировании не будут. ), известный только нам и получателю и снова жмем Enter.

Затем на экране видим зашифрованное сообщение. Программа выполнила требуемую операцию.


ВЫВОДЫ

- UMACявляется самым быстрым среди MAC- алгоритмов.

- Является безопасным и криптостойким. Выдерживает множество видов атак.

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

- Нет обоснования выбора конструкции, функций, констант.

-Сохраняет конфиденциальность, аутентичность, целостность,неопровергаемость.


ПЕРЕЧЕНЬ ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ

1. Зубков С. В. - Assembler – язык неограниченных возможностей. «ДМК Пресс» - 1999г.

2. http://fastcrypto.org/umac

3. http://en.wikipedia.org/wiki/UMAC

4. Кип Р. Ирвин Язык ассемблера для процессоров INTEL, 4-е изд. /Пер. с англ. – М..: – Издательский дом “ВИЛЬЯМС”, 2005 г. – 912 с., ил. – Парал. Тит. Англ.

5.J. Black, S. Halevi, H. Krawczyk, T. Krovetz, and P. Rogaway, "UMAC: Fast and provably secure message authentication", Advances in Cryptology - CRYPTO '99, LNCS vol. 1666, pp. 216-233, Springer-Verlag, 1999.


Приложение А. Графическое представление программы.

1. Открываем программу и пишем сообщение:

2. Вводим ключ:

3. Получаем зашифрованное сообщение:


Приложение Б.

UMAC24 - код на ассемблере.Это внешняя функция, которая прикомпилируется к коду на с++, в качестве объектного файла.