hmac —メッセージ認証のためのキー付きハッシュ
ソースコード: :source: `Lib / hmac.py`
このモジュールは、 RFC 2104 で説明されているHMACアルゴリズムを実装します。
- hmac.new(key, msg=None, digestmod=)
新しいhmacオブジェクトを返します。 key は、秘密鍵を与えるバイトまたはバイト配列オブジェクトです。 msg が存在する場合、メソッド呼び出し
update(msg)
が行われます。 digestmod は、HMACオブジェクトが使用するダイジェスト名、ダイジェストコンストラクター、またはモジュールです。 hashlib.new()に適した任意の名前にすることができます。 その議論の位置にもかかわらず、それは必須です。バージョン3.4で変更:パラメーター key はbytesまたはbytearrayオブジェクトにすることができます。 パラメータ msg は、 hashlib でサポートされている任意のタイプにすることができます。 パラメータ digestmod は、ハッシュアルゴリズムの名前にすることができます。
- hmac.digest(key, msg, digest)
指定されたシークレットキーおよびダイジェストの msg のダイジェストを返します。 この関数は
HMAC(key, msg, digest).digest()
と同等ですが、最適化されたCまたはインライン実装を使用します。これは、メモリに収まるメッセージに対してより高速です。 パラメータキー、 msg 、およびダイジェストは、 new()と同じ意味です。CPython実装の詳細、最適化されたC実装は、 digest がOpenSSLでサポートされているダイジェストアルゴリズムの文字列と名前である場合にのみ使用されます。
バージョン3.7の新機能。
HMACオブジェクトには次のメソッドがあります。
- HMAC.update(msg)
msg でhmacオブジェクトを更新します。 繰り返される呼び出しは、すべての引数を連結した単一の呼び出しと同等です。
m.update(a); m.update(b)
はm.update(a + b)
と同等です。バージョン3.4で変更:パラメーター msg は、 hashlib でサポートされている任意のタイプにすることができます。
- HMAC.digest()
これまでに update()メソッドに渡されたバイトのダイジェストを返します。 このバイトオブジェクトは、コンストラクターに与えられたダイジェストの digest_size と同じ長さになります。 NULバイトを含む非ASCIIバイトが含まれる場合があります。
警告
検証ルーチン中に digest()の出力を外部提供のダイジェストと比較する場合は、
==
の代わりに compare_digest()関数を使用することをお勧めします。タイミング攻撃に対する脆弱性を減らすためのオペレーター。
- HMAC.hexdigest()
digest()と同様ですが、ダイジェストが16進数のみを含む長さの2倍の文字列として返される点が異なります。 これは、電子メールまたはその他の非バイナリ環境で値を安全に交換するために使用できます。
警告
検証ルーチン中に 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
は内部実装の詳細であり、Python3.10で削除されます。
このモジュールは、次のヘルパー関数も提供します。
- hmac.compare_digest(a, b)
a == b
を返します。 この関数は、コンテンツベースの短絡動作を回避することでタイミング分析を防止するように設計されたアプローチを使用しており、暗号化に適しています。 a と b は、両方とも同じタイプである必要があります。 str (ASCIIのみ、たとえば、 HMAC.hexdigest())、またはバイトのようなオブジェクトによって返されます。ノート
a と b の長さが異なる場合、またはエラーが発生した場合、タイミング攻撃により、理論的には a とのタイプと長さに関する情報が明らかになる可能性があります。 ] b -ただし、それらの値ではありません。
バージョン3.3の新機能。
バージョン3.9で変更:この関数は、使用可能な場合、OpenSSLの
CRYPTO_memcmp()
を内部的に使用します。