Compartilhar via


Atributos PKCS nº 7

O 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 nº 10 ou CMC em uma estrutura ContentInfo ASN.1 usando um dos tipos de conteúdo a seguir. O encapsulamento permite que você adicione funcionalidades extras, como várias assinaturas, que não estão disponíveis de outra forma.

  • Dados
  • 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 objeto IX509CertificateRequestCmc . A solicitação PKCS nº 10 é colocada na estrutura TaggedRequest na solicitação do CMC. Para obter mais informações, consulte Atributos do CMC.

  • O cliente criptografa uma chave privada e a usa para inicializar um objeto IX509AttributeArchiveKey . 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 objeto IX509AttributeArchiveKeyHash .

  • O cliente recupera a coleção CryptAttributes da solicitação CMC e adiciona os atributos ArchiveKey e 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 objeto IX509CertificateRequestPkcs7 . Isso coloca a solicitação CMC no campo contentInfo da estrutura SignedData do PKCS nº 7.

  • 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