S/MIME (Secure Multipurpose Internet Mail Extensions) は RSA Data Security 社が提案する PKCS (Public Key Cryptography Standards) という暗号技術標準を利用して MIME に対してデジタル署名や暗号化を施すための1規格である。

 2大ブラウザである NetscapeCommunicator と InternetExplorer に付随するメーラが S/MIME に対応したことにより急速に広まった。日本ではその他に S/Goma (オレンジソフト)、魔法便 (NTTエレクトロニクス)、SecureMessenger (株式会社アイフォー)、AT 承認メール (アライドテレシス) などのメーラ/プラグインソフトが対応している。
 また S/MIME 対応 InternetFAX (松下電送システム) が製品化されている。

 同様に MIME に対するデジタル署名及び暗号化の規格としては MOSS (MIME Object Security Services) が RFC 1848 で規定されているが現在はほとんど利用されていない。実装としては FEAL for EUDORA PRO (NTTアドバンステクノロジ) というプラグイン製品がある。

 その他の暗号化電子メールの規格としては RFC 1421 から 1424 で規定された PEM (Privacy Enhanced Mail)、PGP (Pretty Good Privacy) を MIME 対応した PGP/MIME (PFC 2015) などがある。
 PGP では公開鍵に対する信用の輪 (web of trust) をユーザ自身が形成していく方式に対し PEM 及び S/MIME では、公開鍵の認証する信用のおける第3者機関である認証局 (Certificate Authority) が公開鍵を保証する。
 S/MIME における公開鍵の配布には認証局のデジタル署名が施された X.509 v3 公開鍵証明書が用いられる。

 S/MIME は 1995 年に RSA Data Security 社を中心としたベンダーのコンソーシアムの手により生まれた。その後 IETF の S/MIME Working Group で議論され、現在は S/MIME version 2 として RFC 2311 (S/MIME v2 のメッセージ規約)、RFC 2312 (S/MIME v2 における証明書処理の規約) の2つの RFC が標準化された。
 これらの RFC では上で紹介したように PKCS に準拠しているため、同時期に次の3つの仕様が参考文書として公開されている。
 RFC 2313 (PKCS#1, RSA 暗号化規約)、RFC 2314 (PKCS#10, 公開鍵証明書を発行要求するためのフォーマット規定)そして RFC 2315 (PKCS#7, メッセージのデジタル署名と暗号化を施すためのフォーマット規定) である。

 しかしこれらの仕様はすべて Informational RFC であるが Standard RFC ではない。
その理由として RSA は米国でのパテントが RSA Data Security 社に属しているが、S/MIME v2 は公開鍵暗号方式として RSA が必須となっている点が挙げられる。
 また S/MIME v2 では共有鍵暗号方式としては RC2, RC2/40 (以上、必須)や DES, Triple-DES(EDE3 CBC, 168bits) が利用され、ハッシュアルゴリズムとしては MD5, SHA-1 のサポートが必須となっている。

 このような背景のもと S/MIME Working Group では現在 S/MIME v3 の標準化が進められており、RSA 暗号や 40 ビットの弱い秘密鍵暗号を利用しない方式が採用され Standard RFC として公開されると言われている。
 実際 S/MIME v3 では Diffie-Hellman/DSS を暗号化、署名アルゴリズムとして SHA-1 をセキュアハッシュ関数として採用する方向で標準化が進められている。


 RFC 2315 (PKCS#7) では異なる 6 つのコンテンツタイプを規定しているが、S/MIME で利用されるのは SignedData (デジタル署名)、EnvelopedData (暗号化)、SignedAndEnvelopedData (デジタル署名&暗号化) の3つである。
 RFC 2311 で新たに application/pkcs7-mime, application/pkcs7-signature, application/pkcs10 の3つの MIME タイプが導入された。

・application/pkcs7-mime は添付ファイルの拡張子を .p7m にすることで SignedData 及び EnvelopedData タイプの PKCS#7 オブジェクトを送信することができる。
・application/pkcs7-signature は multipart/signed MIME タイプ (RFC 1847) に入れ子で SignedData タイプの PKCS#7 オブジェクトを組み込む場合に用いられ、拡張子は .p7s となる。
・application/pkcs10 は RFC 2312 に基づいた証明書発行要求フォーマットである PKCS#10 オブジェクトを送信する際に用いられる。その返答には application/pkcs7-mime で拡張子を .p7c にしたものが用いられ、公開鍵証明書や CRL を含んだ SignedData を送信される。

図 6 MIME タイプ一覧

MIME タイプ
拡張子
application/pkcs7-mime
signedData, envelpedData
.p7m
signedData(certs-only)
.p7c
application/pkcs7-signature
.p7s
application/pkcs10
.p10