Partager via


Attributs PKCS #7

PKCS #7 est une norme de syntaxe de message de chiffrement. Un message PKCS #7 ne constitue pas en soi une demande de certificat, mais il peut encapsuler une requête PKCS #10 ou CMC dans une structure ContentInfo ASN.1 à l’aide de l’un des types de contenu suivants. L’encapsulation vous permet d’ajouter des fonctionnalités supplémentaires, telles que plusieurs signatures, qui ne sont pas disponibles autrement.

  • Données
  • SignedData
  • EnvelopedData
  • SignedAndEnvelopedData
  • DigestedData
  • Encrypteddata

Des attributs peuvent être ajoutés aux champs authenticatedAttributes et unauthenticatedAttributes du type de contenu SignedData .

SignedData ::= SEQUENCE 
{
   version             INTEGER,
   digestAlgorithms    DigestAlgorithmIdentifiers,
   contentInfo         ContentInfo,
   certificates        [0] IMPLICIT Certificates OPTIONAL,
   crls                [1] IMPLICIT CertificateRevocationLists OPTIONAL,
   signerInfos         SignerInfos
}

SignerInfos ::= SET OF SignerInfo

SignerInfo ::= SEQUENCE 
{
    version                     INTEGER,
    sid                         CertIdentifier,
    digestAlgorithm             DigestAlgorithmIdentifier,
    authenticatedAttributes     [0] IMPLICIT Attributes OPTIONAL,
    digestEncryptionAlgorithm   DigestEncryptionAlgId,
    encryptedDigest             EncryptedDigest,
    unauthenticatedAttributes   [1] IMPLICIT Attributes
}

Attributes ::= SET OF Attribute

Attribute ::= SEQUENCE 
{
   type       EncodedObjectID,
   values     AttributeSetValue
}

Le processus requis pour archiver la clé privée d’un client sur une autorité de certification fournit un exemple complet de la façon dont les attributs authentifiés (signés) et les attributs non authentifiés peuvent être utilisés :

  • Le client crée un objet IX509CertificateRequestPkcs10 et ajoute les données appropriées pour le type de certificat demandé.

  • Le client utilise la requête PKCS #10 pour initialiser un objet IX509CertificateRequestCmc . La requête PKCS #10 est placée dans la structure TaggedRequest de la requête CMC. Pour plus d’informations, consultez Attributs CMC.

  • Le client chiffre une clé privée et l’utilise pour initialiser un objet IX509AttributeArchiveKey . Le nouvel attribut ArchiveKey est encapsulé dans une structure EnvelopedData .

    EnvelopedData ::= SEQUENCE 
    {
        version                 INTEGER,
        recipientInfos          RecipientInfos,
        encryptedContentInfo    EncryptedContentInfo
    } 
    
    RecipientInfos ::= SET OF RecipientInfo
    
    EncryptedContentInfo ::= SEQUENCE 
    {
        contentType                 ContentType,
        contentEncryptionAlgorithm  ContentEncryptionAlgId,
        encryptedContent            [0] IMPLICIT EncryptedContent OPTIONAL
    } 
    
    EncryptedContent ::= OCTET STRING
    
    RecipientInfo ::= SEQUENCE 
    {
        version                 INTEGER,
        issuerAndSerialNumber   IssuerAndSerialNumber,
        keyEncryptionAlgorithm  KeyEncryptionAlgId,
        encryptedKey            EncryptedKey
    } 
    
  • Le client crée un hachage SHA-1 de la clé chiffrée et l’utilise pour initialiser un objet IX509AttributeArchiveKeyHash .

  • Le client récupère la collection CryptAttributes à partir de la requête CMC et y ajoute les attributs ArchiveKey et ArchiveKeyHash . Les attributs sont placés dans la structure TaggedAttributes de la requête CMC.

  • Le client utilise la requête CMC pour initialiser un objet IX509CertificateRequestPkcs7 . Cela place la requête CMC dans le champ contentInfo de la structure SignedData PKCS #7.

  • L’attribut ArchiveKeyHash est signé et placé dans la séquence authenticatedAttributes de la structure SignerInfo .

  • L’attribut ArchiveKey est placé dans la séquence unauthenticatedAttributes de la structure SignerInfo associée au signataire principal du message PKCS #7.

Attributs pris en charge