前のページ 目次 次のページ

最終更新日: 2003年 1月10日


7.2  S/MIME

7.2.1  概要

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 として、様々な利用方法が定められています。

7.2.2  機能

S/MIME は、以下のセキュリティ機能を提供します。

(1)  認証 (Authentication)

X.509証明書とデジタル署名を利用し、メールの送信者とメッセージの認証を行います。

(2)  守秘性 (Confidentiality)

メールを暗号化して送信することで、第三者への情報の漏洩を防ぎます。暗号化には送信者が生成した共通鍵が使用されます。

(3)  否認防止 (Non Repudiation)

X.509 証明書を用いたデジタル署名により、送信者がメールを送信した事実を否認することを防止します。

(4)  完全性(Integrity)

X.509 証明書を用いたデジタル署名により、添付ファイルを含むメール本文の内容が、送信時と相違ないことが確認できます。

7.2.3  構造

S/MIME は、暗号化や署名に CMS (Cryptographic Message Syntax) とよばれるフォーマットを利用します。CMS は暗号と署名を扱うデータフォーマットであり、PKCS #7 を拡張したものです。

S/MIME においては CMS を用いてメール本文の暗号化や署名を行い、MIME 形式で添付ファイルとして送信します(図 7-7)。

図 7-7 S/MIME の構造

7.2.3.1  CMS

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

非保護アトリビュート

暗号化されていないアトリビュートの集合です。

省略可能です。

7.2.3.2  種類

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

署名をつけたメールを暗号化する場合は、署名を付与したデータをさらに暗号化するか、暗号化したデータに対して署名を付与します。

7.2.4  シーケンス

S/MIME メールの生成手順は、以下の通りとなります。

(1)  対象データを正規化します。

(2)  署名もしくは暗号化を行い、CMS フォーマットに格納します。

(3)  CMS を Base64 でエンコードし、MIME メッセージを生成します。

7.2.4.1  正規化

使用するコンピュータによって、テキストデータの表現方式は異なります。例えば、Windows と UNIX では改行コードの扱いが違います。テキストデータにそのまま署名を施すと、文書が改ざんされていなくとも、このような違いが原因で署名の検証が失敗することがあります。そこで S/MIME では、署名や暗号化を行う前に、データの表現方法を統一させる必要があります。これを正規化といいます。

7.2.4.2  デジタル署名

以下に、デジタル署名付きのメール(署名メール)の生成手順を示します(図 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.2.4.3  暗号メール

以下に暗号メールの生成手順を示します(図 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 フォーマットで含まれています。

7.2.5  アルゴリズム

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)(受信者のみ)

7.2.6  実装

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.