Udostępnij za pośrednictwem


Atrybuty PKCS #7

PKCS #7 jest standardem składni komunikatów kryptograficznych. Komunikat PKCS #7 nie stanowi samego żądania certyfikatu, ale może hermetyzować żądanie PKCS #10 lub CMC w strukturze ContentInfo ASN.1 przy użyciu jednego z następujących typów zawartości. Hermetyzacja umożliwia dodawanie dodatkowych funkcji, takich jak wiele podpisów, które nie są dostępne w inny sposób.

  • data
  • SignedData
  • KopertaData
  • SignedAndEnvelopedData
  • DigestedData
  • EncryptedData

Atrybuty można dodać do authenticationdAttributes i nieuwierzytelnionych AtrybutyAttributes pól typu zawartości 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
}

Proces wymagany do zarchiwizowania klucza prywatnego klienta w urzędzie certyfikacji (CA) zawiera kompleksowy przykład sposobu uwierzytelniania (podpisanych) atrybutów i nieuwierzytelnionych atrybutów:

  • Klient tworzy obiekt IX509CertificateRequestPkcs10 i dodaje odpowiednie dane dla żądanego typu certyfikatu.

  • Klient używa żądania PKCS #10, aby zainicjować obiekt IX509CertificateRequestCm c. Żądanie PKCS #10 jest umieszczane w strukturze TaggedRequest w żądaniu CMC. Aby uzyskać więcej informacji, zobacz atrybuty CMC.

  • Klient szyfruje klucz prywatny i używa go do zainicjowania obiektu IX509AttributeArchiveKey. Nowy atrybut ArchiveKey jest hermetyzowany w strukturze 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
    } 
    
  • Klient tworzy skrót SHA-1 zaszyfrowanego klucza i używa go do zainicjowania obiektu IX509AttributeArchiveKeyHash.

  • Klient pobiera kolekcję CryptAttributes z żądania CMC i dodaje ArchiveKey oraz atrybuty ArchiveKeyHash. Atrybuty są umieszczane w TagAttributes struktury żądania CMC.

  • Klient używa żądania CMC do zainicjowania obiektu IX509CertificateRequestPkcs 7. Spowoduje to umieszczenie żądania CMC w polu contentInfo struktury PKCS #7 SignedData.

  • Atrybut ArchiveKeyHash jest podpisany i umieszczany w uwierzytelnionych atrybutówAttributes sekwencji SignerInfo.

  • Atrybut ArchiveKey jest umieszczany w nieuwierzytelnionych atrybutówAttributes sekwencji SignerInfo struktury skojarzonej z podstawowym znakiem komunikatu PKCS #7.

obsługiwane atrybuty