Message SignedCms

CMS/PKCS #7 propose la classe SignedCms qui permet de signer numériquement des messages.

La signature numérique d'un message le protège grâce à l'application de services de sécurité appelés authentification de l'entité et intégrité des données. L'authentification de l'entité offre une forte probabilité qu'une entité prétendant être l'auteur ou l'émetteur d'un message le soit effectivement. L'entité peut être une personne, une application logicielle ou toute autre source disposant d'une identité unique.

L'intégrité des données offre une forte probabilité que le message en tant que tel n'a pas été altéré d'une quelconque manière, y compris par le biais d'une suppression ou d'une duplication.

La classe SignedCms permet d'appliquer à un message un de ces deux services de sécurité, voire les deux. Elle permet également de vérifier avec une probabilité élevée l'authenticité de l'émetteur ou de l'auteur d'un message, ou que le message n'a pas été modifié pendant son stockage ou son transit, voire les deux.

La messagerie électronique avec la norme de sécurité S/MIME est un exemple d'utilisation de la classe SignedCms qui permet de garantir la sécurité. En plus d'autres services de sécurité, la norme S/MIME permet de vérifier l'authenticité de l'émetteur d'un message électronique ainsi que l'intégrité du message en tant que tel.

Plusieurs signatures peuvent être appliquées à un message. Une application de création et de lecture peut notamment nécessiter cette capacité. Étant donné que CMS/PKCS #7 prend en charge des signatures multiples, l'application peut autoriser plusieurs auteurs de document à signer chacun le document qu'ils ont contribué à rédiger. Elle permet également au lecteur du document de vérifier que les auteurs d'un document en sont les véritables auteurs et que le document n'a pas été modifié depuis sa signature.

Pour calculer la signature d'un message, utilisez l'une des méthodes ComputeSignature de la classe SignedCms. La méthode System.Security.Cryptography.Pkcs.SignedCms.ComputeSignature(System.Security.Cryptography.Pkcs.CmsSigner) nécessite que l'application configure d'abord les caractéristiques du signataire du message en construisant un objet CmsSigner. La classe CmsSigner stocke le certificat X509 du signataire, ainsi que d'autres propriétés. La méthode System.Security.Cryptography.Pkcs.SignedCms.ComputeSignature propose une boîte de dialogue qui permet à l'utilisateur de sélectionner le certificat du signataire approprié.

La chaîne de certificats du signataire peut être intégralement ou partiellement incluse dans la propriété System.Security.Cryptography.Pkcs.CmsSigner.Certificates. Définissez la propriété System.Security.Cryptography.Pkcs.CmsSigner.IncludeOption pour affecter la longueur de la chaîne de certificats incluse.

Un message SignedCms peut être non détaché ou détaché. La propriété booléenne System.Security.Cryptography.Pkcs.SignedCms.Detached détermine si le message est détaché. Un message SignedCms non détaché contient le message qui a été signé. Un message SignedCms détaché, en revanche, ne contient pas le message qui a été signé, mais contient toutes les autres propriétés du message, telles que les signatures et les attributs. Une application de lecture de documents peut, par exemple, utiliser un message SignedCms détaché. Dans ce cas, il peut être préférable de ne pas dupliquer le stockage d'un long document signé en le stockant dans le message SignedCms en plus de l'emplacement de stockage principal. Les applications qui signent d'importants contenus utilisent généralement des messages SignedCms détachés.

CMS/PKCS #7 prend en charge les contre-signatures. Une contre-signature est la signature numérique d'une autre signature numérique. En tant que telle, la contre-signature garantit uniquement l'authenticité de la signature, pas du contenu du message. Une signature numérique peut être contre-signée par plusieurs contre-signataires. Toutefois, CMS/PKCS #7 ne prend en charge qu'un seul niveau de contre-signature. Une contre-signature ne peut pas être contre-signée. Le service de notariat numérique est un exemple d'application qui peut utiliser des contre-signatures.

Pour calculer la contre-signature d'un message, utilisez l'une des méthodes ComputeCounterSignature de la classe SignerInfo. La propriété System.Security.Cryptography.Pkcs.SignedCms.SignerInfos est une collection d'objets SignerInfo résultant de la signature d'un message. Les méthodes ComputeCounterSignature opèrent de manière similaire aux méthodes ComputeSignature de la classe SignedCms.

Un message SignedCms peut avoir des attributs associés spécifiques à la signature. Ces attributs peuvent être signés ou non.

Les attributs signés sont placés dans le message en les définissant dans la propriété System.Security.Cryptography.Pkcs.CmsSigner.SignedAttributes appropriée du signataire. Lors du calcul d'une signature pour ce signataire, les attributs sont signés avec le contenu interne dans la propriété System.Security.Cryptography.Pkcs.SignedCms.ContentInfo. Les attributs signés sont disponibles après signature du message dans la propriété System.Security.Cryptography.Pkcs.SignerInfo.SignedAttributes pour le signataire applicable dans la propriété System.Security.Cryptography.Pkcs.SignedCms.SignerInfos. L'attribut d'heure de signature Pkcs9SigningTime est un exemple d'attribut signé qui peut être utile. Cet attribut contient l'heure à laquelle le message a été signé.

Les attributs non signés sont placés dans le message en les définissant dans la propriété System.Security.Cryptography.Pkcs.CmsSigner.UnsignedAttributes appropriée du signataire. Ces attributs n'étant pas signés, ils ne garantissent ni l'authenticité ni l'intégrité. Les attributs non signés sont disponibles après signature du message dans la propriété System.Security.Cryptography.Pkcs.SignerInfo.UnsignedAttributes pour le signataire applicable dans la propriété System.Security.Cryptography.Pkcs.SignedCms.SignerInfos. La contre-signature est un exemple d'attribut non signé utilisé en interne par la norme CMS/PKCS #7. La contre-signature étant déjà un type de signature, elle ne doit pas être de nouveau signée. La description du document constitue un autre exemple d'attribut pouvant rester non signé, disponible dans la classe Pkcs9DocumentDescription.

Pour vérifier les signatures, les contre-signatures et les attributs signés du message, utilisez l'une des méthodes CheckSignature de la classe SignedCms. Le message SignedCms contient les certificats du signataire nécessaires pour la vérification. La vérification de la signature peut ou non valider les certificats du signataire en fonction de la valeur du paramètre verifySignatureOnly de ces méthodes.

Pour vérifier un message SignedCms détaché, associez d'abord le contenu du message au message SignedCms. Pour cela, construisez un objet ContentInfo avec le contenu du message. Utilisez ensuite cet objet pour construire un objet SignedCms en utilisant, par exemple, le constructeur SignedCms. Définissez le deuxième paramètre sur true pour indiquer que le message est détaché. Décodez le message SignedCms codé à vérifier à l'aide de la méthode Decode. Enfin, vérifiez la signature comme décrit préalablement.

Pour obtenir plusieurs exemples de code utilisant les messages SignedCms, voir Utilisation de System.Security.Cryptography.Pkcs.

Voir aussi

Tâches

Procédure de signature de messages par un signataire
Procédure de signature d'un message par plusieurs signataires
Procédure de contre-signature d'un message

Référence

CmsSigner
SignedCms
SignerInfo

Concepts

Procédure de signature et de mise sous enveloppe d'un message
Types de messages CMS/PKCS #7

Footer image

Copyright ©2007 par Microsoft Corporation. Tous droits réservés.