a.HMAC;
HMAC (hash-based message authentication code)
HMAC =H ((K ⊕Opad )|| H ((K ⊕ Ipad ) || M ))
Н – функция хеширования.
64 байтовые константы:
Оpad = 0x5c5c...5c
Ipad = 0x3636...36
Является более продвинутой версией MAC. На вход всегда подается защищаемое
сообщение Msg и секретный параметр Key. Получила большую популярность в
сетевых протоколах, а также среди алгоритмов генерации ключей для
симметричных блочных шифров. Независимо от длины ключа и сообщения,
практически всегда будет выполняться минимум 4 итерации хеширования, т.к.
блоки сложения ключа с ipad и opad всегда 64 байта. (см. лекция хеш-функции)
Криптостойкость
Криптостойкость HMAC зависит, прежде всего, от следующих факторов:
• криптостойкость используемого алгоритма хэширования;
• размер выходного значения алгоритма;
• размер и качество ключа.
Контексты атак на HMAC и «классическое» использование алгоритма
хэширования заметно различаются. Атакующий алгоритм HMAC может
преследовать следующие цели:
• подобрать сообщение, HMAC которого равен эталонному или равен HMAC
эталонного сообщения;
• это похоже на атаки на классическое применение алгоритма хэширования по
поиску первого или второго прообраза;
• найти корректную пару «сообщение – код аутентификации данного
сообщения» или вычислить код аутентификации сообщения для заданного
сообщения без знания секретного ключа;
• получить ключ, используемый для вычисления HMAC.
b.OMAC;
OMAC (One-Key CBC-MAC)
M – аутентифицируемое сообщение;
M = m1 | m2 | ... | mx
Е – функция шифрования;
F – функция выработки
доп. ключа(ей)
k – секретный ключ.
Более устойчива к различным атакам за счет использования блока tweak (значение
поправки). Рекомендуется к использованию стандартизирующей организацией
NIST. Очевидно вычислительно нагружена.
c.NMAC;
Алгоритм NMAC был также предложен авторами алгоритма HMAC. Данный
алгоритм позволяет использовать при аутентификации сообщений два ключа: k1 и
k2. Формула вычисления NMAC крайне проста:
NMAC(k1, k2, m) = hash(k2, hash(k1, m)),
где второй параметр функции hash() обозначает хэшируемое сообщение, а первый
параметр – нестандартный вектор инициализации, в качестве которого
используется ключ (соответственно, k1 и k2 обозначают уже выровненные до
размера вектора инициализации ключи). NMAC является, фактически,
обобщением HMAC, поскольку ключи k1 и k2 можно использовать независимо, а
можно представить как производные от единственного ключа k, вычисляемые
следующим образом:
k1 = h(k ⊕ C1); k2 = h(k ⊕ C2),
где h() – функция сжатия используемого алгоритма хэширования; в данном случае
применяется стандартный вектор инициализации алгоритма.
d.CMAC;
Также существуют по способу вычислений:
Трехсторонние протоколы
Использование центра передачи ключей
1. Обозначения. E – симметричный алгоритм шифрования. M может включать
сеансовый ключ K. Т – центр передачи ключей
2. Начальная установка. A и T устанавливают общий ключ K AT . Аналогично B и T
устанавливают ключ K BT .
3. Сообщения протокола.
1. A → T: A, E K AT B,M
2. A ← T: E K BT M,A
3. A → B: E K BT M,A
Безопасность протокола
1. Зашифрованный идентификатор А в сообщении 3 служит для В
подтверждением источника ключа.
2. Перестановка местами полей в сообщениях 1 и 2 служит для предотвращения
атаки "зеркало", т.е. возврата сообщения 1 как исходящего от пользователя B.
3. Предотвращение повторов может быть достигнуто включением в сообщение М
временной метки или последовательного номера
4. Атака по выбранному исходному тексту на K BT в сообщении 2 может быть
предотвращена использованием режима шифрования CBC и включением в
сообщение М случайного числа.
Сертификаты симметричных ключей
Центр передачи ключей T выдает каждому пользователю A сертификат
симметричного ключа
cert A = E K T ( K AT , A )
здесь K T – секретный ключ T, известный только ему. Сертификаты ключей
могут храниться в общедоступном каталоге.
При использовании сертификатов теперь нет необходимости хранить в центре все
общие ключи центра и пользователей. Этот сертификат предоставляется
пользователем центру в случае, когда необходима передача ключа.
Протокол передачи ключа изменяется только в сообщении 1, которое будет
выглядеть так:
A→T : cert A , E K (B , M ) ,cert B
AT
Протокол Гиллоу-Кискатера
Пусть I A – идентификационная информация стороны A (или значение хэш-
функции от нее), n – открытое произведение двух секретных простых чисел p и q,
v – открытое значение (показатель степени), s = v –1 mod φ(n) – секретное значение
доверенной стороны.
Секретный параметр s A стороны A выбирается центром T так, что I A · s A v = 1
(mod n), т.е. s A = (I A ·) –s mod n.
Сторона A отправляет B свои идентификационные данные IA . Протокол
доказательства выглядит следующим образом.
(1) А выбирает случайное целое r: такое, что 1 ≤ r ≤ n – 1 и вычисляет
v
T = r (mod n) и отправляет это значение стороне B.
(2) B выбирает случайное целое d: 1 ≤ d ≤ v и отправляет это число стороне A.
(3) A вычисляет D = r · s A d (mod n) и отправляет это значение B.
(4) B вычисляет T' = D v · I A d (mod n) и проверяет выполнение равенства T' = T.
Если оно выполняется, то проверка считается завершенной успешно.
В самом деле, T' = D v I A d = (rsA d ) v · I A d = r v s A dv I A d = r v (I A s A v ) d = r v ≡ T
(mod n).
Протокол Шнорра
Инициализация. Выбираются два больших простых числа p и q, так что q | (p – 1).
Выбирается элемент β мультипликативного порядка q. Каждая из сторон получает
копию системных параметров и открытый ключ доверенной стороны T,
позволяющий проверять подписи S T (m) под сообщениями m. Далее выбирается
параметр безопасности t: 2 t < q.
Для каждого пользователя выбираются следующие параметры:
(a) Каждому доказывающему A присваивается уникальный идентификатор I A .
(b) A выбирает секретный ключ a: 0 ≤ a ≤ q – 1, и вычисляет v = β -a mod p.
(c) A удостоверяет себя перед T обычными средствами (например, по паспорту),
передает v T и получает сертификат cert A = (I A ; v; S T (I A ; v)), связывающий IA с v.
Сообщения в протоколе. Протокол включает три сообщения:
A → B: cert A ; x = β r mod p (1)
A ← B: e: 1 ≤ e ≤ 2 t < q (2)
A → B : y = ae + r mod q (3)
Действия в протоколе. A идентифицирует себя перед B следующим образом:
(a) A выбирает случайное r (обязательство), 1 ≤ r ≤ q – 1, вычисляет свидетельство
x = r mod p и посылает сообщение (1) B.
(b) B проверяет открытый ключ A (v), проверяя подпись T на сертификате cert A ,
затем отсылает A (никогда ранее не использовавшееся) случайное e (запрос), 1 ≤ e
≤ 2t .
(c) A проверяет 1 ≤ e ≤ 2 t и посылает B (ответ) y = ae + r mod q.
(d) B вычисляет z = β y v e и принимает A при условии, что z = x.
d.Протокол Диффи-Хеллмана
Протокол Диффи-Хеллмана
Для инициализации протокола стороны выбирают подходящее простое число p и
генератор α мультипликативной группы Z p . Затем действия протокола
следующие:
(a) А выбирает случайное секретное значение x, 1≤ x ≤ p – 2 и направляет B
сообщение (1): A → B: α x mod p;
(b) B выбирает случайное секретное значение y, 1≤ y ≤ p – 2 и направляет A
сообщение (2): A ← B: α y mod p;
(c) B получает α x и вычисляет общий ключ K по формуле K = (α x ) y mod p;
(d) A получает α y и вычисляет общий ключ K по формуле K = (αy ) x mod p;