![]() | Тази статия се нуждае от подобрение. Необходимо е: проверка на превода. Ако желаете да помогнете на Уикипедия, използвайте опцията редактиране в горното меню над статията, за да нанесете нужните корекции. |
Cryptographic Message Syntax (CMS) е интернет стандарт, създаден от Internet Engineering Task Force (IETF) за криптографски защитени съобщения. Той може да бъде използван за цифрово подписване, хеширане, удостоверяване или криптиране на всякакъв вид цифрови данни.
Cryptographic Message Syntax използва като основа синтаксиса на стандарта PKCS#7, който е създаден извън IETF и е публикуван за първи път през ноември 1993 г. от RSA Laboratories. Той от своя страна е базиран върху стандарта Privacy-Enhanced Mail.[1] Последната версия на CMS (към 2009 г.) е дефинирана в RFC 5652 (вижте също и RFC 5911 за обновените Abstract Syntax Notation One (ASN.1) модули, съответстващи на по-рано приетият стандарт ASN.1 2002). Архитектурата на CMS е изградена върху управлението на сертификационни ключове, точно както профилът определен от работната група на стандартите PKIX.
RFC 2630 [CMS1] е първата записана стандартизирана версия на CMS от IETF. Съвместимостта с PKCS #7 версия 1.5 е запазена където е било възможно. Въпреки това, промени настъпват за да се имплементира версия 1 характерен сертифициран трансфер и за да се поддържа независим алгоритъм при управлението на ключове. PKCS #7 версия 1.5 включва поддръжка само на транспортиране на ключове. RFC 2630 добавя поддръжка за съвместимост на ключовете и за разпространените преди това симетрично ключово криптиране и ключови техники.
RFC_3369 прави излишен RFC_2630 [CMS1] и RFC_3211 [PWRI].
В спецификацията на CMS е включено управление на ключове защитени с парола и допълнителен механизъм за поддръжка и управление на нов ключови схеми. Запазва се съвместимостта с RFC_2630 и RFC_3211. Все пак е добавена версия 2 характерен сертифициран трансфер и използването на версия 1 характерен сертифициран трансфер е отхвърлена.
S/MIME v 2 (Secure/Multipurpose Internet Mail Extensions) подписи MSG 2, които се основават на PKCS#7 версия 1.5, са съвместими с S/MIME v 3 подписи MSG3 и S/MIME v 3.1 подписи MSG 3.1. Има все пак някои малки проблеми със съвместимостта с подписи основани на PKCS#7 версия 1.5.
RFC_3852 CMS3 замества RFC_3369 CMS2. Както бе обсъдено в предишната точка, RFC 3369 въвежда допълнителен механизъм за поддръжка и управление на нов ключови схеми без по-нататъшни промени в CMS. RFC 3852 въвежда подобен механизъм за поддръжка на ново добавени сертификат формати. Съвместимостта с по-стари версии на CMS е запазена.
След публикуването на RFC 3369, са били забелязани няколко неточности в документацията които са публикувани на интернет страницата на RFC Editor.
Този документ замества RFC 3852 CMS3. Основната причина за публикуването на този документ е да придвижи по-напред CMS в класацията на стандартите. Този документ включва уточненията, които са първоначално публикувани в RFC 4853 (CMSMSIG) относно правилното обработване на защитени подписани данни при наличие на повече от един цифров подпис.
След публикуването на RFC 3852 отново са били забелязани няколко неточности в документацията които са публикувани на интернет страницата на RFC Editor.
Всяка от основните структури данни включва номер на версия като първи елемент в структурата от данните. Номерата на версиите са за да се избегнат ASN.1 грешки при разкодирането. Някои приложения не проверяват номера на версията преди да опитат декодиране и ако се появи грешка в декодирането, номера на версията се проверява като част от работата по обработване на грешката. Това е разумен подход, който поставя обработването на грешките извън бързия път. Този подход също „прощава“ когато изпращача използва неправилен номер на версията.
Повечето от първоначалните номера на версии са създадени в PKCS #7 версия 1.5. Други са добавени когато първоначално е създадена структурата. Всеки път когато една структура се актуализира се използва по-висок номер номер на версия. Също така, за де се гарантира максимална оперативна съвместимост, по висок номер на версия се използва само когато нова синтактична функция е вкарана в експлоатация. В случая се използва най-ниската версия която поддържа даден генериран синтаксис.
CMS е достатъчно обширен и да поддържа много различни типове съдържание. Защитата на съдържанието капсулира един определен тип съдържание, който от своя страна може да осигури допълнително капсулиране. Този документ дефинира шест типове съдържание. Допълнителни типове съдържание могат също да бъдат дефинирани извън този документ.
Като част от основната дизайнерска философия, всеки тип съдържание позволява еднократна обработка използвайки BER(Basic Encoding Rules) с неопределена дължина. Операции с еднократно минаване са особено полезни ако съдържанието е голямо, съхранявано на ленти, или е свързано с друг процес. Еднократните операции обаче имат един значителен недостатък: трудно се извършват операции използващи отличителни правила за кодиране (Distinguished Encoding Rules (DER) X.509 – 88) с еднократно минаване, защото дължините на различните компоненти може да не са предварително дефинирани. Въпреки това, подписани и заверени в рамките на типа съдържание атрибути трябва да бъдат предадени в DER форма, за да гарантират, че получателите могат да проверят съдържание, което съдържа един или повече неразпознаваеми атрибути. Подписани атрибути и заверени атрибути са единствените видове данни използвани в CMS, който изискват DER кодиране.
В последната версия на CMS стандарта (RFC 5652) са представени шест типа съдържание: данни, подписани данни, опаковани данни, хеширани данни, криптирани данни и удостоверени данни. Освен тях е предоставена възможност за добавяне и на други извън документацията RFC 5652.[2]
Типът Данни се отнася до октетни (байтови) низове с произволна дължина, например ASCII текстови файлове; интерпретацията е оставена на приложението. Такива низове не е необходимо да съдържат някаква вътрешна структура (въпреки че те биха могли да имат собствена ASN.1 дефиниция или друга структура).
Този тип съдържание обикновено се използва в останалите типове, които са разгледани по-долу.
Обектът OBJECT IDENTIFIER идентифицира типа съдържание на данните:
id-data OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs7(7) 1 }
Този тип съдържа всякакви типове съдържание и нула или повече подписа. Всякакъв брой автори могат паралелно да подписват всякакъв тип съдържание.
Типичното приложение на подписаните данни е дигиталният подпис на един от авторите върху съдържанието на типа Данни. Друго типично приложение е разпространяването на сертификати и списъци с отменени сертификати (certificate revocation lists (CRL)).
Процесът са на създаване на подписани данни се състои от следните стъпки:
Чрез обекта OBJECT IDENTIFIER се определя типа Подписани данни:
id-signedData OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs7(7) 2 }
Опакованите данни могат да съдържат всякакъв тип криптирани данни и криптирани ключове за един или повече получатели. Комбинацията от криптирано съдържание и криптиран ключ за получателя се нарича „дигитален плик“ за този получател. Всеки тип съдържание може да бъде опакован за произволен брой получатели, чрез използване на която и да е от поддържаните техники за управление на ключовете на получателите.
Обичайното приложение на опакованите данни е да се създават дигитални пликове за типовете Данни и Подписани данни.
Опакованите данни се създават в следните стъпки:
Получателят отваря опакованото съобщение като първо декриптира криптиращия ключ и след това с него декриптира самото съобщение.
Чрез обекта OBJECT IDENTIFIER се определя типа Опаковани данни:
id-envelopedData OBJECT IDENTIFIER ::= { iso(1) member-body(2)
us(840) rsadsi(113549) pkcs(1) pkcs7(7) 3 }
Хешираните данни съдържат в себе си всякакъв тип данни и тяхната хеш стойност.
Обикновено хешираните данни се използват, за да осигурят цялост на съдържанието и резултатът най-често се опакова в дигитален плик и става част от типа Опаковани данни.
Създаването на хеширани данни се извършва в следните стъпки:
Получателят проверява дали съобщението е непроменено чрез сравняване на хеш стойността с независимо генерирана нова хеш стойност на полученото съобщение.
Чрез обекта OBJECT IDENTIFIER се определя типа Хеширани данни:
id-digestedData OBJECT IDENTIFIER ::= { iso(1) member-body(2)
us(840) rsadsi(113549) pkcs(1) pkcs7(7) 5 }
Криптираните данни се състоят от криптирано съдържание от всякакъв тип. За разлика от Опакованите данни, криптираните данни нямат получатели и не съдържат криптиращи ключове. Ключовете трябва да бъдат управлявани с други средства.
Обичайното приложение на криптираните данни е криптиране на съдържанието на типа Данни за локално съхранение като често криптиращият ключ се извлича от парола.
Чрез обекта OBJECT IDENTIFIER се проверява типа Криптирани данни:
id-encryptedData OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs7(7) 6 }
Authenticated-Data – this consists of the content, message authentication code (MAC), and encrypted authentication keys for one or more recipients. OpenSSL е софтуер с отворен код, който може да криптира, декриптира, подписва и удостоверява, компресира и декомпресира CMS документи.
Удостоверените данни съдържат данни от всеки тип, удостоверение за автентичност на съобщението (message authentication code (MAC)) и криптирани удостоверяващи ключове за един или повече получатели. Комбинацията от MAC и един криптиран удостоверяващ ключ за конкретен получател са необходими на този получател, за да провери целостта на съдържанието.
Целостта на всеки тип съдържание може да бъде защитена за произволен брой получатели.
Процесът на създаване на удостоверени данни е в следните няколко стъпки:
Чрез обекта OBJECT IDENTIFIER се определя типа Удостоверени данни:
id-ct-authData OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) ct(1) 2 }
CMS се използва като ключов криптографски компонент в много стандарти като S/MIME, PKCS#12 и RFC 3161 Digital timestamping protocol. В основата си той използва публични криптографски ключове, при които ключът за кодиране на данните (публичен) се различава от ключа за декодиране (таен). По този начин изпращачът на съобщението не споделя кода за декодиране с никого и това прави комуникацията много по-сигурна.
CMS предоставя възможност и за влагане на различни видове защита на данни (едно съобщение може да бъде подписано с дигитален подпис и след това криптирано или да се криптира и после да се подпише).
![]() ![]() |
Тази страница частично или изцяло представлява превод на страницата Cryptographic Message Syntax в Уикипедия на английски. Оригиналният текст, както и този превод, са защитени от Лиценза „Криейтив Комънс – Признание – Споделяне на споделеното“, а за съдържание, създадено преди юни 2009 година – от Лиценза за свободна документация на ГНУ. Прегледайте историята на редакциите на оригиналната страница, както и на преводната страница, за да видите списъка на съавторите.
ВАЖНО: Този шаблон се отнася единствено до авторските права върху съдържанието на статията. Добавянето му не отменя изискването да се посочват конкретни източници на твърденията, които да бъдат благонадеждни. |