Freigeben über


SignedCms-Nachricht

CMS/PKCS #7 stellt die SignedCms-Klasse zum digitalen Signieren von Nachrichten bereit.

Das digitale Signieren einer Nachricht schützt diese durch die Anwendung von Sicherheitsdiensten, die als Entitätsauthentifizierung und Datenintegrität bekannt sind. Entitätsauthentifizierung bietet eine hohe Wahrscheinlichkeit, dass eine Entität, die beansprucht, der Autor oder Absender einer Nachricht zu sein, tatsächlich diese Entität ist. Die Entität kann eine Person, eine Softwareanwendung oder jede andere Quelle mit einer eindeutigen Identität sein.

Datenintegrität bietet eine hohe Wahrscheinlichkeit, dass die Nachricht selbst in keiner Weise verändert wurde, auch nicht durch Löschen oder Kopieren.

Verwenden Sie die SignedCms-Klasse, um einen der zwei Sicherheitsdienste oder beide gleichzeitig auf eine Nachricht anzuwenden. Verwenden Sie diese Klasse, wenn die Authentizität eines Nachrichtenabsenders oder -autors mit hoher Wahrscheinlichkeit überprüft werden soll, bzw. um sicherzustellen, dass die Nachricht während der Speicherung oder Übermittlung bzw. während beider Vorgänge nicht verändert wurde.

E-Mail, die den S/MIME-Sicherheitsstandard verwendet, ist ein Beispiel für die Verwendung SignedCms-Klasse, um Sicherheit bereitzustellen. Zusätzlich zu anderen Sicherheitsdiensten bietet S/MIME die Möglichkeit zur Überprüfung der Authentizität des Absenders einer E-Mail-Nachricht sowie zur Prüfung der Integrität der Nachricht selbst.

Auf eine Nachricht können mehrere Signaturen angewendet werden. Ein Beispiel für eine Anwendung, die diese Funktion benötigt, ist eine Anwendung zum Erstellen und Lesen von Dokumenten. Mit der Unterstützung von CMS/PKCS #7 für mehrere Signaturen kann die Anwendung zulassen, dass mehrere Dokumentautoren das Dokument, an dessen Erstellung sie beteiligt waren, einzeln signieren. Darüber hinaus kann die Anwendung zulassen, dass der Leser des Dokuments überprüft, ob die "angeblichen" Autoren tatsächlich die Autoren eines Dokuments sind, und ob das Dokument seit der Signierung nicht mehr verändert wurde.

Verwenden Sie eine der ComputeSignature-Methoden der SignedCms-Klasse, um eine Nachrichtensignatur zu berechnen. Bei der System.Security.Cryptography.Pkcs.SignedCms.ComputeSignature(System.Security.Cryptography.Pkcs.CmsSigner)-Methode ist es erforderlich, dass die Anwendung zuerst die Eigenschaften des Nachrichtensignierers einrichtet, indem ein CmsSigner-Objekt konstruiert wird. Die CmsSigner-Klasse speichert das X.509-Zertifikat des Signierers zusammen mit weiteren Eigenschaften. Die System.Security.Cryptography.Pkcs.SignedCms.ComputeSignature-Methode zeigt ein Dialogfeld an, in dem der Benutzer das Zertifikat des entsprechenden Signierers auswählen kann.

Die Zertifikatkette eines Signierers kann vollständig oder teilweise in die System.Security.Cryptography.Pkcs.CmsSigner.Certificates-Eigenschaft aufgenommen werden. Legen Sie die System.Security.Cryptography.Pkcs.CmsSigner.IncludeOption-Eigenschaft fest, um zu beeinflussen, in welchem Umfang die Zertifikatkette aufgenommen wird.

Eine SignedCms-Nachricht kann entweder nicht getrennt oder getrennt sein. Die Boolesche Eigenschaft System.Security.Cryptography.Pkcs.SignedCms.Detached bestimmt, ob die Nachricht getrennt ist. Eine nicht getrennte SignedCms-Nachricht enthält die Nachricht, die signiert wurde. Eine getrennte SignedCms-Nachricht enthält zwar nicht die Nachricht, die signiert wurde, aber alle anderen Eigenschaften der Nachricht wie Signaturen und Attribute. Ein Beispiel für eine Anwendung, in der eine getrennte SignedCms-Nachricht verwendet werden kann, ist eine Anwendung zum Lesen von Dokumenten. In einem solchen Fall kann es unerwünscht sein, den Speicher eines großen, signierten Dokuments dadurch zu verdoppeln, dass das Dokument zusätzlich zum primären Speicherort noch in der SignedCms-Nachricht gespeichert wird. Anwendungen, die große Inhalte signieren, verwenden höchstwahrscheinlich getrennte SignedCms-Nachrichten verwenden.

