最終更新日: 2003年 1月10日
S/MIME (Secure/MIME) は、証明書を利用して電子メールに暗号化とデジタル署名のセキュリティを提供します。S/MIME は、既存の技術である MIME を利用しているため、既存のメールサーバ ー(MTA) で動作します。S/MIME は、電子メールに限らず、MIME を扱える他のプロトコル(HTTP など)でも利用することができます。
S/MIME の初期版である S/MIME v2 は、米国の RSA Security 社によって提唱され、RFC2311, RFC2312 として公表されました。S/MIME v2 は使用できるアルゴリズムが限られていたため、IETF によってより汎用性を持たせた S/MIME v3 が策定され、RFC2632(English), RFC2633(English) として公表されました。
S/MIME を利用すると、メールの暗号化(暗号メール)とデジタル署名の付与(署名メール)が実現できます。また、証明書の送付にも利用できます。
以下に、S/MIME を利用した暗号メールと署名メールの利用イメージを以下に示します(図 7-6)。

図 7-6 S/MIME の利用イメージ
暗号メールにおいては、送信者は受信者の証明書を使ってメールを暗号化し、受信者は自分の秘密鍵でメールを復号します。署名メールでは、送信者は自分の秘密鍵でメールに署名をつけ、受信者は送信者の証明書で署名の検証を行います。署名メールは、通常では送信者はメールに自分の証明書を付与する形で送信します。
また、RFC2634 では、拡張 S/MIME として、様々な利用方法が定められています。
S/MIME は、以下のセキュリティ機能を提供します。
(1) 認証 (Authentication)
X.509証明書とデジタル署名を利用し、メールの送信者とメッセージの認証を行います。
(2) 守秘性 (Confidentiality)
メールを暗号化して送信することで、第三者への情報の漏洩を防ぎます。暗号化には送信者が生成した共通鍵が使用されます。
(3) 否認防止 (Non Repudiation)
X.509 証明書を用いたデジタル署名により、送信者がメールを送信した事実を否認することを防止します。
(4) 完全性(Integrity)
X.509 証明書を用いたデジタル署名により、添付ファイルを含むメール本文の内容が、送信時と相違ないことが確認できます。
S/MIME は、暗号化や署名に CMS (Cryptographic Message Syntax) とよばれるフォーマットを利用します。CMS は暗号と署名を扱うデータフォーマットであり、PKCS #7 を拡張したものです。
S/MIME においては CMS を用いてメール本文の暗号化や署名を行い、MIME 形式で添付ファイルとして送信します(図 7-7)。

