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.
Tópicos relacionados