目次
デジタル署名とは
デジタル署名は、電子文書やデータに対して、そのデータが改竄されていないこと、およびそのデータの送信者が確かであることを保証するための技術です。これにより、セキュリティが高まり、信頼性の確保が可能になります。動作原理
デジタル署名の動作原理は大きく分けて2つのステップから成り立っています。必要なライブラリ
この記事で使用するPythonのコードは以下のライブラリに依存しています。デジタル署名の生成
最初にデジタル署名の生成について説明します。コード例
from cryptography.hazmat.primitives import serialization, hashes
from cryptography.hazmat.primitives.asymmetric import padding
# 秘密鍵の読み込み
with open("private_key.pem", "rb") as key_file:
private_key = serialization.load_pem_private_key(
key_file.read(),
password=None,
)
# メッセージ
message = b"Hello, world!"
# 署名
signature = private_key.sign(
message,
padding.PSS(
mgf=padding.MGF1(hashes.SHA256()),
salt_length=padding.PSS.MAX_LENGTH
),
hashes.SHA256()
)
コードの解説
このコードでは、`cryptography`ライブラリを使用しています。デジタル署名の検証
コード例
# 公開鍵の読み込み
with open("public_key.pem", "rb") as key_file:
public_key = serialization.load_pem_public_key(key_file.read())
# 署名の検証
try:
public_key.verify(
signature,
message,
padding.PSS(
mgf=padding.MGF1(hashes.SHA256()),
salt_length=padding.PSS.MAX_LENGTH
),
hashes.SHA256()
)
print("署名が正当です。")
except:
print("署名が不正です。")
コードの解説
このコードでは以下の手順で署名を検証しています。応用例
ファイルの完全性を確認する
# ファイルからデータを読み込む
with open("file.txt", "rb") as f:
file_data = f.read()
# ファイルのデータに対して署名を生成
file_signature = private_key.sign(
file_data,
padding.PSS(
mgf=padding.MGF1(hashes.SHA256()),
salt_length=padding.PSS.MAX_LENGTH
),
hashes.SHA256()
)
APIリクエストの署名
import requests
# APIに送信するデータ
api_data = {"key": "value"}
# APIデータに対して署名を生成
api_signature = private_key.sign(
str(api_data).encode(),
padding.PSS(
mgf=padding.MGF1(hashes.SHA256()),
salt_length=padding.PSS.MAX_LENGTH
),
hashes.SHA256()
)
# APIに署名付きでリクエストを送信
response = requests.post("https://example.com/api", json={"data": api_data, "signature": api_signature.hex()})
コメント