Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで学ぶHMAC:メッセージ認証のためのキー付きハッシュ入門

HMAC(Keyed-Hashing for Message Authentication)とは

HMACは、暗号学的ハッシュ関数を利用してメッセージ認証を行うためのフレームワークです。MD5やSHA-1など、さまざまなハッシュアルゴリズムと組み合わせて使用できる汎用性の高い仕組みです。

その基本的な考え方は、実際のデータと秘密鍵を組み合わせてハッシュ値を生成するというものです。最終的な出力には秘密鍵そのものは含まれないため、同じ秘密鍵を共有している受信側だけが、メッセージが改ざんされていないかどうかを検証できます。

この機能を利用するには、Pythonコード内でhmacモジュールをインポートする必要があります。

import hmac

hmacモジュールの主なメソッドと属性

hmac.update(message)

指定したメッセージでhmacオブジェクトを更新します。このメソッドを繰り返し呼び出した場合、その結果は引数を連結して1回呼び出した場合と同等になります。大きなデータを分割して処理したい場合に便利です。

hmac.digest()

updateメソッドで渡されたデータのダイジェスト(ハッシュ値)をバイトオブジェクトとして返します。戻り値のサイズはdigest_sizeと同一で、0から255までの全範囲のバイト値を含む可能性があります。

hexdigest()

digestメソッドと同様の働きをしますが、結果が16進数の文字列として返される点が異なります。人間が読みやすい形式であるため、インターネット経由でデータをやり取りする際に非常に扱いやすくなっています。

copy()

hmacオブジェクトのコピーを作成します。共通の初期状態から複数のダイジェストを効率よく計算したい場合に、このメソッドが役立ちます。

サンプルコード

以下は、MD5アルゴリズムを使ってHMACを生成し、copy()メソッドでオブジェクトを複製する例です。

import hashlib
import hmac

update_bytes = b'Python123'
password = b'abcde1234'

# MD5アルゴリズムを使用してハッシュを生成
my_hmac = hmac.new(update_bytes, password, hashlib.md5)
print("最初のダイジェスト: " + str(my_hmac.digest()))
print("正規名: " + my_hmac.name)

# hmacオブジェクトのコピーを作成
my_hmac_cpy = my_hmac.copy()
print("コピーのダイジェスト: " + str(my_hmac_cpy.digest()))

実行結果

最初のダイジェスト: b"\x1c\xe1\xfb\x9b\xd4\x8bu\xb9\xe6N6\xee\x00O'}"
正規名: hmac-md5
コピーのダイジェスト: b"\x1c\xe1\xfb\x9b\xd4\x8bu\xb9\xe6N6\xee\x00O'}"

実行結果からわかるように、元のhmacオブジェクトとcopy()メソッドで作成したコピーは、まったく同じダイジェストを返します。また、name属性を参照することで、使用しているアルゴリズム(この例では「hmac-md5」)を確認できます。

  1. PythonでSHAハッシュを生成する方法|hashlibモジュールの使い方を徹底解説

    セキュリティは、あらゆるIT企業にとって最重要課題の一つです。大切なデータを保護し、検証するために、さまざまなハッシュ技術が活用されています。本記事では、Pythonのhashlibモジュールを使ったSHAハッシュ化の基本について、サンプルコード付きでわかりやすく解説します。ハッシュとは何かハッシュとは、可変長のバイト列を入力として受け取り、固定長のバイト列へ変換する関数のことです。ただし、一度ハッシュ化したデータから元のデータ(入力バイト列)を復元することは極めて困難です。たとえば、入力をx、ハッシュ関数をfとすると、f(x)の計算は高速かつ簡単に行えますが、その結果からxを逆算することは非

  2. PythonでMD5ハッシュを生成する方法|hashlibモジュールの使い方を徹底解説

    データセキュリティは、あらゆるIT企業にとって最重要課題の一つです。データを保護し、その完全性を検証するために、さまざまなハッシュ技術が活用されています。本記事では、Pythonを使ってMD5ハッシュを生成・エンコードする方法を、具体的なコード例とともにわかりやすく解説します。 ハッシュとは何か ハッシュとは、可変長のバイト列を入力として受け取り、それを固定長のバイト列へと変換する関数のことです。重要な特徴として、元のデータ(入力されたバイト列)を復元することが極めて困難である点が挙げられます。例えば、入力を x、ハッシュ関数を f とした場合、f(x) の計算は高速かつ簡単に行えますが、そこ