UMAC (англ. message authentication code based on universal hashing, universal MAC, код аутентификации сообщения на основе универсального хеширования) — один из видов кода аутентичности сообщений (MAC).
Данный алгоритм был отобран NESSIE в 2003 году, а в его разработке принимали участие: Intel Corp. (США), университет Невады (США), научно-исследовательская лаборатория IBM (США), Technion (Израиль) и университет Калифорнии в Дэвисе (США). Его авторами были John Black, Shai Halevi и Hugo Krawczyk, Ted Krovetz и Phillip Rogaway.
Быстрая «универсальная» функция используется, для того, чтобы хешировать входящее сообщение M в короткую строку. К этой строке потом применяется функция XOR с псевдослучайным значением, в результате чего мы получаем тег UMAC:
где K1 и K2 — секретные случайные ключи, которые имеют получатель и отправитель.
Отсюда видно, что безопасность UMAC зависит от того, каким случайным способом отправитель и получатель выбрали тайную хеш-функцию и псевдослучайную последовательность. При этом значение Nonce меняется каждый такт. Из-за использования Nonce, приемник и передатчик должны знать время отправки сообщения и принцип создания значения Nonce. Вместо этого можно использовать в качестве Nonce любое другое неповторяющееся значение, например порядковый номер сообщения. При этом данный номер не обязан быть секретным, главное чтобы он не повторялся.
UMAC рассчитан на использование 32-х, 64-х, 92-х, и 128-битовых тегов, в зависимости от требуемого уровня безопасности. UMAC обычно используется совместно с алгоритмом шифрования AES.
Создание псевдослучайных байтов необходимо для работы UHASH и при создании тегов
Для своей работы UMAC использует блочный шифр, выбор которого определяют следующие константы:
При этом используется функция
Пример: если используется AES с 16-байтным ключом, то BLOCLEN будет равным 16(так как AES работает с 16-байтными блоками).
Эта функция генерирует последовательность псевдослучайных байтов, используемых для ключевых хеш-функций.
Вход:
Выход:
Эта функция принимает ключ и данное время и возвращает псевдослучайное числ для использования его в теге поколения. С помощью этой функции могут быть получены числа длиной 4, 8, 12 или 16 байт.
Вход:
Выход:
Генерация UMAC-тегов происходит с помощью UHASH функции при использовании Nonce значении и полученной до этого строчки(см. Описание). Их длина может быть 4, 8, 12 или 16 байт.
Вход:
Выход:
Алгоритм вычисление тегов:
Данные обозначения содержат в своем названии определенное значение длины тега:
UHASH(англ. Universal hashing) — универсальная функция хеширования, сердцевина алгоритма UMAC. UHASH — функция работает в три этапа. Сначала к входному сообщению применяется L1-HASH, потом к этому результату применяется L2-HASH и, наконец, к результату применяется L3-HASH . Если при этом длина входного сообщения не более 1024 бит, то L2-HASH не используется. Так как функция L3-Hash возвращает только слово длины 4 байта, то если требуется получить хеш длины больше 4 байт, осуществляется несколько итераций данной трехуровневой схемы.
Пусть функция хеширования выбирается из класса хеш-функций H, которые отображают сообщения в D, набор всевозможных образов сообщения. Этот класс называется универсальным, если для каких-либо отдельных пар сообщений, существует на множестве H/D функций, функция, которая отображает их в элемент D. Смысл этой функции в том, что если третья сторона хочет заменить одно сообщение другим, но при этом считает, что хеш-функция была выбрана абсолютно случайно, то вероятность не обнаружения подмены принимающей стороной стремится к 1/D.
L1-Hash разбивает сообщения на куски из 1024 байт и к каждому куску применяет алгоритм хеширования называемый NH. Выходной результат алгоритма NH в 128 раз меньше входного.
L2-Hash работает с выходом L1-Hash, использует полиномиальный алгоритм POLY. Второй этап хеширования используется, только если длина входного сообщения больше 16 мегабайт. Использование алгоритма POLY требуется для того, чтобы избежать временную атаку. На выходе из алгоритма POLY получается 16 байтное число.
Этот этап требуется для того чтобы из выходных 16 байтов алгоритма L2-Hash получить 4-байтное значение.
Стойкость UMAC зависит от её основных функций: функции создания ключа (KDF) и функции создания псевдослучайной последовательности(PDF). Именно поэтому обе функции реализованы с использованием блочного шифрования, обычно Advanced Encryption Standard (AES). Однако UMAC позволяет использовать другие блочные шифры. Основной плюс UMAC алгоритма и UHASH функции заключается в том, что их стойкость зависит только от математических свойств данного алгоритма и функции. Поэтому криптоанализ не влияет на стойкость UHASH-функции.
Алгоритм MAC используется для проверки подлинности сообщений между двумя сторонами, которые знают общий секретный ключ K. Теги аутентификации вычисляются для сообщения с помощью ключа K, а в случае UMAC ключом является время. Взлом алгоритма MAC обозначает, что злоумышленник умеет сам генерировать сообщения без знания ключа. Теория Wegman-Carter и анализ UMAC показывает, что если используется алгоритм UMAC со случайными ключами и начальным значением Nonce, то вероятность того, что злоумышленник взломает сообщение равна: , , , , если используются выходные теги длины 32, 64, 96, 128 соответственно. Если злоумышленник делает N попыток, то вероятность взлома увеличивается пропорционально числу попыток, то есть в N раз. При дополнительном использовании алгоритма AES, вероятность взлома значительно уменьшается.
UMAC использует текущее время в диапазоне от 1 до BLOCKLEN байт. При этом все значения Nonce в течение сессии должны быть равными по длине. Для обеспечения лучшей безопасности никакое значение Nonce не должно повторяться при использовании одного ключа сессии.
Если используется дуплексный канал передачи, то могут использоваться разные ключи для каждого направления. При использовании ключа в обоих направлениях очень важно, чтобы значение Nonce не повторялось, это можно реализовать путём использования четных ключей в одном и нечетных в другом направлении. При этом текущее значение Nonce не нужно держать в секрете.
Значение Nonce может создаваться и передаваться следующими вариантами:
Повторные атаки — это действия злоумышленника направленные на повторение сообщения, случайного числа, и аутентификации тега. В UMAC данная атака не принесет плодов так как каждое значение Nonce используется ровно один раз.
Характер UMAC позволяет реализавать тег-префиксную проверку, например, приемник может проверить только 32-бит префикс от 64-битового тега. Это используется для оптимизации, если вычислительная нагрузка проверки высока. При этом приемник имеет возможность отклонения всего тега, если 32-битный префикс неверен. Данный алгоритм снижает безопасность сессии.