16:08
HMAC
В криптографии , HMAC (иногда расширена либо ключом-хэш - код аутентификации сообщения или на основе хэш-кода аутентификации сообщения ) представляет собой тип специфика кода аутентификации сообщений (MAC) с участием криптографической хэш - функции и секретного ключа шифрования . Как и с любым MAC, он может быть использован одновременно проверять как целостность данных и подлинность в виде сообщения . Любая криптографическая хеш-функция, такая как SHA-256 или SHA-3, может использоваться при расчете HMAC; результирующий алгоритм MAC называется HMAC-X, где X - используемая хеш-функция (например, HMAC-SHA256 или HMAC-SHA3). Криптографическая стойкость HMAC зависит от криптографической стойкости лежащей в основе хэш-функции, размера ее хеш-вывода, а также размера и качества ключа.
HMAC использует два прохода вычисления хеша. Секретный ключ сначала используется для получения двух ключей - внутреннего и внешнего. При первом прохождении алгоритма создается внутренний хэш, полученный из сообщения и внутреннего ключа. Второй проход производит окончательный код HMAC, полученный из внутреннего результата хеширования и внешнего ключа. Таким образом, алгоритм обеспечивает лучшую защиту от атак с удлинением длины .
Итеративная хеш-функция разбивает сообщение на блоки фиксированного размера и перебирает их с помощью функции сжатия . Например, SHA-256 работает с 512-битными блоками. Размер выходного сигнала HMAC такой же, как и у базовой хэш-функции (например, 256 и 1600 бит в случае SHA-256 и SHA-3 соответственно), хотя при желании его можно урезать.
HMAC не шифрует сообщение. Вместо этого сообщение (зашифрованное или нет) должно быть отправлено вместе с хеш-кодом HMAC. Стороны с секретным ключом снова будут хэшировать сообщение, и, если оно является подлинным, полученные и вычисленные хэши будут совпадать.

то определение взято из RFC 2104 :
{\ displaystyle {\ begin {align} \ operatorname {HMAC} (K, m) & = \ operatorname {H} {\ Bigl (} {\ bigl (} K '\ oplus opad {\ bigr)} \ parallel \ operatorname {H} {\ bigl (} \ left (K '\ oplus ipad \ right) \rallel m {\ bigr)} {\ Bigr)} \\ K' & = {\ begin {case} \ operatorname {H} \ left (K \ right) & K {\ text {больше, чем размер блока}} \\ K & {\ text {else}} \ end {case}} \ end {выровненный}}}
где
H - криптографическая хеш-функция
m - сообщение для аутентификации
К является секретным ключом
K ' - это ключ размером с блок, полученный из секретного ключа, K ; либо добавляя вправо с нулями до размера блока, либо сначала хэшируя до размера, меньшего, чем размер блока, а затем добавляя вправо с нулями
∥ обозначает конкатенацию
⊕ обозначает побитовый эксклюзив или (XOR)
opad - это внешний отступ размером с блок, состоящий из повторяющихся байтов со значением 0x5c
ipad - это внутреннее заполнение размером с блок, состоящее из повторяющихся байтов со значением 0x36

Следующий псевдокод демонстрирует, как HMAC может быть реализован. Размер блока составляет 64 (байта) при использовании одной из следующих хеш-функций: SHA-1, MD5, RIPEMD-128/160. 
функция hmac : input: key: Bytes // Массив байтов сообщение: Bytes // Массив байтов для хэширования hash: Function // Используемая хеш-функция (например, SHA-1) blockSize: Integer // Размер блока базовая хеш-функция (например, 64 байта для SHA-1) outputSize: Integer // Размер вывода базовой хеш-функции (например, 20 байтов для SHA-1) // Ключи длиннее, чем blockSize , сокращаются путем их хеширования if (length (key)> blockSize), а затем ключ ← hash (key) // Ключ становится outputSize длиной в байты // Ключи короче blockSize дополняются до blockSize заполнением нулями справа if (length (key) <blockSize), а затем key ← Pad (key, blockSize) // Pad клавиша с нулями, чтобы сделать его длиной BlockSize в байтах o_key_pad ← клавиша xor [0x5c * blockSize] // клавиша с внешней подкладкой i_key_pad ← клавиша xor [0x36 * blockSize] // клавиша с внутренней подкладкой вернуть хеш (o_key_pad ∥ hash (i_key_pad ∥ message)) // Где conc конкатенация

Разработка спецификации HMAC была мотивирована существованием атак на более тривиальные механизмы объединения ключа с хэш-функцией. Например, можно было бы предположить тот же уровень безопасности , что обеспечивает HMAC может быть достигнуто с MAC = H ( ключ || сообщения ). Однако этот метод страдает серьезным недостатком: с большинством хеш-функций легко добавлять данные к сообщению, не зная ключа, и получать другой действительный MAC (« атака с расширением длины »). Альтернатива, добавление ключа с помощью MAC = H ( сообщение || ключ), страдает от проблемы, заключающейся в том, что злоумышленник, который может найти коллизию в хеш-функции (без ключа), имеет коллизию в MAC (так как два сообщения m1 и m2 с одинаковым хешем предоставят одинаковое условие запуска хеш-функции до добавленный ключ хэшируется, следовательно, последний хеш будет таким же). Использование MAC = H ( ключ || сообщение || ключ ) лучше, но различные документы безопасности предложили уязвимости при таком подходе, даже если используются два различных ключа
Криптографическая стойкость HMAC зависит от размера используемого секретного ключа. Самая распространенная атака на HMAC - это грубая сила для раскрытия секретного ключа. HMAC существенно меньше подвержены коллизиям, чем только их основные алгоритмы хеширования. В частности, в 2006 году Михир Белларе доказал, что HMAC является PRF, при условии, что функция сжатия является PRF. [8] Следовательно, HMAC-MD5 не страдает от тех же слабостей, которые были обнаружены в MD5.
RFC2104 требует, чтобы «ключи длиннее, чем байты B , сначала хэшировались с использованием H », что приводило к сбивающей с толку псевдоколлизии: если ключ длиннее, чем размер хеш-блока (например, 64 символа для SHA-1), то HMAC(k, m)вычисляется как HMAC(H(k), m).это свойство иногда рассматривается как возможная слабость HMAC в сценариях хеширования паролей: было продемонстрировано, что можно найти длинную строку ASCII и случайное значение, хэш которого также будет строкой ASCII, и оба значения будут выдавать один и тот же вывод HMAC

HMAC_MD5 («ключ», «Быстрая коричневая лиса перепрыгивает через ленивую собаку») = 80070713463e7749b90c2dc24911e275 HMAC_SHA1 («ключ», «Быстрая коричневая лиса перепрыгивает через ленивую собаку») = de7c9b85b8b78aa6bc8a7a36f70a90701c9db4d9 HMAC_SHA256 («ключ», «Быстрая коричневая лиса перепрыгивает через ленивую собаку») = f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8
Категорія: Технологии Кибербезопасности | Переглядів: 260 | Додав: Kontent_MENEGER | Теги: HMAC | Рейтинг: 0.0/0
Всього коментарів: 0
avatar