Spec-Zone.ru › Python 3.10

hmac — Ключевое хеширование для аутентификации сообщений

Исходный код: Lib/hmac.py

Этот модуль реализует алгоритм HMAC, как описано в RFC 2104.

hmac.new(key, msg=None, digestmod='')

Возвращает новый объект hmac. key — это объект bytes или bytearray, содержащий секретный ключ. Если msg присутствует, вызывается метод update(msg). digestmod — это имя хеш-функции, конструктор хеш-объекта или модуль, который будет использоваться объектом HMAC. Это может быть любое имя, подходящее для hashlib.new(). Несмотря на свою позицию аргумента, он обязателен.

Изменено в версии 3.4: Параметр key может быть объектом типа bytes или bytearray. Параметр msg может быть любого типа, поддерживаемого hashlib. Параметр digestmod может быть именем алгоритма хеширования.

Устарело начиная с версии 3.4, удалено в версии 3.8: MD5 как неявный по умолчанию digest для digestmod устарел. Параметр digestmod теперь обязателен. Передавайте его как ключевой аргумент, чтобы избежать неясности, когда у вас нет начального msg.

hmac.digest(key, msg, digest)

Возвращает дайджест msg для заданного секретного key и digest. Функция эквивалентна HMAC(key, msg, digest).digest(), но использует оптимизированную C или встроенную реализацию, которая быстрее для сообщений, помещающихся в память. Параметры key, msg и digest имеют то же значение, что и в new().

Деталь реализации CPython, оптимизированная C-реализация используется только тогда, когда digest является строкой и именем алгоритма дайджеста, поддерживаемого OpenSSL.

Добавлена в версии 3.7.

Объект 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.

Устарело начиная с версии 3.9: Недокументированные атрибуты HMAC.digest_cons, HMAC.inner, и HMAC.outer являются внутренними деталями реализации и будут удалены в Python 3.10.

Этот модуль также предоставляет следующую вспомогательную функцию:

hmac.compare_digest(a, b)

Возвращает a == b. Эта функция использует подход, разработанный для предотвращения анализа времени, избегая поведения короткого замыкания на основе содержимого, что делает её подходящей для криптографии. a и b должны быть одного и того же типа: либо str (только ASCII, например, возвращаемый HMAC.hexdigest()), либо объект-подобный байтам.

Примечание

Если a и b имеют разную длину или происходит ошибка, атака на основе времени теоретически могла бы раскрыть информацию о типах и длинах a и b, но не их значениях.

Добавлена в версии 3.3.

Изменено в версии 3.10: Функция использует внутренне CRYPTO_memcmp() OpenSSL, если он доступен.

См. также

Module hashlib

Модуль Python, предоставляющий безопасные функции хеширования.

© 2001–2023 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.10/library/hmac.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API