Cryptographic Message Syntax

Cryptographic Message Syntax (CMS) – standard stworzony przez Internet Engineering Task Force z myślą o zabezpieczaniu wiadomości. Może być użyty do podpisywania, szyfrowania, uwierzytelniania oraz zachowania integralności wiadomości. Struktura CMS opisywana jest w notacji ASN.1 i kodowana jako DER (Distinguished Encoding Rules).

Typy content

  • Data Content Type
  • Signed-data Content Type
  • Enveloped-data Content Type
  • Digested-data Content Type
  • Encrypted-data Content Type
  • Authenticated-data Content Type

Data Content Type

Zawiera wiadomość, np. plik tekstowy ASCII. Interpretacja danych pozostawiona jest aplikacji.

id-data OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs7(7) 1 }

Signed-data Content Type

Zawiera content jakiegokolwiek typu (EncapsulatedContentInfo) oraz jakakolwiek liczba podmiotów (SignerInfos) może równolegle złożyć podpis na jakimkolwiek typie content. Format również zezwala na przechowywanie ścieżki certyfikacyjnej oraz listy CRL. Kompatybilny z PKCS#7.

id-signedData OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs7(7) 2 }
     SignedData ::= SEQUENCE {
       version CMSVersion,
       digestAlgorithms DigestAlgorithmIdentifiers,
       encapContentInfo EncapsulatedContentInfo,
       certificates [0] IMPLICIT CertificateSet OPTIONAL,
       crls [1] IMPLICIT RevocationInfoChoices OPTIONAL,
       signerInfos SignerInfos }

Enveloped-data Content Type

Zawiera zaszyfrowany content jakiegokolwiek typu oraz zaszyfrowany content-encryption keys dla jednego lub więcej odbiorców. Content-encryption key jest generowany losowo (klucz szyfrujący dane) i jest zaszyfrowany dla każdego odbiorcy jego kluczem publicznym. Wszystkie te zaszyfrowane Content-encryption key zgrupowane są w RecipientInfos. Proces odszyfrowania wiadomości polega na odszyfrowaniu jednego z content-encryption keys i odszyfrowaniu zawartości content przy użyciu odzyskanego klucza content-encryption key.

id-envelopedData OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs7(7) 3 }
   EnvelopedData ::= SEQUENCE {
    version CMSVersion,
    originatorInfo [0] IMPLICIT OriginatorInfo OPTIONAL,
    recipientInfos RecipientInfos,
    encryptedContentInfo EncryptedContentInfo,
    unprotectedAttrs [1] IMPLICIT UnprotectedAttributes OPTIONAL }

Digested-data Content Type

Zawiera content jakiegokolwiek typu oraz hash wyliczonym na tym content. Przeważnie używa się Digested-data Content Type do zapewnienia integralności wiadomości i rezultat Digested-data Content Type przeważnie jest wejściem enveloped-data content type.

id-digestedData OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs7(7) 5 }
     DigestedData ::= SEQUENCE {
       version CMSVersion,
       digestAlgorithm DigestAlgorithmIdentifier,
       encapContentInfo EncapsulatedContentInfo,
       digest Digest }

Encrypted-data Content Type

Zawiera zaszyfrowana wiadomość jakiegokolwiek typu w przeciwieństwie do enveloped-data content type wiadomość szyfrowana jest kluczem odbiorcy wiadomości.

id-encryptedData OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs7(7) 6 }
     EncryptedData ::= SEQUENCE {
       version CMSVersion,
       encryptedContentInfo EncryptedContentInfo,
       unprotectedAttrs [1] IMPLICIT UnprotectedAttributes OPTIONAL }

Authenticated-data Content Type

Zawiera content jakiegokolwiek typu nazwaną message authentication code (MAC) oraz zaszyfrowane klucze autentykujące dla jednego lub więcej odbiorców. Kombinacja MAC i jednego zaszyfrowanego klucza autentykującego jest potrzebna do przeprowadzenia weryfikacji integralności zawartości content.

Message authentication key jest generowany losowo i jest szyfrowany dla każdego odbiorcy. Wszystkie zaszyfrowane Message authentication key trzymane w RecipientInfo.

id-ct-authData OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) ct(1) 2 }
     AuthenticatedData ::= SEQUENCE {
       version CMSVersion,
       originatorInfo [0] IMPLICIT OriginatorInfo OPTIONAL,
       recipientInfos RecipientInfos,
       macAlgorithm MessageAuthenticationCodeAlgorithm,
       digestAlgorithm [1] DigestAlgorithmIdentifier OPTIONAL,
       encapContentInfo EncapsulatedContentInfo,
       authAttrs [2] IMPLICIT AuthAttributes OPTIONAL,
       mac MessageAuthenticationCode,
       unauthAttrs [3] IMPLICIT UnauthAttributes OPTIONAL }

Linki zewnętrzne

  • [1] RFC3852 - Cryptographic Message Syntax (CMS)