hmac
— Хеширование ключей для аутентификации сообщений¶
Исходный код: Lib/hmac.py.
Этот модуль реализует алгоритм HMAC, описанный в RFC 2104.
-
hmac.
new
(key, msg=None, digestmod='')¶ Возвращает новый объект hmac. key - это объект в виде байта или массива байтов, задающий секретный ключ. Если присутствует msg, то выполняется вызов метода
update(msg)
. digestmod - это имя дайджеста, конструктор дайджеста или модуль для объекта HMAC. Это может быть любое имя, подходящее дляhashlib.new()
. Несмотря на положение аргумента, он является обязательным.Изменено в версии 3.4: Параметр key может быть объектом типа bytes или bytearray. Параметр msg может быть любого типа, поддерживаемого
hashlib
. Параметр digestmod может быть именем алгоритма хэширования.Deprecated since version 3.4, removed in version 3.8: MD5 как неявный дайджест по умолчанию для digestmod устарел. Теперь параметр digestmod является обязательным. Передавайте его как аргумент ключевого слова, чтобы избежать неловкости, когда у вас нет начального msg.
-
hmac.
digest
(key, msg, digest)¶ Возвращает дайджест msg для заданных секретных key и digest. Функция эквивалентна
HMAC(key, msg, digest).digest()
, но использует оптимизированную реализацию на языке C или inline, что быстрее для сообщений, помещающихся в памяти. Параметры 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()
), либо bytes-like object.Примечание
Если a и b имеют разную длину, или если произошла ошибка, временная атака теоретически может раскрыть информацию о типах и длинах a и b, но не об их значениях.
Добавлено в версии 3.3.
Изменено в версии 3.10: Функция использует внутреннюю функцию
CRYPTO_memcmp()
OpenSSL, если она доступна.
См.также
- Модуль
hashlib
Модуль Python, предоставляющий безопасные хэш-функции.