HMAC(ハッシュベースメッセージ認証コード)をPythonで使用する方法

この記事では、PythonでHMAC(Hash-based Message Authentication Code、ハッシュベースメッセージ認証コード)を使用する方法について解説します。具体的なコード例、その詳細解説、および応用例を2つ掲載しています。

目次

はじめに

HMACはデータの完全性と認証を保証する手法の一つです。通信やデータストレージで広く利用されています。Pythonでも`hashlib`ライブラリを使って簡単に実装できます。

HMACの基本

HMACは、メッセージと秘密鍵を組み合わせて、ユニークなハッシュ値を生成します。このハッシュ値は、データが改ざんされていないか確認する際や、送信者が正当であるかを確認する際に使用されます。

PythonでのHMACの基本的な使い方

import hashlib
import hmac

key = b'secret_key'  # 秘密鍵
message = b'message'  # メッセージ

# HMACオブジェクトの作成
hmac_object = hmac.new(key, message, hashlib.sha256)

# HMACハッシュ値の取得
hmac_hash = hmac_object.hexdigest()
print(hmac_hash)

このコードは`hashlib`と`hmac`ライブラリを使用しています。まず`hmac.new()`関数でHMACオブジェクトを作成し、`hexdigest()`メソッドでHMACハッシュ値を16進数で取得します。

応用例

応用例1: ファイルの完全性チェック

ファイルのダウンロード時やバックアップ時に、その完全性をHMACで確認する例です。

import hashlib
import hmac

def check_file_integrity(file_path, key):
    # ファイルをバイナリモードで読み込む
    with open(file_path, 'rb') as f:
        file_data = f.read()
  
    # HMACハッシュ値の計算
    hmac_object = hmac.new(key, file_data, hashlib.sha256)
    return hmac_object.hexdigest()

key = b'secret_key'
file_hmac = check_file_integrity('example.txt', key)
print(f'HMAC hash of the file: {file_hmac}')

このコードでは、`check_file_integrity`関数を使ってファイルの完全性を確認しています。関数はファイルパスと秘密鍵を引数に取り、HMACハッシュ値を返します。

応用例2: API認証

APIのリクエストにHMACを添付し、サーバーでその認証を行う例です。

import requests

# APIエンドポイントと認証情報
api_endpoint = "https://example.com/api/resource"
key = b'secret_key'
payload = {'param1': 'value1', 'param2': 'value2'}

# HMACハッシュ値の計算
hmac_object = hmac.new(key, str(payload).encode(), hashlib.sha256)
hmac_hash = hmac_object.hexdigest()

# APIリクエスト
headers = {'Authorization': f'HMAC {hmac_hash}'}
response = requests.get(api_endpoint, params=payload, headers=headers)

この例では`requests`ライブラリを使用してAPIリクエストを行います。HMACハッシュ値を`Authorization`ヘッダーに添付しています。

まとめ

HMACはデータの完全性と認証を確保する手法として非常に有用です。Pythonでの基本的な使い方から、ファイル完全性のチェック、API認証まで、多くの場面で活用することができます。

コメント

コメントする

目次