CMS/PKCS #7 unterstützt Gegensignaturen. Eine Gegensignatur ist eine digitale Signatur eines weiteren digitalen Signierers. In diesem Fall etabliert sie nur die Authentizität der Signatur, nicht die des Inhalts der Nachricht. Eine digitale Signatur kann von mehreren Gegensignierern gegensigniert werden. CMS/PKCS #7 unterstützt aber nur eine Ebene der Gegensignatur. Eine Gegensignatur selbst kann nicht gegensigniert werden. Ein Beispiel für eine Anwendung, die Gegensignaturen verwenden kann, ist ein digitaler Notariatsdienst.

Verwenden Sie eine der ComputeCounterSignature-Methoden der SignerInfo-Klasse, um eine Gegensignatur zu berechnen. Die System.Security.Cryptography.Pkcs.SignedCms.SignerInfos-Eigenschaft ist eine Sammlung von SignerInfo-Objekten, die beim Signieren einer Nachricht entstehen. Die ComputeCounterSignature-Methoden funktionieren analog zu den ComputeSignature-Methoden der SignedCms-Klasse.

Eine SignedCms-Nachricht kann über zugeordnete signaturspezifische Attribute verfügen. Diese Attribute können signiert oder nicht signiert sein.

Signierte Attribute werden in die Nachricht aufgenommen, indem sie in der System.Security.Cryptography.Pkcs.CmsSigner.SignedAttributes-Eigenschaft des entsprechenden Signierers festgelegt werden. Wird nun eine Signatur für diesen Signierer berechnet, werden die signierten Attribute zusammen mit dem inneren Inhalt in der System.Security.Cryptography.Pkcs.SignedCms.ContentInfo-Eigenschaft signiert. Die signierten Attribute sind in der System.Security.Cryptography.Pkcs.SignedCms.SignerInfos-Eigenschaft verfügbar, nachdem die Nachricht in der System.Security.Cryptography.Pkcs.SignerInfo.SignedAttributes-Eigenschaft für den entsprechenden Signierer signiert wurde. Ein Beispiel für ein möglicherweise hilfreiches signiertes Attribut ist das Pkcs9SigningTime-Signierungszeitattribut. Dieses Attribut enthält die Uhrzeit, zu der die Nachricht signiert wurde.

Nicht signierte Attribute werden in die Nachricht aufgenommen, indem sie in der System.Security.Cryptography.Pkcs.CmsSigner.UnsignedAttributes-Eigenschaft des entsprechenden Signierers festgelegt werden. Diese Attribute sind nicht signiert, weshalb nicht vorausgesetzt werden kann, dass sie über Authentizität oder Integrität verfügen. Die nicht signierten Attribute sind in der System.Security.Cryptography.Pkcs.SignedCms.SignerInfos-Eigenschaft verfügbar, nachdem die Nachricht in der System.Security.Cryptography.Pkcs.SignerInfo.UnsignedAttributes-Eigenschaft für den entsprechenden Signierer signiert wurde. Ein Beispiel für ein nicht signiertes Attribut, das von CMS/PKCS #7 intern verwendet wird, ist eine Gegensignatur. Weil es sich bereits um einen Typ von Signatur handelt, muss es nicht erneut signiert werden. Ein weiteres Beispiel für ein Attribut, das unsigniert bleiben kann, ist eine Dokumentbeschreibung, die in der Pkcs9DocumentDescription-Klasse verfügbar ist.

Verwenden Sie eine der CheckSignature-Methoden der SignedCms-Klasse, um die Nachrichtensignaturen, Gegensignaturen und signierten Attribute zu überprüfen. Die SignedCms-Nachricht enthält die Zertifikate des Signierers, die für die Überprüfung notwendig sind. Mit der Signaturüberprüfung können die Zertifikate des Signierers entweder überprüft oder nicht überprüft werden. Dies wird über den Wert des verifySignatureOnly-Parameters dieser Methoden bestimmt.

Zum Überprüfen einer getrennten SignedCms-Nachricht ordnen Sie zuerst den Inhalt der Nachricht der SignedCms-Nachricht zu. Hierzu konstruieren Sie ein ContentInfo-Objekt mit dem Nachrichteninhalt. Konstruieren Sie mit diesem Objekt ein SignedCms-Objekt, indem Sie beispielsweise den SignedCms-Konstruktor verwenden. Legen Sie den zweiten Parameter auf true fest, um anzugeben, dass die Nachricht getrennt ist. Decodieren Sie die codierte SignedCms-Nachricht, die überprüft werden soll, indem Sie die Decode-Methode verwenden. Überprüfen Sie schließlich die Signaturen wie zuvor beschrieben.

Mehrere Codebeispiele, in denen SignedCms-Nachrichten verwendet werden, finden Sie unter Verwenden von "System.Security.Cryptography.Pkcs".

Siehe auch

Aufgaben

Verfahrensweise: Signieren von Nachrichten durch einen Signierer
Verfahrensweise: Signieren einer Nachricht durch mehrere Signierer
Verfahrensweise: Gegensignieren einer Nachricht

Referenz

CmsSigner
SignedCms
SignerInfo

Konzepte

Verfahrensweise: Signieren und Versehen einer Nachricht mit einem Umschlag
Typen von CMS/PKCS #7-Nachrichten

Footer image

Copyright © 2007 by Microsoft Corporation. Alle Rechte vorbehalten.