S/MIME
公開鍵暗号を使って、電子メールの暗号化とデジタル署名を行うための規格。送信者は自分の秘密鍵で署名し、受信者は送信者の公開鍵で署名を検証する。
イマシルちゃんの解説
S/MIMEは、メールに「封」と「ハンコ」を付ける仕組みなんだ。
封(暗号化)をすれば、相手以外には中身を読まれない。
ハンコ(署名)を押せば、本当に自分が送ったこと、途中で書き換えられていないことを証明できる。
どの鍵で封をして、どの鍵でハンコを押すのか、使い分けがポイントだよ!
より深い解説
定義
S/MIME(Secure/Multipurpose Internet Mail Extensions)は、RFC 8551などで定められた、電子メールの暗号化とデジタル署名のための規格である。MIMEの形式で、暗号化したデータや署名をメールに含める。公開鍵の正しさは、認証局が発行するデジタル証明書で保証する。
鍵の使い方
| 目的 | 送信者が使う鍵 | 受信者が使う鍵 |
|---|---|---|
| デジタル署名 | 送信者の秘密鍵で署名する | 送信者の公開鍵で検証する |
| 暗号化 | 受信者の公開鍵で暗号化する | 受信者の秘密鍵で復号する |
署名は「本人しか持たない秘密鍵で作り、誰でも検証できる」、暗号化は「誰でも暗号化できるが、本人の秘密鍵でしか復号できない」と考えると、使い分けを間違えにくい。
署名と暗号化の流れ
署名
- 送信者は、メール本文のハッシュ値を計算し、自分の秘密鍵で署名を作る
- 署名と送信者の証明書を、メールに付けて送る
- 受信者は、証明書から送信者の公開鍵を取り出して署名を検証し、ハッシュ値と比べる
暗号化
実際には、本文全体を公開鍵暗号で暗号化するのではなく、ハイブリッド暗号方式を使う。
- 送信者は、ランダムな共通鍵を作り、本文を共通鍵暗号で暗号化する
- その共通鍵を、受信者の公開鍵で暗号化する
- 暗号化した本文と、暗号化した共通鍵を送る
- 受信者は、自分の秘密鍵で共通鍵を復号し、その共通鍵で本文を復号する
S/MIMEで実現できること
| 機能 | 実現方法 |
|---|---|
| 機密性(盗聴の防止) | 暗号化 |
| 完全性(改ざんの検出) | デジタル署名 |
| 送信者の認証 | デジタル署名と証明書 |
| 否認防止 | デジタル署名 |
送信ドメイン認証との違い
S/MIMEは、メールの送信から受信まで(エンドツーエンド)を保護する。一方、メールサーバ間の通信をSTARTTLSで暗号化しても、各サーバの上ではメールは平文で保存される。
PGPとの違い
同じくメールの暗号化と署名を行う技術にPGP(OpenPGP)がある。S/MIMEが認証局を頂点とする階層的な信頼モデル(PKI)を使うのに対し、PGPは利用者同士が互いの公開鍵に署名し合う「信頼の輪(web of trust)」を基本とする。