Cryptographic Message Syntax

Z Wikipedii, wolnej encyklopedii

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[edytuj | edytuj kod]

  • 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[edytuj | edytuj kod]

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[edytuj | edytuj kod]

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[edytuj | edytuj kod]

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[edytuj | edytuj kod]

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[edytuj | edytuj kod]

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[edytuj | edytuj kod]

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[edytuj | edytuj kod]

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