#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 # demande PKCS 10 ou CMC dans une structure de programme ASN. 1 ContentInfo en utilisant 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 dans le cas contraire.

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

Les 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 (CA) 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 des 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 demande 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 demande CMC et lui ajoute les attributs ArchiveKey et ArchiveKeyHash . Les attributs sont placés dans la structure TaggedAttributes de la demande CMC.

  • Le client utilise la demande CMC pour initialiser un objet IX509CertificateRequestPkcs7 . Cela place la demande CMC dans le champ ContentInfo de la # structure PKCS 7 SignedData .

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

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

Attributs pris en charge