図 7-7 S/MIME の構造
CMS は PKCS#7 を拡張して作られた暗号と署名を扱うデータフォーマットであり、S/MIME 以外にも様々な PKI アプリケーションに実装されています。CMS は、データ型 (ContentType) とデータ (Content) の組み合わせ (ContentInfo) から構成されます(表 7-4)。content(データ)には他の ContentInfo(データ情報)を入れ子にすることができます。CMS の仕様は、RFC2630 で定義されています。
表 7-4 CMS のフォーマット
|
領域名 |
説明 |
|
|
ContentInfo データ情報 |
CMS のデータ全体を表します。 |
|
|
|
contentType データ型 |
content(データ)の型です。OID で指定します。 |
|
content データ |
データ型で定義したデータです。 |
|
content(データ)のフォーマットは、contentType(データ型)によって異なります。S/MIME において使用されるデータ型を以下に示します(表 7-5)。
表 7-5 CMS のデータ型
|
種別 |
説明 |
|
Data |
アスキー文字列などの基本的なデータ型を表します。 |
|
Signed-data |
署名つきのデータを表します。 |
|
Enveloped-data |
暗号化されたデータを格納するデジタル封筒を表します。 |
以下に、Signed-data 型と Enveloped-data 型のフォーマットの概要を示します(表 7-6、表 7-7)。
表 7-6 Signed-data 型のフォーマット
|
領域名 |
説明 |
||
|
version バージョン |
CMS のバージョンです。 |
||
|
digestAlgorithm ダイジェストアルゴリズム |
ダイジェストアルゴリズムの識別子です。OID で指定します。 |
||
|
encapContentInfo 対象データ |
署名の対象となるデータです。 |
||
|
|
eContentType データ型 |
署名の対象となるデータの型を表します。 |
|
|
eContent データ |
署名の対象となるデータそのものを表します。 |
||
|
certificates 証明書のリスト |
署名の検証に必要な証明書のリストです。 |
||
|
crls CRL のリスト |
証明書の有効性の確認に必要な CRL のリストです。 |
||
|
signerInfos 署名者情報 |
署名者に関する情報です。複数指定可能です。 |
||
|
|
version バージョン |
CMS のバージョンです。 |
|
|
sid 署名者識別子 |
署名者を識別するための情報です。 issureAndSerialNumber か subjectKeyIdentifier のどちらかを使用します。 |
||
|
digestAlgorithm ダイジェストアルゴリズム |
署名に使用するダイジェストアルゴリズムの識別子です。OIDで指定します。 |
||
|
signedAttrs 署名アトリビュート |
署名されたアトリビュートの集合です。省略可能です。 |
||
|
signatureAlgorithm 署名アルゴリズム |
署名に使用するアルゴリズムです。OID で指定します。 |
||
|
signature 署名 |
署名者によって生成された署名です。 |
||
|
unsignedAttrs 非署名アトリビュート |
署名されていないアトリビュートの集合です。省略可能です。 |
||
表 7-7 Enveloped-data 型のフォーマット
|
領域名 |
説明 |
|
|
version バージョン |
CMS のバージョンです。 |
|
|
originatorInfo 発信者情報 |
メッセージの発信者に関する情報です。 省略可能です。 |
|
|
|
certs 証明書のリスト |
証明書のリストが含まれます。 |
|
crls CRLのリスト |
CRL のリストが含まれます。 |
|
|
recipientInfos 受信者情報 |
暗号文の復号に必要な情報(暗号化された共通鍵)が含まれます。複数指定可能です。 |
|
|
encryptedContentInfo 暗号文情報 |
暗号化されたデータの情報です。 |
|
|
|
contentType データ型 |
暗号化されたデータの型です。 |
|
contentEncryptionAlgorithm 暗号化アルゴリズム |
暗号化に使用されたアルゴリズムです。OID で指定します。 |
|
|
encryptedContent 暗号文 |
暗号化されたデータです。 |
|
|
unprotectedAttrs 非保護アトリビュート |
暗号化されていないアトリビュートの集合です。 省略可能です。 |
|
S/MIME は、構造別に以下の種類に分類できます(表 7-8)。
表 7-8 S/MIME の種別
|
目的 |
CMSのデータ型 |
MIMEタイプ |
拡張子 |
|
署名 |
Signed-data |
application/pkcs7-mime |
.p7m |
|
multipart/signed application/pkcs7-signature |
.p7s |
||
|
暗号化 |
Enveloped-data |
application/pkcs7-mime |
.p7m |
|
証明書の送付 |
Signed-data |
application/pkcs7-mime |
.p7c |
署名をつけたメールを暗号化する場合は、署名を付与したデータをさらに暗号化するか、暗号化したデータに対して署名を付与します。
S/MIME メールの生成手順は、以下の通りとなります。
(1) 対象データを正規化します。
(2) 署名もしくは暗号化を行い、CMS フォーマットに格納します。
(3) CMS を Base64 でエンコードし、MIME メッセージを生成します。
使用するコンピュータによって、テキストデータの表現方式は異なります。例えば、Windows と UNIX では改行コードの扱いが違います。テキストデータにそのまま署名を施すと、文書が改ざんされていなくとも、このような違いが原因で署名の検証が失敗することがあります。そこで S/MIME では、署名や暗号化を行う前に、データの表現方法を統一させる必要があります。これを正規化といいます。
以下に、デジタル署名付きのメール(署名メール)の生成手順を示します(図 7-8)。

図 7-8 署名メールの生成
(1) メール本文に対して正規化を行います。
(2) 送信者の秘密鍵を使い、デジタル署名を生成します。
(3) メール本文とデジタル署名を CMS の Signed-data 型でエンコードします。署名検証のために証明書を付与することもできます。
(4) CMS 署名メッセージを MIME エンコードします。
以下に署名メールの例を示します(表 7-9)。メールヘッダは省略しています。
表 7-9 署名メールの例
|
メール |
説明 |
|
MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="smime.p7m" Content-Type: application/pkcs7-mime; smime-type=signed-data; name="smime.p7m"
|
MIME ヘッダを表します。 |
|
MIAGCSqGSIb3DQEHAqCAMIACzAJBg UrDgMCGgUAMIAGCSqGSIb3DQEHAa ... fblfMtMnpM8AAAAAAAA= |
メール本文とデジタル署名が、CMSフォーマットで含まれます。 |
署名メールの本文は、署名と一緒に CMS でエンコードされています。そのため、S/MIME に対応していないメーラ(MUA)では、署名の検証だけでなくメール本文を読むことすらできません。代わりにクリアテキスト署名を用いることにより、S/MIME に対応していないメーラ (MUA)であっても、メール本文は読むことができます(図 7-9)。

