次の方法で共有


SignedCms メッセージ

CMS/PKCS #7 は、メッセージにデジタル署名する SignedCms クラスを提供します。

メッセージのデジタル署名では、エンティティの認証およびデータ整合性と呼ばれるセキュリティ サービスを適用することにより、メッセージを保護します。エンティティの認証は、メッセージの作成者または送信者であると主張するエンティティが実際にそのエンティティである確率を高めます。エンティティは、人、ソフトウェア アプリケーション、または一意の ID を持つその他の任意のソースです。

データ整合性は、メッセージ自体が削除や複製を含むどのような方法によっても変更されていない確率を高めます。

これらのセキュリティ サービスのいずれかまたは両方をメッセージに適用するには、SignedCms クラスを使用します。メッセージの送信者や作成者の正当性について、あるいはメッセージが保存時、伝送時、またはその両方において変更されていないことを高い確率で確認することが目的の場合は、このクラスを使用します。

S/MIME セキュリティ標準を使用する電子メールは、SignedCms クラスを使用してセキュリティを提供できる例の 1 つです。S/MIME は、他のセキュリティ サービスに加えて、電子メール メッセージの送信者の正当性を確認する機能と、メッセージ自体の整合性の確認に関する仕様を規定しています。

1 つのメッセージに複数の署名を適用できます。この機能を必要とする可能性があるアプリケーションの例としては、ドキュメントの作成や読み取りを行うアプリケーションがあります。CMS/PKCS #7 による複数の署名をサポートすることにより、アプリケーションでは複数のドキュメント作成者が作成に参加した文書にそれぞれ署名できるようになります。また、ドキュメントの閲覧者は、作成者であると主張する人物がドキュメントの実際の作成者であること、署名後にドキュメントが変更されていないことを確認できます。

メッセージの署名の計算には、SignedCms クラスの ComputeSignature メソッドのいずれかを使用します。System.Security.Cryptography.Pkcs.SignedCms.ComputeSignature(System.Security.Cryptography.Pkcs.CmsSigner) メソッドでは、アプリケーションは、CmsSigner オブジェクトを構成して、最初にメッセージ署名者の特性をセットアップする必要があります。CmsSigner クラスは、署名者の X509 証明書を他のプロパティと共に格納します。System.Security.Cryptography.Pkcs.SignedCms.ComputeSignature メソッドでは、ユーザーが適切な署名者の証明書を選択できるダイアログ ボックスが表示されます。

署名者の証明書チェーンは、全部または一部を System.Security.Cryptography.Pkcs.CmsSigner.Certificates プロパティに含めることができます。証明書チェーンをどの程度含めるかについては、System.Security.Cryptography.Pkcs.CmsSigner.IncludeOption プロパティで設定します。

SignedCms メッセージは、デタッチしないこともデタッチすることも可能です。ブール値プロパティ System.Security.Cryptography.Pkcs.SignedCms.Detached によって、メッセージがデタッチされるかどうかが決定されます。デタッチされない SignedCms メッセージには、署名されたメッセージが含まれます。デタッチされた SignedCms メッセージには署名されたメッセージは含まれませんが、署名や属性など、メッセージのその他のプロパティがすべて含まれます。デタッチされた SignedCms メッセージが使用される可能性があるアプリケーションの例としては、ドキュメントの読み取りを行うアプリケーションが挙げられます。この場合、サイズの大きい署名済みのドキュメントのストレージを複製するために、そのドキュメントをプライマリ ストレージのほかに SignedCms メッセージに格納するのは望ましくない場合があります。サイズの大きいコンテンツに署名するアプリケーションでは、多くの場合、デタッチされた SignedCms メッセージを使用します。

CMS/PKCS #7 は、副署名をサポートしています。副署名とは、別のデジタル署名に対するデジタル署名です。そのため、署名の正当性のみを提供し、メッセージのコンテンツに対する信頼性は提供しません。デジタル署名には、複数の副署名者が副署名することができます。ただし、CMS/PKCS #7 がサポートするのは 1 レベルの副署名のみです。副署名自体には、副署名することはできません。副署名を使用する可能性があるアプリケーションの例としては、デジタル公証サービスがあります。

副署名の計算には、SignerInfo クラスの ComputeCounterSignature メソッドのいずれかを使用します。System.Security.Cryptography.Pkcs.SignedCms.SignerInfos プロパティは、メッセージに署名すると生成される SignerInfo オブジェクトのコレクションです。ComputeCounterSignature メソッドは、SignedCms クラスの ComputeSignature メソッドに似た働きをします。

SignedCms メッセージには、関連する署名固有の属性を含めることができます。これらの属性には、署名することもしないことも可能です。

署名された属性は、適切な署名者の System.Security.Cryptography.Pkcs.CmsSigner.SignedAttributes プロパティで設定することにより、メッセージに配置されます。署名がその署名者に対して計算される際、署名された属性は System.Security.Cryptography.Pkcs.SignedCms.ContentInfo プロパティの内部コンテンツと共に署名されます。署名された属性は、System.Security.Cryptography.Pkcs.SignedCms.SignerInfos プロパティに含まれる該当する署名者の System.Security.Cryptography.Pkcs.SignerInfo.SignedAttributes プロパティでメッセージが署名された後、使用可能になります。署名された属性が役に立つ可能性がある例としては、Pkcs9SigningTime 署名時刻属性があります。この属性には、メッセージが署名された時刻が含まれます。

署名されない属性は、適切な署名者の System.Security.Cryptography.Pkcs.CmsSigner.UnsignedAttributes プロパティで設定することにより、メッセージに配置されます。これらの属性は署名されていないため、正当性や整合性があると考えることはできません。署名されない属性は、System.Security.Cryptography.Pkcs.SignedCms.SignerInfos プロパティに含まれる該当する署名者の System.Security.Cryptography.Pkcs.SignerInfo.UnsignedAttributes プロパティでメッセージが署名された後、使用可能になります。CMS/PKCS #7 で内部的に使用される、署名されない属性の例としては、副署名があります。副署名は既に署名の一種であるため、再び署名される必要がありません。署名されない属性のもう 1 つの例としては、Pkcs9DocumentDescription クラスで使用できる、ドキュメントの説明があります。

メッセージの署名、副署名、および署名された属性の確認には、SignedCms クラスの CheckSignature メソッドのいずれかを使用します。SignedCms メッセージには、確認に必要な署名者の証明書が含まれます。署名の確認では、これらのメソッドに対する verifySignatureOnly パラメータの値に応じて、署名者の証明書を確認することも、確認しないことも可能です。

デタッチされた SignedCms メッセージを確認するには、まず、メッセージの内容を SignedCms メッセージに関連付けます。これを行うには、メッセージの内容を使用して ContentInfo オブジェクトを構築します。たとえば、SignedCms コンストラクタを使用して、SignedCms オブジェクトを構築します。2 番目のパラメータを true に設定し、メッセージがデタッチされるよう指定します。エンコードされた SignedCms メッセージをデコードし、Decode メソッドを使用して確認します。最後に、前述の説明のとおりに署名を確認します。

SignedCms メッセージを使用するコード例については、「System.Security.Cryptography.Pkcs の使用」を参照してください。

関連項目

タスク

方法 :メッセージに単一の署名者が署名する
方法 :メッセージに複数の署名者が署名する
方法 :メッセージに副署名する

参照

CmsSigner
SignedCms
SignerInfo

概念

方法 :メッセージを署名してエンベロープ化する
CMS/PKCS #7 メッセージの種類

Footer image

Copyright © 2007 by Microsoft Corporation.All rights reserved.