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
[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)