スキップしてメイン コンテンツに移動

DKIMでメール改ざんを防ぐ秘策

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署名を付与し、受信側で改ざん検知が可能な状態にします。

この記事はAIによって作成されました。

コメント