Поделиться через


Атрибуты PKCS #7

PKCS 7 — это стандарт синтаксиса криптографических сообщений. Сообщение PKCS #7 само по себе не представляет собой запрос на сертификат, но оно может инкапсулировать запрос PKCS #10 или CMC в структуре ContentInfo ASN.1 с помощью одного из следующих типов контента. Инкапсуляция позволяет добавить дополнительные функции, такие как несколько подписей, которые недоступны иным образом.

  • Данные
  • SignedData
  • EnvelopedData
  • SignedAndEnvelopedData
  • DigestedData
  • EncryptedData

Атрибуты можно добавлять в поля authenticatedAttributes и unauthenticatedAttributes типа контента 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
}

Процесс архивации закрытого ключа клиента в центре сертификации (ЦС) содержит полный пример использования атрибутов, прошедших проверку подлинности (подписанных), и атрибутов, не прошедших проверку подлинности:

  • Клиент создает объект IX509CertificateRequestPkcs10 и добавляет соответствующие данные для типа запрашиваемого сертификата.

  • Клиент использует запрос PKCS #10 для инициализации объекта IX509CertificateRequestCmc . Запрос PKCS #10 помещается в структуру TaggedRequest в запросе CMC. Дополнительные сведения см. в разделе Атрибуты CMC.

  • Клиент шифрует закрытый ключ и использует его для инициализации объекта IX509AttributeArchiveKey . Новый атрибут ArchiveKey инкапсулирован в структуру 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
    } 
    
  • Клиент создает хэш SHA-1 зашифрованного ключа и использует его для инициализации объекта IX509AttributeArchiveKeyHash .

  • Клиент извлекает коллекцию CryptAttributes из запроса CMC и добавляет в нее атрибуты ArchiveKey и ArchiveKeyHash . Атрибуты помещаются в структуру TaggedAttributes запроса CMC.

  • Клиент использует запрос CMC для инициализации объекта IX509CertificateRequestPkcs7 . Запрос CMC помещется в поле contentInfo структуры PKCS #7 SignedData .

  • Атрибут ArchiveKeyHash подписывается и помещается в последовательность authenticatedAttributes структуры SignerInfo .

  • Атрибут ArchiveKey помещается в последовательность unauthenticatedAttributes структуры SignerInfo , связанной с основным подписывателем сообщения PKCS #7.

Поддерживаемые атрибуты