15.2. hmac – Хеширование с ключом для аутентификации сообщений¶hmac – Keyed-Hashing for Message Authentication
Исходный код: Lib/hmac.py
Этот модуль реализует алгоритм HMAC, описанный в RFC 2104.
- hmac.new(key, msg=None, digestmod=None)¶
Возвращает новый объект hmac. Параметр key – это объект bytes или bytearray, содержащий секретный ключ. Если задан msg, вызывается метод update(msg). Параметр digestmod – это имя дайджеста, конструктор дайджеста или модуль, который следует использовать для объекта HMAC. Он поддерживает любые имена, подходящие для hashlib.new(), и по умолчанию использует конструктор hashlib.md5.
Изменено в версии 3.4: Параметр key может быть объектом bytes или bytearray. Параметр msg может быть любого типа, поддерживаемого hashlib. Параметр digestmod может быть именем алгоритма хеширования.
Устарело с версии 3.4: MD5 как неявный дайджест по умолчанию для digestmod устарел.
Объект HMAC имеет следующие методы:
- HMAC.update(msg)¶
Обновляет объект hmac содержимым msg. Повторные вызовы эквивалентны одному вызову с конкатенацией всех аргументов: m.update(a); m.update(b) эквивалентно m.update(a + b).
Изменено в версии 3.4: Параметр msg может быть любого типа, поддерживаемого hashlib.
- HMAC.digest()¶
Возвращает дайджест байтов, переданных методу update() на данный момент. Этот объект bytes будет такой же длины, как digest_size дайджеста, переданного конструктору. Он может содержать не-ASCII байты, включая нулевые байты (NUL).
Предупреждение
При сравнении вывода digest() с внешне предоставленным дайджестом в процедуре проверки рекомендуется использовать функцию compare_digest() вместо оператора == для уменьшения уязвимости к атакам по времени.
- HMAC.hexdigest()¶
Как digest(), за исключением того, что дайджест возвращается в виде строки вдвое большей длины, содержащей только шестнадцатеричные цифры. Это может использоваться для безопасного обмена значением в электронных письмах или других недвоичных средах.
Предупреждение
При сравнении вывода hexdigest() с внешне предоставленным дайджестом в процедуре проверки рекомендуется использовать функцию compare_digest() вместо оператора == для уменьшения уязвимости к атакам по времени.
- HMAC.copy()¶
Возвращает копию («клон») объекта hmac. Это может использоваться для эффективного вычисления дайджестов строк, имеющих общую начальную подстроку.
Хэш-объект имеет следующие атрибуты:
- HMAC.digest_size¶
Размер результирующего дайджеста HMAC в байтах.
- HMAC.block_size¶
Внутренний размер блока хэш-алгоритма в байтах.
Новое в версии 3.4.
- HMAC.name¶
Каноническое имя этого HMAC, всегда в нижнем регистре, например hmac-md5.
Новое в версии 3.4.
Этот модуль также предоставляет следующую вспомогательную функцию:
- hmac.compare_digest(a, b)¶
Возвращает a == b. Эта функция использует подход, предназначенный для предотвращения анализа времени выполнения путём избегания короткого замыкания на основе содержимого, что делает её подходящей для криптографии. a и b должны быть одного типа: либо str (только ASCII, как, например, возвращается HMAC.hexdigest()), либо bytes-like object.
Примечание
Если a и b имеют разную длину, или если возникает ошибка, атака по времени теоретически может раскрыть информацию о типах и длине a и b, но не об их значениях.
Новое в версии 3.3.
См. также
- Модуль hashlib
- Модуль Python, предоставляющий безопасные хеш-функции.