Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Eメールはまだまだ面白い
Search
Kei Onimaru
August 20, 2020
Technology
0
160
Eメールはまだまだ面白い
メールは時代遅れでもダサくもない!
SPF, DKIM, DMARC, そして BIMI について
Kei Onimaru
August 20, 2020
Tweet
Share
More Decks by Kei Onimaru
See All by Kei Onimaru
IPアドレスのおねだん
keioni
0
3.4k
Other Decks in Technology
See All in Technology
20240522 - 躍遷創作理念 @ PicCollage Workshop
dpys
0
200
組織に自動テストを書く文化を根付かせる戦略(2024冬版) / Building Automated Test Culture 2024 Winter Edition
twada
PRO
21
6.3k
OCI技術資料 : ファイル・ストレージ 概要
ocise
3
11k
【re:Invent 2024 アプデ】 Prompt Routing の紹介
champ
1
290
TypeScript開発にモジュラーモノリスを持ち込む
sansantech
PRO
3
770
Working as a Server-side Engineer at LY Corporation
lycorp_recruit_jp
0
460
AWS re:Invent 2024 ふりかえり勉強会
yhana
0
630
PHPerのための計算量入門/Complexity101 for PHPer
hanhan1978
6
1.3k
組み込みアプリパフォーマンス格闘記 検索画面編
wataruhigasi
1
190
成果を出しながら成長する、アウトプット駆動のキャッチアップ術 / Output-driven catch-up techniques to grow while producing results
aiandrox
0
410
Fanstaの1年を大解剖! 一人SREはどこまでできるのか!?
syossan27
2
350
最近のSfM手法まとめ - COLMAP / GLOMAPを中心に -
kwchrk
8
1.5k
Featured
See All Featured
Why You Should Never Use an ORM
jnunemaker
PRO
54
9.1k
Making Projects Easy
brettharned
116
6k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
44
9.3k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
8
1.2k
Side Projects
sachag
452
42k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
33
2.7k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
230
52k
Art, The Web, and Tiny UX
lynnandtonic
298
20k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.2k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
38
1.9k
Designing for humans not robots
tammielis
250
25k
Practical Orchestrator
shlominoach
186
10k
Transcript
Eメールはまだまだ⾯⽩い Kei Onimaru <
[email protected]
> Twitter: @keionim
もくじ • Eメールはオワコンなのか? • メールサーバはVPSと相性がいい件 • SPF, DKIM, DMARC の処理の流れ
• BIMI の処理の流れ、現状、今後 • まとめ • (おまけ)インターネット老人会のみなさまへ 2
はじめに • ハウツーの話はしません、技術自体の話をします • メールサーバを建てる方法はググるとかなり出てきます • さくらのVPS部分のことがあれば書きたかったですが、なかったです • DNSのレコードを設定する画面、ちょっと癖がある気が •
ただ、せっかくなので後でQiitaに書こうかと思ってます • IPv6を使って構築したという情報がないので……! 3
Eメールはオワコンなのか • オワコンと思う人は多い、らしい • ずっと前からスパムが多く、印象がよくない • 最近はフィッシングで使われるので印象は劇的に悪化 • 若い技術者からは「脆弱で、時代遅れな、ダサい技術」と思われている •
しかしオワコンではない • 置き換えるものが今のところ見当たらない • 組織間でやりとりするにはメールしか方法がない場合も • 一般論として、新しいものを作るより現状を改善していく方が楽(なことが多い) (IPv4……NAT……CGN……) • 欠点を埋めるための仕様が今も策定進行中 4
だからメールサーバとあそぼう? • オワコンの技術を知ろうとするのはモチベが沸かない • もちろん、そう思わない人もいると思います • でも未来のある技術だったらモチベが沸くよね? • だったら、メールサーバを建てて遊びながら勉強だ! •
その環境は……? 5
メールサーバとVPSは相性いいよ! • よりよいメールサーバの要件 • IPアドレスが固定であること • IPアドレスの逆引きができること • 24時間365日稼働すること →
クラウドでも可能、でもVPSなら何も考えなくても要件を満たす • さくらのVPSだと…… • VPSを契約するとDNSのゾーンを追加費用なしで使える → 必要なDNSレコードもばっちり設定できる( ^o^)ノ 6
SPF, DKIM 7
SPF (Sender Policy Framework) • メールを送信するサーバを限定している、と受信側に伝える • 基本的な技術で歴史が長く、普及率も高い • 2019年1月段階で87.6%というデータも
• 独自ドメイン名を持っている人はすぐ導入できる • レンタルサーバでもできる • さくらならこちら https://help.sakura.ad.jp/206206521/ • ただし設定をミスすると判定に失敗してスパム扱いされる可能性が • DMARCをあわせて設定しておくとミスに気付きやすい 8
SPFの設定例 • DNSサーバに以下のようなレコードを追加する example1.com IN TXT "v=spf1 ip6:2001:db8:11:beaf:198:51:100:53 ip4:198.51.100.53 ~all”
• 以上 • すごくシンプル、すごく簡単 • 指定の方法は他にもあり、運用よっては複雑になることも 9
DKIM (DomainKeys Identified Mail) • 送信するメールに電子署名をして本人の証明をする • 「ディーキム」と発音する(正式なものかどうかは不明) • 送信するサーバで署名
• 電子署名用の鍵ペア(秘密鍵、公開鍵)を作って、公開鍵をDNSに記載 • 送信するメールに秘密鍵を使って電子署名を施す • 受信するサーバで検証 • 検証するための公開鍵をDNSから取得する • その鍵を使って電子署名を検証し、真正性を確認する 10
DKIMの⻑所・短所 • なりすまし防止策として、かなり強力 • 署名用の秘密鍵がなければ、なりすましはできない • ただし設定に失敗していると、なりすましを疑われる可能性が低い • メールサーバに専用のソフトウェアを導入する必要がある •
レンタルサーバでは不可能(なことが多いはず) • レンタルサーバ自体が対応して機能を提供することはできるかも 11
DKIMの⾒本 (送信側) • 事前に、DNSサーバに以下のようなレコードを設定する s20200818._domainkey.example1.com IN TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDApQlxn7nTC9J2oO9BsEZi8YhFbwpzlOIK++73IrH7bqw3qEmXOlHtIdU
GVtaIV4yVCQoSKJ+0tsLnniL8wUB2POrtBDW99HSFg8D5txEnpRe0JfzRqjGvIyWxaIByL+UDRxikXPA1WcTfpqaq+THv9lqC Dku49gSjH+sNQ8qrNQIDAQAB” (p が検証に使う公開鍵) • メール送信時に、署名するソフトウェアが以下のようなヘッダを追加する DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=example.com; s=s20200818; t=1597738195; bh=vsw5ndfzuVGo/Fn9b23m+399ZsWK/YC0pZEdcs8lxvI=; h=From:Subject:Date:To:From; b=tm68BF7O8b+4RYYHSzSGKUXW3VoR4Ex9tIH7oytXTKA942pJ+kT0DY91TVHQFW5DZ olfSeUrGTRYNRIsjGhbnuc6wq2y8POrdjPBGwEhtYn2mHdWYxKbt9ohDY5ioBvf+vI stz3kkZLz6Y+QX9B9jZwwzIs0iAm0dg43zFYmDy4= (黄色の部分が署名対象のヘッダで、この内容と本文を公開鍵で検証する) 12
DKIMの⾒本 (受信側) • 受信したメールに署名のヘッダがあった場合、公開鍵を取得する DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=example1.com; s=s20200818;
t=1597738195; bh=vsw5ndfzuVGo/Fn9b23m+399ZsWK/YC0pZEdcs8lxvI=; h=From:Subject:Date:To:From; b=tm68BF7O8b+4RYYHSzSGKUXW3VoR4Ex9tIH7oytXTKA942pJ+kT0DY91TVHQFW5DZ olfSeUrGTRYNRIsjGhbnuc6wq2y8POrdjPBGwEhtYn2mHdWYxKbt9ohDY5ioBvf+vI stz3kkZLz6Y+QX9B9jZwwzIs0iAm0dg43zFYmDy4= • 署名ヘッダの d と s の値をもとに、DNSサーバのTXTレコードから得られる これを手動でやってみると、以下のようになる dig s20200818._domainkey.example1.com txt • この公開鍵をつかって検証する 13
DMARC 14
DMARC (Domain-based Message Authentication, Reporting, and Conformance) • SPF, DKIMでの認証結果の扱い方を受信側に伝える
• たとえば • SPFの結果は使わず、DKIMの結果だけで判定してほしい • 判定に失敗したときは受信を拒否(reject)してほしい • などなど • 受信側がメールをどう扱ったか、送信側に伝えてもらう • 自分が送ったメールの判定の集計情報や、失敗したものはどのような ものかを通知してほしい旨と、そのメールアドレスを指定する 15
DMARCの⾒本 • 送信側で設定するDNSレコード _dmarc.example1.com IN TXT “v=DMARC1; p=quarantine; rua=mailto:
[email protected]
; ruf=mailto:
[email protected]
”
• p で認証に失敗したメールの扱いを設定する • ここではquarantine=隔離して扱ってほしいと指示している • 他にnone(何もしない)やreject(受信拒否)がある • rua, ruf で集計情報や失敗報告の送信先を設定する • スキームの設定(mailto:)が必要だが、今のところメールアドレスのみ 16
DMARCの⾒本 (cont.) • 受信サーバが検証結果を記録したメールヘッダ Authentication-Results: mx.google.com; dkim=pass
[email protected]
header.s=s20200818 header.b=tm68BF7O;
spf=pass (google.com: domain of
[email protected]
designates 2001:db8:11:beaf:198:51:100:53 as permitted sender)
[email protected]
; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=example1.com • SPF,DKIMで認証成功し、DMARCの判定でも成功した、という意味 • p/sp はDNSで指示された内容を指す 17
DMARCのレポート機能 • 集計情報は、標準では1日1回送られてくる • 受信サーバから各々送られてくる • 仮に、ある日に送信したメールの宛先のドメインが1万個あり、受信側がすべてDMARCに 対応していた場合、翌日1万通のメールが届く • XML形式
→ 機械処理が前提 • 使い方 • SPFやDKIMの設定確認、見直し • 判定失敗の報告が多い場合、設定ミスや設定漏れがある可能性を考える • なりすましの発見 • 報告の割合が増えた場合、自分のなりすましが表れた可能性がある 18
BIMI 19
BIMI (Brand Indicators for Message Identification) • メールのアイコン画像(ブランドロゴ)の表示を指示する • 紛らわしいドメイン名を使ったなりすましへの対策
• 商標登録された画像を用いることを想定 • DMARCで判定が成功しなければ処理しない • なりすましでないことはサーバで確認済み • 利用者に、なりすましでないことを分かりやすくすることが目的 • 原理はEV証明書と全く同じ • CAは、画像が商標登録されているか、などを確認して電子証明書を発行する • 証明書が正当に使われている時だけユーザに表示 • “Bih-mee” と発音する(日本語だとビーミー?) 20
BIMIの設定例 • 送信サーバが加えるメールヘッダ BIMI-Selector: v=BIMI1; s=s20200818 • セレクタ s20200818 のBIMIを表示してほしいという指示
21
BIMIの設定例 (cont.) • 送信サーバ側で設定するDNSレコード(その1) s20200818._bimi.example1.com IN TXT "v=BIMI1; l=https://www.example1.com/logo.svg; a=https://www.example1.com/logo-
cert.pem” • セレクタ s20200818 のBIMIの画像は l パラメータのURLにあり、その 証明書は a パラメータのURLにある 22
BIMIの設定例 (cont.) • 送信サーバ側で設定するDNSレコード(その2) s20200818._bimi.example1.com IN TXT "v=BIMI1; l=https://www.example1.com/logo.svg” •
a パラメータ(証明書)がないバージョン • 現時点では証明書はオプションだけど、最終的には必須になりそう 23
BIMIの挙動 • 受信サーバのBIMIの扱い • DKIMと似ている • メールヘッダのセレクタが示すTXTレコードを取得 • 指定された画像を読み込む •
証明書が指定されている場合、証明書で画像の真正性を確認する • 結果をメールヘッダに追加する • BIMI-Location にTXTレコードのURLをそのまま設定 • BIMI-Indicator に読み込んだ画像をbase64エンコードして埋め込む 24
BIMIのユーザへの⾒え⽅ 25
試すハードル⾼い! • 画像を用意するのが難しい • SVG、かつ Tiny 1.2 Portable/Secure プロファイル(新規格) •
元となる Tiny 1.2 対応のソフトウェアが少ない • Illustrator は対応、Inkscape は非対応 • 出力後、Tiny 1.2 P/S へ変更するため手で書き換える必要がある • マニュアルには Illustrator での作り方しか書いていない • 他のソフトウェアで出力したものも、マニュアル通りにできるのかは不明 • 動作確認が難しい • 対応しているサービスが少ない • Yahoo! Mail (米) でテスト中 • Googleが実証実験開始(2020/7/22)、ただし証明書必須 26
BIMIの動向 • 規格の正式版に向けて作業中 • 最新の版は2020年7月30日の第2版 • なのでここに書いたものがすぐobsoleteになる可能性も…… • 証明書発行のガイドラインも制定中 •
既存のEV証明書より発行要件を厳格化・明文化する、など • 今のところ設定しても検証は困難 • ただ概要を知っておくだけでも有益かと 27
まとめ Eメールの未来 28
まだまだ • Eメールはまだまだ使われる • 信頼を取り戻すための取り組みが続いている • Eメールを置き換えるものが今のところ見当たらないし • Eメールはまだまだ楽しいよ! •
いまでも新しいことが追加されている • 枯れた技術の組み合わせではあるのですが…… • もっと(orまた)触ってみませんか? その価値はありますよ! 29
参考資料 • SPF, DKIMなどの仕様の解説 • なりすまし対策ポータル ナリタイ https://www.naritai.jp/ • 送信ドメイン認証(SPF/DKIM/DMARC)の仕組みと、なりすまし
メール対策への活用法を徹底解説 – IIJエンタープライズITコラム https://ent.iij.ad.jp/articles/172/ 30
参考資料 (BIMI) • WGのサイト • BIMI: AuthIndicators Working Group https://bimigroup.org/
• 規格書(ドラフト版) • 基本設計書 Brand Indicators for Message Identification (BIMI) https://datatracker.ietf.org/doc/draft-blank-ietf-bimi/ • 受信側の実装ガイドライン Receivers Guidance for Implementing Branded Indicators for Message Identification (BIMI) https://datatracker.ietf.org/doc/draft-brotman-ietf-bimi-guidance/ 31
おまけ 32
んん……? メールヘッダに……画像……? なんだかデジャヴが…… 33
X-Face! 34
X-Faceとは • 前世紀に登場した、48x48のモノクロ画像をメールヘッダに埋め込む手法 X-Face: #0cNb<$ep84N|?4"q?{DwR3a5gYAZIl#e%qPNgeZB"yv^74xPm(¥,sh.cGj38vYXq@p;r*n *fo1eyh&GWWhumq5sQVF/->tb+NP8mw&w$pT."nrPBsYLM{3DVX)16M|7er,VG+178cHW8OvuR+tlx -%@+^TK`1GRF- Q#yMIKO|O{:LUwArJ@D{)>[b)=cC+J^OwKpe|+NA)j.rol$@,#<C@H[F[w • BIMIはその点で、X-Faceの進化版といえる()
35 引用元: (作者: 平田泰行さん) https://www.wdic.org/w/WDIC/X-Face
アバター埋め込みたい…… • プライベートでもアバター使いたくないですか? • BIMI本来の目的とは別に、単にアバター表示に使いたい • ユーザに見せるとき、はっきりと分かることが大事 • Twitterのバッジとは逆で、証明書のないときに付ける •
BIMIとは趣旨が違うので、形式が同じで名前の違うヘッダを付ける • BIMIと同じコードをそのまま流用できるので実装コストは低いはず • BIMIに触れて同じことを思う人が増えたら、道が開かれないかな • ……という夢想をしております( ^o^)ノ 36