DKIM 正規化|simple と relaxed の違い
目次
この記事でわかること
- DKIM の正規化(canonicalization)方式 simple と relaxed が、空白や改行をどう扱うかの違い
c=タグでヘッダ用とボディ用を別々に指定できること(c=relaxed/relaxedの読み方)- メール転送やメーリングリストで simple 署名が壊れやすく、relaxed が頑健な理由と実務での推奨設定
「届いたメールだけ DKIM が失敗する」の正体
自社からのメールは Gmail で問題なく認証されるのに、取引先がメーリングリストや転送設定経由で受け取ると DKIM だけが fail する。そんな相談は少なくありません。SPF や DMARC の設定をいくら見直しても直らず、原因がつかめないまま放置されているケースもあります。
この「経路によって結果が変わる DKIM 失敗」の多くは、正規化(canonicalization:せいきか)方式の選び方が関係しています。DKIM(ディーキム:メールに電子署名を付け、内容の改ざんを検知する仕組み)は、署名を作るときにメールを一定のルールで整形してからハッシュ計算します。この整形ルールが正規化です。
正規化には simple と relaxed の 2 種類があり、どちらを選ぶかで「途中でメールが少し書き換えられたときに署名が生き残るか壊れるか」が変わります。本記事では両者の違いと、なぜ実務では relaxed/relaxed が推奨されるのかを整理します。DKIM の各タグ(v= a= c= など)全体の意味はDKIM-Signature ヘッダの各フィールド解説もあわせてご覧ください。
正規化(canonicalization)とは何か
メールはあなたのサーバーを出てから受信者に届くまで、複数の中継サーバーを通過します。その過程で、本文や見た目に影響しない範囲の細かな書き換えが起きることがあります。代表的なのは次のようなものです。
- 行末の余分な空白(スペースやタブ)の削除や追加
- 連続する空白が 1 個にまとめられる
- 長いヘッダ行が複数行に折り返される(folding)、またはその逆
DKIM は「送信時のメール」のハッシュ値を署名し、受信側は「受け取ったメール」のハッシュ値を再計算して一致を確認します。もし途中で 1 文字でも変われば、ハッシュは一致せず署名は壊れます。
そこで RFC 6376(DKIM の仕様、Section 3.4)は、ハッシュ計算の前にメールを決まった形へ整える正規化を定義しました。送信側と受信側が同じルールで整形してから比べることで、意味のない差分で署名が壊れるのを防ぎます。どこまで整えるかが、simple と relaxed の違いです。
simple と relaxed の違い
RFC 6376 は、ヘッダとボディそれぞれに simple と relaxed の 2 アルゴリズムを定義しています。ひとことで言えば、simple は「ほぼ一切の変更を許さない」厳格な方式、relaxed は「空白の詰め直しや行の折り返しといった、よくある書き換えを許容する」寛容な方式です。
ヘッダの正規化
simple はヘッダをメッセージにある通り、一切変更せずにハッシュ計算へ渡します。ヘッダ名の大文字小文字も、空白の数もそのままです。
relaxed は次の整形を行ってから計算します(RFC 6376 Section 3.4.2)。
- ヘッダ名(値ではなく名前側)をすべて小文字に変換する(例:
From→from) - 折り返された行を 1 行に戻す(unfolding)
- 連続する空白を 1 個のスペースにまとめる
- 値の末尾の空白を削除する
- ヘッダ名と値を区切るコロンの前後の空白を削除する
中継サーバーが起こしがちな書き換えは、まさにこの「空白の増減」「行の折り返し」です。relaxed はこれらを事前に吸収するため、途中で整形されても署名が一致しやすくなります。
ボディの正規化
simple ボディは、本文末尾の空行を無視し、末尾の改行を 1 つの CRLF に正規化するだけです。それ以外の空白はそのまま扱うため、本文の途中で空白が 1 つ変わっただけでも署名は壊れます。
relaxed ボディは、行末の空白を無視し、行中の連続する空白を 1 個のスペースにまとめ、末尾の空行を取り除きます。つまり「人間の目には同じに見える空白の差」を許容するため、転送経路での軽微な書き換えに強くなります。
c= タグで header と body を別々に指定する
正規化方式は、DKIM-Signature ヘッダの c= タグで指定します。書式は c=ヘッダ用/ボディ用 で、スラッシュの前がヘッダ、後ろがボディです。
具体的には次のように読みます。
c=relaxed/relaxed… ヘッダ relaxed、ボディ relaxed(実務で最も推奨される組み合わせ)c=relaxed/simple… ヘッダだけ relaxed、ボディは simplec=simple/simple… ヘッダもボディも simple
ここで実務上の重要な注意点があります。RFC 6376 では、c= タグを省略した場合のデフォルトは simple/simple と定められています。つまり何も考えずに最小設定で署名を作ると、最も壊れやすい simple/simple になってしまう可能性があります。一方で現場の運用では relaxed/relaxed が広く使われており、RFC のデフォルトと実務の標準が食い違っている点は押さえておきたいところです。c= を含む各タグの詳細はDKIM-Signature ヘッダの各フィールド解説を参照してください。
転送やメーリングリストで relaxed が頑健な理由
relaxed が推奨される最大の理由が、転送やメーリングリスト経由での署名生存率です。
メーリングリストや転送サーバーは、メールを中継する際にヘッダを折り返し直したり、本文の改行コードを揃え直したりすることがあります。これらは内容を変えない整形ですが、simple のもとではハッシュが変わってしまい、署名は fail します。relaxed ならこうした整形を吸収できるため、署名が生き残る確率がぐっと高まります。
ただし、ここを正しく理解することが事故防止のうえで決定的に重要です。relaxed が許容するのは、あくまで空白や折り返しといった「見た目に影響しない整形」だけです。次のような「内容そのものの書き換え」が起きると、relaxed でも署名は壊れます。
- メーリングリストが件名の先頭に
[リスト名]を付け足す(ヘッダ内容の変更) - 本文末尾にフッターや配信停止リンクを追記する(ボディ内容の変更)
- ウイルススキャナや署名サービスが本文を書き換える
これらは正規化では救えません。「relaxed にすれば転送で絶対に壊れない」わけではない点に注意してください。件名やフッターを書き換えるメーリングリストへの対策は正規化の話ではなく、転送経路でも認証結果を引き継ぐ ARC や、DMARC の運用設計で扱う領域です。DKIM が本当に壊れているのかどうかの確認方法はDKIM 検証の手順で解説しています。
実務での推奨設定
結論として、特別な事情がなければ c=relaxed/relaxed を選ぶのが安全です。理由を整理します。
- 中継サーバーが起こす空白・折り返しの書き換えを吸収し、誤った DKIM 失敗を減らせる
- 多くのメールプロバイダや送信サービスが標準で
relaxed/relaxedを採用しており、互換性の実績が豊富 simpleを選ぶ積極的な理由は、ごく一部の厳格な改ざん検知要件を除いてほとんどない
設定面では、Google Workspace や Microsoft 365 など主要なプロバイダ経由で送る場合、正規化方式はプロバイダ側が決めており、利用者が個別に指定しないことが大半です。自社サーバーや送信サービスで DKIM 署名を生成している場合は、署名設定に c= 相当のオプションがあるかを確認し、relaxed/relaxed になっているかを点検するとよいでしょう。
実際に送信したメールの c= 値を確認する手順はDKIM の確認コマンド集にまとめています。届いたメールのソースを開き、DKIM-Signature ヘッダの c= を見れば、現在どの方式で署名されているかをその場で判断できます。
よくある質問
simple と relaxed のどちらを選ぶべきですか
特別な要件がなければ relaxed/relaxed を推奨します。転送やメーリングリスト経由での署名失敗を減らせるためです。simple を積極的に選ぶ場面はほとんどありません。
relaxed にすれば転送でも DKIM は絶対に壊れませんか
いいえ。relaxed が許容するのは空白や行の折り返しなど見た目に影響しない整形だけです。件名へのリスト名付与や本文へのフッター追記など、内容そのものが書き換わると relaxed でも署名は壊れます。
c= タグが書かれていない署名はどう扱われますか
RFC 6376 では c= を省略した場合のデフォルトは simple/simple です。意図せず最も壊れやすい設定になっている可能性があるため、署名生成側の設定を確認することをおすすめします。
まとめ
- 正規化(canonicalization)は、ハッシュ計算前にメールを整形して意味のない差分で署名が壊れるのを防ぐ仕組み
simpleはほぼ無変更で厳格、relaxedは空白の詰め直しや行の折り返しを許容して頑健c=タグはヘッダ用/ボディ用の書式。省略時のデフォルトはsimple/simple、実務標準はrelaxed/relaxedrelaxedでも件名やフッターなど内容の書き換えは救えない。あくまで整形の差を吸収するもの
自社メールの DKIM 設定を確認しませんか
自社ドメインの DKIM がどの正規化方式で署名されているか、転送やメーリングリストで壊れやすい状態になっていないかは、ドメイン番人の無料診断で確認できます。設定の点検や、メールが届かない原因の切り分けで迷う場合は、お問い合わせフォームから状況をお知らせください。専門家が一緒に整理いたします。