14.2. hmac – Ключевое хэширование для аутентификации сообщений¶hmac – Keyed-Hashing for Message Authentication
Новое в версии 2.2.
Исходный код: Lib/hmac.py
Этот модуль реализует алгоритм HMAC, описанный в RFC 2104.
-
hmac.new(key[, msg[, digestmod]])¶ Возвращает новый объект hmac. Если указан msg, выполняется вызов метода
update(msg). digestmod – это конструктор или модуль дайджеста, который будет использовать объект HMAC. По умолчанию используется конструкторhashlib.md5.
Объект HMAC имеет следующие методы:
-
HMAC.update(msg)¶ Обновляет объект hmac строкой msg. Повторные вызовы эквивалентны одному вызову с конкатенацией всех аргументов:
m.update(a); m.update(b)эквивалентноm.update(a + b).
-
HMAC.digest()¶ Возвращает дайджест строк, переданных методу
update()на данный момент. Длина этой строки равна digest_size дайджеста, переданного конструктору. Она может содержать не-ASCII символы, включая нулевые байты (NUL).Предупреждение
При сравнении вывода
digest()с внешне предоставленным дайджестом во время процедуры верификации рекомендуется использовать функциюcompare_digest()вместо оператора==, чтобы снизить уязвимость к атакам по времени.
-
HMAC.hexdigest()¶ Как
digest(), но дайджест возвращается в виде строки вдвое большей длины, содержащей только шестнадцатеричные цифры. Это может использоваться для безопасного обмена значением по электронной почте или в других недвоичных средах.Предупреждение
При сравнении вывода
hexdigest()с внешне предоставленным дайджестом во время процедуры верификации рекомендуется использовать функциюcompare_digest()вместо оператора==, чтобы снизить уязвимость к атакам по времени.
-
HMAC.copy()¶ Возвращает копию («клон») объекта hmac. Это может использоваться для эффективного вычисления дайджестов строк, имеющих общую начальную подстроку.
Этот модуль также предоставляет следующую вспомогательную функцию:
-
hmac.compare_digest(a, b)¶ Возвращает
a == b. Эта функция использует подход, предназначенный для предотвращения анализа времени выполнения за счет исключения сокращённых вычислений на основе содержимого, что делает её подходящей для криптографии. a и b должны быть одного типа: либоunicode, либо байтоподобный объект.Примечание
Если a и b имеют разную длину или возникает ошибка, теоретически атака по времени может раскрыть информацию о типах и длинах a и b, но не их значения.
Новое в версии 2.7.7.
См. также
- Модуль
hashlib Модуль Python, предоставляющий безопасные хеш-функции.