WEBアプリケーション(スクリプト)作成・修理・トラブル解決相談

CANADOH

QR Code

Memo

Home > Documents > Memo

Memo

2024 年 3 月投稿文

< Mar 2024 >
[情報技術] DKIMメール認証
DKIMメール認証では、秘密鍵と公開鍵が使われます。
受信したメールのヘッダーに含まれている次のものを確認します。
  • a:使用されたハッシュ関数。
  • bh:正規化済みのメール本文をハッシュ化し、base64エンコードしたもの。
  • h :署名に使用しているヘッダー情報のリスト。
  • b:署名。hの指示通りのヘッダーをハッシュ化し、秘密鍵で暗号化およびbase64エンコードしたもの。
DKIM認証では2つの照合を行います。
  1. 本文をハッシュ化およびbase64エンコードしたものとbhとが一致するか。
  2. hの通りのヘッダー情報をハッシュ化したものと、bをbase64デコードして公開鍵で復号化したものとが一致するか。
bhの値は途中で改竄されやすい項目ですが、bの値は秘密鍵を持っている者だけが生成できます。仮に異なる秘密鍵で暗号化した場合は、公開鍵で復号化することができません。つまり、その時点で改竄が判明します。(実際には、メールフォームからの正しい送信であっても、公開鍵と対にならない秘密鍵が使用されたためにDKIM認証に失敗する場合もあります)
1と2の認証に使用するコマンドは次の通りです。
$ openssl dgst -sha256 -binary "正規化済みメール本文ファイル.txt" | base64
ZxgjUdBxt3GlOrQfX1etpRNDSDgeWhTylQ5LMmaO14o=
コマンドの下に出てきたものが、正規化済みのメール本文をハッシュ化し、且つbase64エンコードしたものの例です。これがbhの値と一致していればPassです。
あとは、署名の照合をします。あらかじめ、h通りのヘッダー情報と、DNSから取得した公開鍵をテキストファイル(ここでは "header.txt" と "key.pub")にしておきます。
$ echo "bの値" | base64 -d | openssl pkeyutl -verifyrecover -pkeyopt digest:sha256 -pubin -inkey key.pub | xxd -p
35429f9f619723fe0d3a9a47fb7bc30981ea7b6cb557a667f25de4203522
7bbc
コマンドの下に表示されたものがハッシュです。公開鍵で復号化できたので恐らく大丈夫ですが、h通りのヘッダー生情報(最後の終端文字を必ず取り除いてください。改行はCRLF)をハッシュにしてみます。
$ openssl dgst -sha256 -binary header.txt | xxd -p
35429f9f619723fe0d3a9a47fb7bc30981ea7b6cb557a667f25de4203522
7bbc
復号化したハッシュと同じものが出ました。これで非改竄が証明されました。
ちなみに、コマンドの最後にある `xxd -p` はバイナリを16進数のテキストデータに変えるコマンドです。`xxd -b` にすると2進数のテキストで表示されます。
2024-03-07 (Thu) by Canaid SK

< PREV | NEXT >