図 7-9 署名メールの生成(クリアテキスト署名)
(1) メール本文に対して正規化を行います。
(2) 送信者の秘密鍵を使い、デジタル署名を生成します。
(3) デジタル署名を CMS の Signed-data 型でエンコードします。署名検証のために証明書を付与することもできます。
(4) CMS 署名メッセージとメール本文をマルチパート形式で MIME エンコードします。
以下にクリアテキスト署名の例を示します(表 7-10)。メールヘッダは省略しています。
表 7-10 署名メールの例(クリアテキスト署名)
|
メール |
説明 |
|
Content-Type: multipart/signed; protocol="application/x-pkcs7-signature"; micalg=SHA1; boundary="----=_NextPart "
This is a multi-part message in MIME format.
|
MIME ヘッダを表します。 |
|
------=_NextPart Content-Type: text/plain; charset="iso-2022-jp" Content-Transfer-Encoding: 7bit
これはクリアテキスト署名のテストです。
|
メール本文が Plain Text で記述されます。 |
|
------=_NextPart Content-Type: application/pkcs7-signature; name="smime.p7s" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="smime.p7s"
MIAGCSqGSIb3DQEHAqCAM・・・ 9+Jws4zQlmq/iZSueSfAAAAAAAAA==
------=_NextPart |
メール本文に対するデジタル署名が、CMS フォーマットで含まれます。 |
メール本文は text/plain 形式となるため、S/MIME に対応していないメーラでもメール本文を読むことができます。
以下に暗号メールの生成手順を示します(図 7-10)。

図 7-10 暗号メールの生成
(1) メール本文に対して正規化を行います。
(2) メール本文を暗号化するための共通鍵を生成します。
(3) 生成した共通鍵を使い、メール本文を暗号化します。
(4) 受信者と送信者の証明書(公開鍵)を使い、生成した共通鍵をそれぞれ暗号化します。
(5) メール本文とそれぞれの公開鍵で暗号化した共通鍵を、CMS の Enveloped-data 形式でエンコードします。
(6) CMS 封筒メッセージをMIMEエンコードします。
送信するメッセージが、受信者だけでなく送信者も復号できるように、共通鍵は送信者と受信者のそれぞれの証明書で暗号化されます。
以下に暗号メールの例を示します(表 7-11)。メールヘッダは省略しています。
表 7-11 暗号メールの例
|
メール |
説明 |
|
MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="smime.p7m" Content-Type: application/pkcs7-mime; smime-type=enveloped-data; name="smime.p7m"
|
MIMEヘッダを表します。 |
|
MIIEDwYJKoZIhvcNAQcDoIIEADCCA /wCAQAxggGGMIHAAgEAMGowYjEL ... 8dJ5FG4b13w= |
メール本文が暗号化され、CMS フォーマットで含まれています。 |
S/MIME において利用されるアルゴリズムを次に示します(表 7-12)。
表 7-12 S/MIME において利用されるアルゴリズム
|
種別 |
S/MIMEバージョン2 |
S/MIMEバージョン3 |
|
規定RFC |
RFC2311 (Informational) |
RFC2633 (Standards Track) |
|
メッセージ暗号化 (共通鍵暗号) |
RC2/40 (MUST)(受信者のみ) RC2/40 (SHOULD)(送信者のみ) Triple DES (SHOULD) |
Triple DES (MUST) RC2/40 (SHOULD)(受信者のみ) |
|
鍵の暗号化 (公開鍵暗号) |
RSA (MUST) |
DH (MUST) RSA (SHOULD) |
|
デジタル署名 (公開鍵暗号) |
RSA (MUST) |
DSS (MUST) RSA (SHOULD) |
|
ダイジェスト (ハッシュ関数) |
SHA-1 (MUST) MD5 (MUST) ※SHA-1 の使用を推奨 |
SHA-1 (MUST) MD5 (SHOULD)(受信者のみ) |
Outlook Express, Netscape, WinBiff 等のメールクライアント(MUA)が S/MIME に対応しています。現在ではまだ、S/MIMEv3 に対応した製品は少なく、S/MIME v2 が主流となっています。以下に、Outlook Express での S/MIME メールの利用例を示します(図 7-11、図 7-12)。

図 7-11 S/MIME メールの送信例
メールクライアントに証明書をインポートしていれば、メール作成時に「署名」や「暗号化」のアイコンをクリックするだけで、S/MIME メールが送信できます。

図 7-12 S/MIME メールの受信例
S/MIME メールを受信すると、メールが安全であることを示すメッセージが表示されます。
前のページ 目次 次のページ Copyright © 2002 Information-technology Promotion Agency, Japan. All rights reserved.