Freigeben über


PKCS #7 Attribute

PKCS #7 ist ein Kryptografienachrichtensyntaxstandard. Eine PKCS #7-Nachricht stellt selbst keine Zertifikatanforderung dar, kann aber eine PKCS #10- oder CMC-Anforderung in einer ContentInfo- ASN.1-Struktur mithilfe eines der folgenden Inhaltstypen kapseln. Mit der Kapselung können Sie zusätzliche Funktionen wie mehrere Signaturen hinzufügen, die andernfalls nicht verfügbar sind.

  • Daten
  • SignedData-
  • EnvelopedData-
  • SignedAndEnvelopedData-
  • DigestedData-
  • EncryptedData-

Attribute können den authenticatedAttributes und nicht authentifiziertenAttributes Feldern des inhaltstyps SignedData 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 erforderlich ist, um den privaten Schlüssel eines Clients auf einer Zertifizierungsstelle (CA) zu archivieren, 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 entsprechende Daten für den angeforderten Zertifikattyp hinzu.

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

  • Der Client verschlüsselt einen privaten Schlüssel und verwendet ihn zum Initialisieren eines IX509AttributeArchiveKey Objekts. Das neue ArchiveKey Attribut wird 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 zum Initialisieren eines IX509AttributeArchiveKeyHash-Objekts.

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

  • Der Client verwendet die CMC-Anforderung, um ein IX509CertificateRequestPkcs7-Objekt zu initialisieren. Dadurch wird die CMC-Anforderung in das contentInfo- Feld der PKCS #7 SignedData-Struktur eingefügt.

  • Das attribut ArchiveKeyHash ist signiert und in der authenticatedAttributes Sequenz der SignerInfo Struktur platziert.

  • Das attribut ArchiveKey wird in der nicht authentifiziertenAttributes Sequenz der SignerInfo Struktur platziert, die dem primären Signierer der PKCS #7-Nachricht zugeordnet ist.

Unterstützte Attribute