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.
Zugehörige Themen