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.
Rubriques connexes