hmac — Keyed-Hashing für Nachrichtenauthentifizierung¶
Quellcode: Lib/hmac.py
Dieses Modul implementiert den HMAC-Algorithmus, wie er von RFC 2104 beschrieben wird. Die Schnittstelle erlaubt die Verwendung jeder Hash-Funktion mit einer *festen* Digest-Größe. Insbesondere Funktionen mit erweiterbarem Ausgabestrom wie SHAKE-128 oder SHAKE-256 können nicht mit HMAC verwendet werden.
- hmac.new(key, msg=None, digestmod)¶
Gibt ein neues HMAC-Objekt zurück. key ist ein Byte- oder Bytearray-Objekt, das den geheimen Schlüssel enthält. Wenn msg vorhanden ist, wird der Methodenaufruf
update(msg)ausgeführt. digestmod ist der Digest-Name, der Digest-Konstruktor oder das Modul, das das HMAC-Objekt verwenden soll. Es kann jeder Name sein, der fürhashlib.new()geeignet ist. Trotz seiner Argumentposition ist es erforderlich.Geändert in Version 3.4: Der Parameter key kann ein Byte- oder Bytearray-Objekt sein. Der Parameter msg kann von jedem Typ sein, der von
hashlibunterstützt wird. Der Parameter digestmod kann der Name eines Hash-Algorithmus sein.Geändert in Version 3.8: Das Argument digestmod ist jetzt erforderlich. Übergeben Sie es als Schlüsselwortargument, um umständliche Situationen zu vermeiden, wenn Sie keine anfängliche msg haben.
- hmac.digest(key, msg, digest)¶
Gibt den Digest von msg für den gegebenen geheimen Schlüssel key und digest zurück. Die Funktion ist äquivalent zu
HMAC(key, msg, digest).digest(), verwendet aber eine optimierte C- oder Inline-Implementierung, die für Nachrichten, die in den Speicher passen, schneller ist. Die Parameter key, msg und digest haben die gleiche Bedeutung wie innew().CPython-Implementierungsdetail: Die optimierte C-Implementierung wird nur verwendet, wenn digest ein String und der Name eines Digest-Algorithmus ist, der von OpenSSL unterstützt wird.
Hinzugefügt in Version 3.7.
- class hmac.HMAC¶
Ein HMAC-Objekt hat die folgenden Methoden
- HMAC.update(msg)¶
Aktualisiert das HMAC-Objekt mit msg. Wiederholte Aufrufe sind äquivalent zu einem einzigen Aufruf mit der Verkettung aller Argumente:
m.update(a); m.update(b)ist äquivalent zum.update(a + b).Geändert in Version 3.4: Der Parameter msg kann von jedem Typ sein, der von
hashlibunterstützt wird.
- HMAC.digest()¶
Gibt den Digest der bisher an die
update()-Methode übergebenen Bytes zurück. Dieses Byte-Objekt hat die gleiche Länge wie die digest_size des an den Konstruktor übergebenen Digests. Es kann Nicht-ASCII-Bytes, einschließlich Null-Bytes, enthalten.Warnung
Beim Vergleich der Ausgabe von
digest()mit einem extern bereitgestellten Digest während einer Überprüfungsroutine wird empfohlen, die Funktioncompare_digest()anstelle des Operators==zu verwenden, um die Anfälligkeit für Timing-Angriffe zu verringern.
- HMAC.hexdigest()¶
Ähnlich wie
digest(), nur dass der Digest als String mit doppelter Länge zurückgegeben wird, der nur hexadezimale Ziffern enthält. Dieser kann verwendet werden, um den Wert sicher in E-Mails oder anderen nicht-binären Umgebungen auszutauschen.Warnung
Beim Vergleich der Ausgabe von
hexdigest()mit einem extern bereitgestellten Digest während einer Überprüfungsroutine wird empfohlen, die Funktioncompare_digest()anstelle des Operators==zu verwenden, um die Anfälligkeit für Timing-Angriffe zu verringern.
- HMAC.copy()¶
Gibt eine Kopie ("Klon") des HMAC-Objekts zurück. Dies kann verwendet werden, um effizient die Digests von Strings zu berechnen, die einen gemeinsamen Anfangsstring haben.
Ein Hash-Objekt hat die folgenden Attribute
- HMAC.digest_size¶
Die Größe des resultierenden HMAC-Digests in Bytes.
- HMAC.block_size¶
Die interne Blockgröße des Hash-Algorithmus in Bytes.
Hinzugefügt in Version 3.4.
- HMAC.name¶
Der kanonische Name dieses HMAC, immer in Kleinbuchstaben, z. B.
hmac-md5.Hinzugefügt in Version 3.4.
Geändert in Version 3.10: Die undokumentierten Attribute HMAC.digest_cons, HMAC.inner und HMAC.outer wurden entfernt.
Dieses Modul stellt auch die folgende Hilfsfunktion zur Verfügung
- hmac.compare_digest(a, b)¶
Gibt
a == bzurück. Diese Funktion verwendet einen Ansatz, der darauf ausgelegt ist, Timing-Analysen zu verhindern, indem er eine inhaltsbasierte Kurzschlussauswertung vermeidet, was ihn für die Kryptographie geeignet macht. a und b müssen beide vom gleichen Typ sein: entwederstr(nur ASCII, wie z. B. vonHMAC.hexdigest()zurückgegeben) oder ein bytes-ähnliches Objekt.Hinweis
Wenn a und b unterschiedliche Längen haben oder ein Fehler auftritt, könnte ein Timing-Angriff theoretisch Informationen über die Typen und Längen von a und b preisgeben – aber nicht über ihre Werte.
Hinzugefügt in Version 3.3.
Geändert in Version 3.10: Die Funktion verwendet intern OpenSSLs
CRYPTO_memcmp(), wenn verfügbar.
Siehe auch
- Modul
hashlib Das Python-Modul, das sichere Hash-Funktionen bereitstellt.