15.2. hmac — メッセージ認証のための鍵付きハッシュ化

ソースコード: Lib/hmac.py


このモジュールでは RFC 2104 で記述されている HMAC アルゴリズムを実装しています。

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

新しい hmac オブジェクトを返します。 key は秘密鍵を与える bytes または bytearray オブジェクトです。msg が与えられると、update(msg) が呼び出されます。digestmod は利用するダイジェスト名、ダイジェストコンストラクターまたは HMAC オブジェクトのモジュールです。hashlib.new() に与えることができる任意の名前をサポートし、デフォルトは hashlib.md5 のコンストラクターです。

バージョン 3.4 で変更: 引数 key に bytes または bytearray オブジェクトを渡せるようになりました。引数 msghashlib がサポートする全てのタイプを渡せるようになりました。引数 digestmod にハッシュアルゴリズム名を渡せるようになりました。

バージョン 3.4 で撤廃: MD5 が digestmod の暗黙のデフォルトダイジェストとなるのは廃止予定です。

HMAC オブジェクトは以下のメソッドを持っています:

HMAC.update(msg)

hmac オブジェクトを msg で更新します。このメソッドの呼出の繰り返しは、それらの引数を全て結合した引数で単一の呼び出しをした際と同じになります。すなわち m.update(a); m.update(b)m.update(a + b) と等価です。

バージョン 3.4 で変更: 引数 msghashlib がサポートしているあらゆる型のいずれかです。

HMAC.digest()

これまで update() メソッドに渡されたバイト列のダイジェスト値を返します。これはコンストラクタに与えられた digest_size と同じ長さのバイト列で、 NUL バイトを含む非 ASCII 文字が含まれることがあります。

警告

digest() の出力結果と外部から供給されたダイジェストを検証ルーチン内で比較しようとするのであれば、タイミング攻撃への脆弱性を減らすために、 == 演算子ではなく compare_digest() を使うことをお奨めします。

HMAC.hexdigest()

digest() と似ていますが、返される文字列は倍の長さとなり、16進形式となります。これは、電子メールなどの非バイナリ環境で値を交換する場合に便利です。

警告

hexdigest() の出力結果と外部から供給されたダイジェストを検証ルーチン内で比較しようとするのであれば、タイミング攻撃への脆弱性を減らすために、 == 演算子ではなく compare_digest() を使うことをお奨めします。

HMAC.copy()

hmac オブジェクトのコピー ("クローン") を返します。このコピーは最初の部分文字列が共通になっている文字列のダイジェスト値を効率よく計算するために使うことができます。

ハッシュオブジェクトには次のような属性があります:

HMAC.digest_size

生成された HMAC ダイジェストのバイト数。

HMAC.block_size

内部で使われるハッシュアルゴリズムのブロックのバイト数。

バージョン 3.4 で追加.

HMAC.name

このHMAC の正規名で、例えば hmac-md5 のように常に小文字です。

バージョン 3.4 で追加.

このモジュールは以下のヘルパ関数も提供しています:

hmac.compare_digest(a, b)

a == b を返します。この関数は、内容ベースの短絡的な振る舞いを避けることによってタイミング分析を防ぐよう設計されたアプローチを用い、暗号化に用いるのに相応しいものとしています。 ab は両方が同じ型でなければなりません: (例えば HMAC.hexdigest() が返したような ASCII のみの) str または bytes-like object のどちらか一方。

注釈

ab が異なる長さであったりエラーが発生した場合には、タイミング攻撃で理論上 ab の型と長さについての情報が暴露されますが、その値は明らかになりません。

バージョン 3.3 で追加.

参考

hashlib モジュール
セキュアハッシュ関数を提供する Python モジュールです。