← RFC Reference

RFC 5751: S/MIME 3.2 メッセージ仕様

Standards Track Content Security Published March 2026
ELI5: TLSは電子メールの転送中を暗号化します。郵便局間で手紙を運ぶ装甲車のようなものです。しかし、各郵便局で手紙は荷卸しされ、読むことができます。S/MIMEは手紙そのものを暗号化します。適切なキーを持つ意図された受信者だけが、それを開いて読むことができます。その間のメールサーバーでさえ、中身をのぞき見ることはできません。また、手紙にデジタル的に「ロウ引き封印」をして、受信者が手紙があなたから来たこと、そして改ざんされていないことを証明できるようにします。

これが存在する理由

トランスポート層セキュリティ(TLSSTARTTLS)はホップ間のメールを保護しますが、制限があります:

S/MIMEはエンドツーエンド暗号化(受信者だけが復号できる)とデジタル署名(受信者は送信者の身元とコンテンツが改ざんされていないことを確認できる)を提供します。HTTPS保護と同じPKIからのX.509証明書を使用します。

仕組み

2つの操作

S/MIMEは標準のMIMEメッセージをCMS(暗号メッセージ構文)を使用して暗号エンベロープでラップします:

操作 機能 MIMEタイプ
署名 送信者の身元とメッセージの整合性を証明する multipart/signedまたはapplication/pkcs7-mime(不透明)
暗号化 コンテンツを暗号化して受信者だけが読むことができるようにする application/pkcs7-mime(enveloped-data)

署名のみ、暗号化のみ、または署名してから暗号化することができます(最も一般的な組み合わせ)。

メッセージに署名する

送信者は秘密鍵を使用してメッセージコンテンツ上にデジタル署名を作成します。2つの形式が存在します:

-- クリア署名メッセージ構造 --
Content-Type: multipart/signed;
  protocol="application/pkcs7-signature";
  micalg=sha-256; boundary="----sig"

------sig
Content-Type: text/plain

これが元のメッセージコンテンツです。
任意のメールクライアントで読むことができます。

------sig
Content-Type: application/pkcs7-signature
Content-Transfer-Encoding: base64

MIAGCSqGSIb3DQEHAqCAMIACAQExDzANBgl...
(base64エンコードされたCMS SignedData)
------sig--

メッセージを暗号化する

送信者は受信者の公開鍵(X.509証明書から)を使用して暗号化します。対応する受信者の秘密鍵のみが復号できます:

-- 暗号化されたメッセージ構造 --
Content-Type: application/pkcs7-mime;
  smime-type=enveloped-data;
  name=smime.p7m
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=smime.p7m

MIAGCSqGSIb3DQEHA6CAMIA...
(base64エンコードされたCMS EnvelopedData)

実際には、S/MIMEはハイブリッド暗号化を使用します:ランダム対称鍵(例:AES-128-CBC)がメッセージを暗号化し、受信者のRSA/EC公開鍵がその対称鍵を暗号化します。

主要な技術詳細

証明書要件

S/MIMEは認証局(CA)によって発行されたX.509証明書に依存します。証明書は以下を含む必要があります:

これはS/MIME導入の最大の実際的障壁です:すべての送信者が証明書を必要とし、すべての受信者が署名を検証したり暗号化された返信を送信するために送信者の公開証明書を必要とします。

アルゴリズム要件(S/MIME 3.2)

目的 必須サポート 推奨サポート
署名(ダイジェスト) SHA-256 SHA-384、SHA-512
署名(鍵) RSA DSA、ECDSA
暗号化(コンテンツ) AES-128-CBC AES-192-CBC、AES-256-CBC
鍵転送 RSA ECDH

SHA-1および3DESは後方互換性のためにまだ参照されていますが、弱いと見なされています。S/MIME 4.0はこれらの要件を大幅に更新します。

証明書検出

暗号化の場合、送信者は受信者の証明書が必要です。一般的な検出方法:

一般的な間違い

配信可能性への影響

Related RFCs