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