UMAC
Эта статья требует внимания эксперта в области криптографии . Конкретная проблема заключается в следующем: путаница между UMAC как общей концепцией и алгоритмом UMAC RFC 4418; Нужен кто-то, кто разделит это на «универсальное хеширование в MAC» и «UMAC и друзья». см . на странице обсуждения Подробности ( сентябрь 2019 г. ) |
В криптографии код аутентификации сообщения, основанный на универсальном хешировании , или UMAC , представляет собой тип кода аутентификации сообщения (MAC), вычисляемый путем выбора хеш-функции из класса хеш-функций в соответствии с некоторым секретным (случайным) процессом и применения ее к сообщению. . Полученный дайджест или отпечаток пальца затем шифруется, чтобы скрыть идентичность используемой хэш-функции. и любой MAC, его можно использовать для одновременной проверки целостности данных и подлинности сообщения Как . В отличие от традиционных MAC, которые являются сериализуемыми , UMAC может выполняться параллельно . Таким образом, поскольку машины продолжают предлагать больше возможностей параллельной обработки, скорость внедрения UMAC будет увеличиваться. [1]
Конкретный тип UMAC, также обычно называемый просто UMAC , указан в RFC 4418, он имеет доказуемую криптографическую стойкость и обычно требует гораздо меньше вычислительных затрат, чем другие MAC. Конструкция UMAC оптимизирована для 32-битных архитектур с поддержкой SIMD , с производительностью 1 цикл ЦП на байт (cpb) с SIMD и 2 cpb без SIMD. Близкий вариант UMAC, оптимизированный для 64-битных архитектур, представлен VMAC , который был представлен IETF в качестве черновика ( Draft-krovetz-vmac-01 ), но так и не привлек достаточного внимания для того, чтобы стать стандартизированным RFC.
Предыстория [ править ]
Универсальное хеширование [ править ]
Допустим, хеш-функция выбирается из класса хеш-функций H, который отображает сообщения в D, набор возможных дайджестов сообщений. Этот класс называется универсальным , если для любой отдельной пары сообщений существует не более |H|/|D| функции, которые отображают их на один и тот же член D.
Это значит, что если злоумышленник хочет заменить одно сообщение другим и, с его точки зрения, хеш-функция была выбрана совершенно случайно, вероятность того, что UMAC не обнаружит его модификацию, не превышает 1/|D|.
Но это определение недостаточно строгое — если возможными сообщениями являются 0 и 1, D={0,1} и H состоит из тождественной операции, а не , H является универсальным. Но даже если дайджест зашифрован методом модульного сложения, злоумышленник может изменить сообщение и дайджест одновременно, и получатель не заметит разницы.
Сильно универсальное хеширование [ править ]
Удобный в использовании класс хэш-функций H затруднит злоумышленнику угадать правильный дайджест d фальшивого сообщения f после перехвата одного сообщения a с дайджестом c . Другими словами,
должно быть очень маленьким, желательно 1/| Д |.
Легко построить класс хэш-функций, когда D — поле . Например, если | Д | простое число , все операции выполняются по модулю | Д |. Сообщение a затем кодируется как n -мерный вектор над D ( a 1 , a 2 , ... an , ) . Тогда H имеет | Д | п +1 члены, каждый из которых соответствует ( n + 1) -мерному вектору над D ( h 0 , h 1 , ..., h n ) . Если мы позволим
мы можем использовать правила вероятностей и комбинаторики, чтобы доказать, что
Если мы правильно зашифруем все дайджесты (например, с помощью одноразового блокнота ), злоумышленник не сможет ничего из них узнать, и одна и та же хеш-функция может использоваться для всей связи между двумя сторонами. Это может быть не так для шифрования ECB , поскольку вполне вероятно, что два сообщения дадут одно и то же значение хеш-функции. какой-то вектор инициализации Затем следует использовать , который часто называют nonce . Стало обычной практикой устанавливать h 0 = f (nonce), где f также является секретным.
Обратите внимание, что наличие огромной мощности компьютера совершенно не поможет злоумышленнику. Если получатель ограничивает количество принимаемых подделок (переходя в режим сна всякий раз, когда он их обнаруживает), | Д | может быть 2 32 или меньше.
Пример [ править ]
Следующая функция C генерирует 24-битный UMAC. Предполагается, что secret
кратно 24 битам, msg
не длиннее, чем secret
и result
уже содержит 24 секретных бита, например f(nonce). nonce не обязательно должен содержаться в msg
.
Хэмпшир и RFC - Нью UMAC
НХ [ править ]
Функции в приведенном выше безымянном [ нужна ссылка ] Семейство сильно универсальных хэш-функций использует n умножений для вычисления хэш-значения.
Семейство NH вдвое сокращает количество умножений, что на практике примерно означает двукратное ускорение. [2] Для повышения скорости UMAC использует семейство хэш-функций NH. NH специально разработан для использования инструкций SIMD , и, следовательно, UMAC является первой функцией MAC, оптимизированной для SIMD. [1]
Следующее семейство хэшей -универсальный: [1]
- .
где
- Сообщение M кодируется как n -мерный вектор из w -битных слов ( m 0 , m 1 , m 2 , ..., m n-1 ).
- Промежуточный ключ K кодируется как n+1 -мерный вектор из w -битных слов ( k 0 , k 1 , k 2 , ..., k n ). Генератор псевдослучайных чисел генерирует K из общего секретного ключа.
Практически NH выполняется в целых числах без знака. Все умножения — по модулю 2^ w , все сложения — по модулю 2^ w /2, а все входные данные — вектор полуслов ( -битовые целые числа). Затем алгоритм будет использовать умножения, где было число полуслов в векторе. Таким образом, алгоритм работает со «скоростью» одного умножения на входное слово.
RFC 4418 [ править ]
RFC 4418 многое делает для обертывания NH, чтобы сделать его хорошим UMAC. Общая процедура UHASH («универсальная хэш-функция») создает теги переменной длины, которая соответствует количеству итераций (и общей длине ключей), необходимых для всех трех уровней хеширования. на основе AES Несколько вызовов функции получения ключей используются для предоставления ключей для всех трех хэшей с ключами.
- Уровень 1 (куски по 1024 байта -> объединенные хэши по 8 байт) использует NH, потому что он быстрый.
- Уровень 2 хеширует все до 16 байт с помощью функции POLY, которая выполняет арифметику простых модулей, при этом простое число меняется по мере увеличения размера входных данных.
- Уровень 3 хеширует 16-байтовую строку до фиксированной длины в 4 байта. Это то, что генерирует одна итерация.
В RFC 4418 NH преобразован в следующий вид:
Y = 0
for (i = 0; i < t; i += 8) do
end for
Это определение предназначено для того, чтобы побудить программистов использовать инструкции SIMD для накопления, поскольку только данные с четырьмя индексами, скорее всего, не будут помещены в один и тот же регистр SIMD и, следовательно, быстрее будут умножаться в больших объемах. На гипотетической машине это можно было бы просто перевести так:
См. также [ править ]
- Poly1305 — еще один быстрый MAC, основанный на строго универсальном хешировании.
Ссылки [ править ]
- ^ Jump up to: Перейти обратно: а б с Блэк, Дж.; Халеви, С.; Кравчик, Х.; Кровец, Т. (1999). UMAC: Быстрая и безопасная аутентификация сообщений (PDF) . Достижения в криптологии (CRYPTO '99) . Архивировано из оригинала (PDF) 10 марта 2012 г. , уравнение 1, а также раздел 4.2 «Определение NH».
- ^ Торуп, Миккель (2009). Хеширование строк для линейного зондирования . Учеб. 20-й симпозиум ACM-SIAM по дискретным алгоритмам (SODA) . стр. 655–664. CiteSeerX 10.1.1.215.4253 . дои : 10.1137/1.9781611973068.72 . ISBN 978-0-89871-680-1 . Архивировано (PDF) из оригинала 12 октября 2013 г. , раздел 5.3
Внешние ссылки [ править ]
- Миллер, Дэмиен; Валчев, Питер (3 сентября 2007 г.). «Использование UMAC в протоколе транспортного уровня SSH: Draft-miller-secsh-umac-01.txt» . IETF .