Compartilhar via


Atributos PKCS nº 7

PKCS nº 7 é um padrão de sintaxe de mensagem criptográfica. Uma mensagem PKCS nº 7 não constitui, por si só, uma solicitação de certificado, mas pode encapsular uma solicitação PKCS #10 ou CMC em uma estrutura ContentInfo ASN.1 usando um dos seguintes tipos de conteúdo. O encapsulamento permite que você adicione funcionalidades extras, como várias assinaturas, que não estão disponíveis de outra forma.

  • data
  • SignedData
  • envelopedData
  • SignedAndEnvelopedData
  • DigestedData
  • EncryptedData

Os atributos podem ser adicionados aos campos authenticatedAttributes e unauthenticatedAttributes do tipo de conteúdo 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
}

O processo necessário para arquivar a chave privada de um cliente em uma AC (autoridade de certificação) fornece um exemplo abrangente de como atributos autenticados (assinados) e os atributos não autenticados podem ser usados:

  • O cliente cria um objeto IX509CertificateRequestPkcs10 e adiciona dados apropriados para o tipo de certificado que está sendo solicitado.

  • O cliente usa a solicitação PKCS nº 10 para inicializar um objetoIX509CertificateRequestCmc. A solicitação PKCS nº 10 é colocada na estrutura TaggedRequest na solicitação CMC. Para obter mais informações, consulte atributos CMC.

  • O cliente criptografa uma chave privada e a usa para inicializar um objetoIX509AttributeArchiveKey. O novo atributo ArchiveKey é encapsulado em uma estrutura 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
    } 
    
  • O cliente cria um hash SHA-1 da chave criptografada e a usa para inicializar um objetoIX509AttributeArchiveKeyHash.

  • O cliente recupera a coleção CryptAttributes da solicitação CMC e adiciona a ArchiveKey e os atributos ArchiveKeyHash a ela. Os atributos são colocados na estrutura TaggedAttributes da solicitação CMC.

  • O cliente usa a solicitação CMC para inicializar um objetoIX509CertificateRequestPkcs7. Isso coloca a solicitação do CMC no campo contentInfo da estrutura de PKCS nº 7 SignedData.

  • O atributo ArchiveKeyHash é assinado e colocado na sequência authenticatedAttributes da estrutura SignerInfo.

  • O atributo ArchiveKey é colocado na sequência unauthenticatedAttributes da estrutura SignerInfo associada ao signatário primário da mensagem PKCS nº 7.

atributos com suporte