デジタル署名とは
デジタル署名(Digital Signature)は、電子文書の送信者の身元確認(認証)と、内容の改ざん検知(完全性)を提供する暗号技術です。手書きの署名と同様に法的効力を持ち、電子契約、ソフトウェア配布、電子メールなどで使用されます。
デジタル署名の仕組み:
- 署名生成:送信者がデータのハッシュを秘密鍵で暗号化
- 送信:データと署名を送信
- 検証:受信者が公開鍵で署名を復号し、データのハッシュと比較
代表的なアルゴリズム
- RSA署名:広く普及、長い歴史
- ECDSA:楕円曲線ベース、短い署名
- Ed25519:高速、現代的な推奨アルゴリズム
- DSA:古い、現在は非推奨
AIエンジニアとしての実体験
機械学習モデルの配布時に、デジタル署名でモデルの正当性を保証しています:
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import padding
# RSA署名の生成
signature = private_key.sign(
message,
padding.PSS(
mgf=padding.MGF1(hashes.SHA256()),
salt_length=padding.PSS.MAX_LENGTH
),
hashes.SHA256()
)
# 署名の検証
try:
public_key.verify(
signature,
message,
padding.PSS(
mgf=padding.MGF1(hashes.SHA256()),
salt_length=padding.PSS.MAX_LENGTH
),
hashes.SHA256()
)
print("署名が有効です")
except:
print("署名が無効です")
デジタル署名の用途
- コード署名:ソフトウェアの正当性を証明
- 電子メール署名:S/MIME、PGP
- PDF署名:契約書の電子署名
- TLS証明書:サーバー認証
- Gitコミット署名:開発者の認証
トラブル事例と対策
⚠️ 署名証明書の期限切れ
影響:署名されたソフトウェアが警告を出す
対策:タイムスタンプ署名を併用し、署名時点での有効性を証明。
