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.
Temas relacionados