DKIMでメール改ざんを防ぐ秘策
DKIM設定の基礎
メールセキュリティの重要な要素として、DKIM(DomainKeys Identified Mail)は送信ドメインの真正性を保証します。DKIMは電子署名を利用し、メールヘッダーと本文の一部を暗号化して署名します。受信側は公開鍵を使って署名を検証し、改ざん検知を行います。
秘密鍵と公開鍵の生成
DKIM署名に必要な鍵ペアは、opensslで簡単に生成できます。以下のコマンドで2048ビットのRSA鍵を作成し、秘密鍵と公開鍵を分離します。
openssl genrsa -out private.key 2048
openssl rsa -in private.key -pubout -out public.key
生成した秘密鍵は安全に保管し、公開鍵はDNSにTXTレコードとして登録します。
DNS登録とセレクタ設定
公開鍵をDNSに登録する際、セレクタ(selector)を付与します。セレクタは複数の鍵を管理するために使われ、TXTレコードは次のように構成されます。
selector1._domainkey.example.com. IN TXT "v=DKIM1; k=rsa; p=公開鍵のBase64文字列"
このレコードをDNSに追加すると、受信サーバは selector1 を参照して公開鍵を取得できます。
メールヘッダーへの署名と改ざん検知
メール送信時に、DKIM署名ヘッダーを追加します。ヘッダーには署名対象のヘッダー名と本文のハッシュ値が含まれます。受信側はヘッダーと本文を再計算し、署名と照合することで改ざん検知を行います。
署名ヘッダーの例は以下の通りです。
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=example.com; s=selector1;
h=from:to:subject:date;
bh=本文のBase64ハッシュ;
b=署名のBase64文字列;
実践例: opensslで電子署名を作成
opensslを使ってメール本文を署名する手順は次の通りです。
# 署名対象のメール本文をファイルに保存
echo "Subject: Test DKIM" > mail.txt
echo "From: alice@example.com" >> mail.txt
echo "To: bob@example.com" >> mail.txt
echo "" >> mail.txt
echo "Hello, this is a test email." >> mail.txt
# 本文のハッシュを計算
openssl dgst -sha256 -binary mail.txt | openssl base64
# 秘密鍵で署名
openssl dgst -sha256 -sign private.key -out signature.bin mail.txt
openssl base64 -in signature.bin -out signature.txt
# 署名ヘッダーを手動で追加
cat >> mail.txt
echo "DKIM-Signature: v=1; a=rsa-sha256; d=example.com; s=selector1; bh=$(openssl dgst -sha256 -binary mail.txt | openssl base64); b=$(cat signature.txt);" >> mail.txt
# 送信
sendmail -t mail.txt
このスクリプトは、メールヘッダーにDKIM署名を付与し、受信側で改ざん検知が可能な状態にします。
コメント
コメントを投稿