Freigeben über


PKCS #7 Attribute

PKCS #7 ist ein Standard für kryptografische Nachrichtensyntax. Eine PKCS #7-Nachricht stellt an sich keine Zertifikatanforderung dar, kann jedoch eine PKCS #10- oder CMC-Anforderung in einer ContentInfo-ASN.1-Struktur kapseln, indem sie einen der folgenden Inhaltstypen verwendet. Mit der Kapselung können Sie zusätzliche Funktionen hinzufügen, z. B. mehrere Signaturen, die andernfalls nicht verfügbar sind.

  • Daten
  • SignedData
  • EnvelopedData
  • SignedAndEnvelopedData
  • DigestedData
  • Encrypteddata

Attribute können den Feldern authenticatedAttributes und unauthenticatedAttributes des SignedData-Inhaltstyps hinzugefügt werden.

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
}

Der Prozess, der zum Archivieren des privaten Schlüssels eines Clients auf einer Zertifizierungsstelle erforderlich ist, bietet ein umfassendes Beispiel dafür, wie authentifizierte (signierte) Attribute und die nicht authentifizierten Attribute verwendet werden können:

  • Der Client erstellt ein IX509CertificateRequestPkcs10-Objekt und fügt die entsprechenden Daten für den Typ des angeforderten Zertifikats hinzu.

  • Der Client verwendet die PKCS #10-Anforderung, um ein IX509CertificateRequestCmc-Objekt zu initialisieren. Die PKCS #10-Anforderung wird in der TaggedRequest-Struktur in der CMC-Anforderung platziert. Weitere Informationen finden Sie unter CMC-Attribute.

  • Der Client verschlüsselt einen privaten Schlüssel und verwendet ihn, um ein IX509AttributeArchiveKey-Objekt zu initialisieren. Das neue ArchiveKey-Attribut ist in einer EnvelopedData-Struktur gekapselt.

    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
    } 
    
  • Der Client erstellt einen SHA-1-Hash des verschlüsselten Schlüssels und verwendet ihn, um ein IX509AttributeArchiveKeyHash-Objekt zu initialisieren.

  • Der Client ruft die CryptAttributes-Auflistung aus der CMC-Anforderung ab und fügt ihr die Attribute ArchiveKey und ArchiveKeyHash hinzu. Die Attribute werden in der TaggedAttributes-Struktur der CMC-Anforderung platziert.

  • Der Client verwendet die CMC-Anforderung, um ein IX509CertificateRequestPkcs7-Objekt zu initialisieren. Dadurch wird die CMC-Anforderung im Feld contentInfo der PKCS #7 SignedData-Struktur platziert.

  • Das ArchiveKeyHash-Attribut wird signiert und in der authenticatedAttributes-Sequenz der SignerInfo-Struktur platziert.

  • Das ArchiveKey-Attribut wird in der unauthenticatedAttributes-Sequenz der SignerInfo-Struktur platziert, die dem primären Unterzeichner der PKCS #7-Nachricht zugeordnet ist.

Unterstützte Attribute