Atributos PKCS #7

PKCS #7 es un estándar de sintaxis de mensajes criptográficos. Un mensaje PKCS #7 no constituye, por sí mismo, una solicitud de certificado, pero puede encapsular una solicitud PKCS #10 o CMC en una estructura ASN.1 de ContentInfo mediante uno de los siguientes tipos de contenido. La encapsulación le permite agregar funcionalidad adicional, como varias firmas, que de lo contrario no está disponible.

  • Datos
  • SignedData
  • EnvelopedData
  • SignedAndEnvelopedData
  • DigestedData
  • EncryptedData

Los atributos se pueden agregar a los campos authenticatedAttributes y unauthenticatedAttributes del tipo de contenido 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
}

El proceso necesario para archivar la clave privada de un cliente en una entidad de certificación (CA) proporciona un ejemplo completo de cómo se pueden usar los atributos autenticados (firmados) y los atributos no autenticados:

  • El cliente crea un objeto IX509CertificateRequestPkcs10 y agrega los datos adecuados para el tipo de certificado que se solicita.

  • El cliente usa la solicitud PKCS #10 para inicializar un objeto IX509CertificateRequestCmc . La solicitud PKCS #10 se coloca en la estructura TaggedRequest de la solicitud CMC. Para obtener más información, vea Atributos de CMC.

  • El cliente cifra una clave privada y la usa para inicializar un objeto IX509AttributeArchiveKey . El nuevo atributo ArchiveKey se encapsula en una estructura 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
    } 
    
  • El cliente crea un hash SHA-1 de la clave cifrada y lo usa para inicializar un objeto IX509AttributeArchiveKeyHash .

  • El cliente recupera la colección CryptAttributes de la solicitud cmC y agrega los atributos ArchiveKey y ArchiveKeyHash a ella. Los atributos se colocan en la estructura TaggedAttributes de la solicitud de CMC.

  • El cliente usa la solicitud cmC para inicializar un objeto IX509CertificateRequestPkcs7 . Esto coloca la solicitud de CMC en el campo contentInfo de la estructura PKCS #7 SignedData .

  • El atributo ArchiveKeyHash se firma y se coloca en la secuencia authenticatedAttributes de la estructura SignerInfo .

  • El atributo ArchiveKey se coloca en la secuencia unauthenticatedAttributes de la estructura SignerInfo asociada al firmante principal del mensaje PKCS #7.

Atributos compatibles