CAdES
CAdES (CMS Advanced Electronic Signatures) — это стандарт электронной подписи, представляющий собой расширенную версию стандарта электронной подписи CMS (Cryptographic Message Syntax) и разработанный ETSI. Главным документом, описывающим данный стандарт, является ETSI TS 101 733 Electronic Signature and Infrastructure (ESI) - CMS Advanced Electronic Signature (CAdES). Первая версия стандарта появилась в декабре 2000 года, последняя - в апреле 2013 года (версия 2.2.1). В настоящее время (апрель 2014 года) ведётся работа по созданию нового стандарта CAdES .
В стандарте подписи CAdES исправлены такие недостатки CMS, как отсутствие штампа доверенного времени создания подписи (и, как следствие, отсутствие доказательства существования подписи на некоторый момент времени и доказательства подлинности сертификатов на момент генерации подписи), отсутствие типа содержимого подписи и отсутствие возможности долгосрочного сохранения подлинности подписи.
Форматы электронной подписи CAdES
В стандарте определены несколько форматов электронной подписи, отличающихся по степени защиты. Каждый последующий формат включает в себя предыдущий и расширяет его:
- CAdES-BES (Basic Electronic Signature);
- CAdES-EPES (Explicit Policy-based Electronic Signature);
- CAdES-T (Timestamp);
- CAdES-C (Complete);
- CAdES-X (Extended);
- CAdES-A (Archival).
Описание CAdES-BES
CAdES-BES (Basic Electronic Signature) - основной и простейший формат электронной подписи, описываемый в стандарте CAdES. Он обеспечивает базовую проверку подлинности данных и защиту их целостности. Включенные в него атрибуты (поля, содержащие определенную информацию) должны присутствовать и в других форматах CAdES.
CAdES-BES содержит следующие атрибуты:
- подписываемые данные пользователя (определено в CMS и ESS, RFC 3852 и RFC 2634). Под подписываемыми данными понимается документ или сообщение подписывающей стороны;
- набор обязательных подписываемых атрибутов (определено в CAdES). Атрибуты называются подписанными, если генерация подписи происходит от совокупности этих атрибутов и данных пользователя;
- значение цифровой подписи, вычисленное для данных пользователя и подписываемых атрибутов (определено в CMS, RFC 3852). Для вычисления этого значения обычно используются алгоритмы генерации цифровой подписи DSA (совместно с хеш-функцией SHA-1) или RSA.
Также CAdES-BES может содержать:
- набор дополнительных атрибутов;
- набор необязательных подписываемых атрибутов.
Обязательные подписываемые атрибуты CAdES-BES
Обязательными подписываемыми атрибутами в CAdES-BES являются:
Content-type
Данный атрибут определяет тип содержимого подписываемых данных. В отличие от CAdES, в CMS данный атрибут не является обязательным.
Во время представления подписываемых данных пользователю может быть необходимым добавление дополнительной информации о формате данных (изображение, аудиофайл, видеофайл, текст). Это достигается путём использования стандарта кодирования данных MIME.
Message-digest
Данный атрибут определяет хеш-сумму подписываемых данных. Она может быть вычислена как от подписываемых данных, так и от совокупности подписываемых данных и атрибутов. Для вычисления хеш-суммы обычно используется алгоритм SHA-1.
ESS signing-certificate
Данный атрибут определяет идентификатор подписывающей стороны, вычисляемый по её сертификату открытого ключа.
Многие современные схемы электронной подписи просто прикрепляют сертификат к подписи, и кто угодно может подменить этот сертификат, так что данные будут подписаны кем-то другим (атака подменой). В целях защиты от этого, в CAdES идентификатор сертификата подписывающей стороны включают в электронную подпись, чтобы при замене сертификата подпись определялась проверяющей стороной как недействительная.
Дополнительные подписываемые атрибуты CAdES-BES
В подпись CAdES-BES также могут быть включены дополнительные подписываемые атрибуты:
- signing-time (определен в CMS, RFC 3852);
- content-hints (определен в ESS, RFC 2634);
- content-reference (определен в ESS, RFC 2634);
- content-identifier (определен в ESS, RFC 2634);
- commitment-type-indication (определен в CAdES);
- signer-location (определен в CAdES);
- signer-attributes (определен в CAdES);
- content-time-stamp (определен в CAdES);
- mime-type (определен в CAdES).
Signing-time
Данный атрибут определяет момент времени, заявленный подписывающей стороной, в который предположительно совершается процесс генерации подписи. На корректность этого времени не налагается никаких требований. Поэтому получатель сообщения может доверять или не доверять этому параметру по своему усмотрению.
Content-hints
Данный атрибут предоставляет информацию о внутренних подписываемых данных многослойного сообщения, если одни данные этого сообщения встроены в другие ("намекается" на наличие этих данных, от англ. hint - намёк). Это может быть полезно, если подписываемые данные сами по себе зашифрованы, и о наличии вложенных данных заранее неизвестно.
Content-reference
Данный атрибут хранит информацию о связи одного подписываемого сообщения с другим. Он может быть использован, например, чтобы связать изначальное сообщение с ответом на него, или чтобы включить одно подписанное сообщение в другое при помощи ссылки. В последнем случае подпись первого сообщения должна содержать атрибут content-identifier. Второе сообщение связано с первым при помощи добавления в его подпись атрибута content-reference, а также атрибутов content-type, content-identifier и значения цифровой подписи первого сообщения.
Content-identifier
Данный атрибут определяет идентификатор подписанного сообщения, который может использоваться для ссылки на это сообщение в будущем (с помощью атрибута content-reference, содержащемся в сообщении, отправленном позднее).
Commitment-type-indication
Данный атрибут несёт информацию об обязательстве, которое берет на себя подписывающая сторона при генерации подписи для сообщения. Тип обязательства может быть выражен явно через использование данного атрибута, а также явно или неявно через значение (семантику) подписываемых данных.
Signer-location
Данный атрибут определяет предположительное местонахождение подписывающей стороны на момент генерации подписи.
Signer-attributes
Данный атрибут определяет дополнительные атрибуты подписанта (например, его роль в некоторой деятельности). Эти атрибуты также называются атрибутами роли (role attributes). В определенных случаях позиция подписанта в компании или организации так же важна, как и его имя. Некоторые данные (например, контракт между двумя сторонами), могут иметь юридическую силу, только если подписант занимает определенную должность (например, менеджер по продажам). Во многих случаях не важно, кто именно занимает данную должность, но необходимо быть уверенным в том, что компания снабдила подписанта полномочиями лица, занимающего данную должность. Определено два типа роли:
- Claimed Role (заявленная роль) - подписанту доверено установить свою роль без сертификата для подтверждения этой роли;
- Certified Role (сертифицированная роль) - в этом случае к атрибуту роли привязывается идентификатор атрибутного сертификата, выдаваемого специальным органом - атрибутным центром (Attribute Authority).
Content-time-stamp
Данный атрибут позволяет включить подписываемую временную отметку в подписываемые данные. С помощью этого атрибута подписывающая сторона представляет доказательство существования этих данных до момента времени, указанного в данной отметке. Перед подписанием данных можно получить доверенное время и включить его в электронную подпись. Оно может быть получено до создания подписи при подключении с службе штампов времени (time-stamp service), поэтому оно может не являться точным временем создания подписи.
Mime-type
Данный атрибут предоставляет информацию о MIME-типе подписываемого сообщения (программа, аудиофайл, изображение, текст, видеофайл) в случае использования стандарта кодирования сообщений MIME. Он схож с атрибутом content-hints, но может быть использован как для многослойных, так и для однослойных сообщений.
Неподписываемые атрибуты CAdES-BES
Помимо подписываемых атрибутов, в CAdES-BES может быть включен неподписываемый атрибут counter-signature. Он определяет факт многократного подписывания сообщения. Некоторые документы могут иметь силу, только если они несут более одной подписи. Обычно такая ситуация возникает при подписании контракта между двумя сторонами - каждая сторона должна подписать контракт. В стандарте определены два типа многократной подписи:
- Независимые подписи - порядок генерации различных подписей не важен, они генерируются параллельно;
- Встроенные подписи - порядок генерации различных подписей важен, они генерируются последовательно.
Описание CAdES-EPES. Регламент подписи
CAdES-EPES (Explicit Policy-based Electronic Signature) - это формат электронной подписи, содержащий в себе явное указание на выбранный регламент подписи.
Регламент подписи - набор правил, определяющих технические и процедурные требования к генерации и проверке электронной подписи с целью удовлетворения определенных деловых потребностей. Подпись типа CAdES-EPES содержит подписываемый атрибут signature-policy-identifier, который определяет идентификатор выбранного регламента подписи. Подписывая этот идентификатор, подписывающая сторона явно указывает, что она применила определенный регламент при её создании. Соответственно, проверяющая сторона должна осуществить проверку подписи по тому же регламенту. Сам регламент должен быть доступен в явном читабельном виде.
Форматы электронной подписи с проверочными данными
Следующие форматы электронной подписи содержат дополнительные данные, необходимые для проверки подписи. Эти данные называются проверочными и представляют собой:
- сертификаты открытых ключей;
- информацию о статусе отзыва каждого сертификата;
- доверенные штампы времени, добавленные к подписи;
- информация о регламенте подписи (при необходимости).
Описание CAdES-T. Доверенное время
CAdES-T (Timestamp) - это формат электронной подписи с доверенным временем. Доверенное время может быть указано следующими способами:
- с помощью неподписываемого атрибута signature-time-stamp, включенного в электронную подпись;
- с помощью отметки времени, представленной поставщиком доверенных услуг (Trusted Service Provider).
Иногда возникает ситуация, в которой использованные сертификаты, будучи действительными на момент генерации подписи, были отозваны после этого. Поэтому для доказательства того, что данные были подписаны до отзыва сертификатов, и что эти данные существовали на определенный момент времени, используются штампы времени. Они формируются в следующем порядке:
- Хеш данных отправляется в службу штампов времени (Time-Stamping Authority, TSA);
- В свою очередь, TSA возвращает штамп времени - подписанный закрытым ключом TSA документ, содержащий этот хеш, время генерации штампа и удостоверение TSA.
Атрибут signature-time-stamp как раз и содержит этот штамп времени. Штамп времени должен быть создан на момент, на который сертификаты и ключи ещё действительны. Если он был создан после истечения срока хотя бы одного сертификата, он не имеет ценности при проверке подписи. В случае отсутствия атрибута signature-time-stamp метка времени должна предоставляться поставщиком доверенных услуг. Включение в подпись доверенного времени предоставляет начальные возможности для обеспечения долгосрочного действия электронной подписи. Важным свойством такой подписи является то, что если подпись была признана действительной, то она продолжит быть действительной через несколько месяцев или даже лет.
Описание CAdES-C. Полный набор проверочных данных
CAdES-C (Complete) - это формат электронной подписи с полным набором проверочных данных. Она отличается от CAdES-T добавлением неподписываемых атрибутов complete-certificate-references и complete-revocation-references. Первый атрибут содержит идентификаторы всех сертификатов, использующихся при проверке подписи. Второй атрибут содержит идентификаторы сертификатов из списка отзыва сертификатов (Certificate Revocation Lists, CRL) и/или ответы протокола установления статуса сертификатов (Online Certificate Status Protocol, OCSP), которые используются для проверки подписи. Включение этих атрибутов облегчает получение сведений о сертификатах, которые необходимы проверяющей стороне для последующих проверок подписи, так как при этом данные о действительных и недействительных сертификатах уже будут содержаться в подписи.
Расширенные форматы электронной подписи
Следующие форматы расширяют формат CAdES-C добавлением некоторых неподписанных атрибутов в подпись.
CAdES-X Long
CAdES-X Long - формат долгосрочной расширенной подписи. Этот формат добавляет в CAdES-C атрибуты certificate-values и revocation-values, которые представляют собой полные данные сертификатов и списки отзыва сертификатов. Этим обеспечивается доступ ко всей информации о сертификатах и отзывах, необходимых для проверки подписи CAdES-C (даже если их исходный источник недоступен), и предотвращается возможность утери этой информации.
CAdES-X Type 1
Данный формат добавляет в CAdES-C атрибут CAdES-C-time-stamp, который содержит штамп времени на всей подписи CAdES-C. Это обеспечивает целостность и наличие доверенного времени во всех элементах подписи. Тем самым, этот атрибут позволяет защитить сертификаты, списки отзыва сертификатов и ответы протокола установления статуса сертификатов, информация о которых записана в подписи, при компрометации ключа центра сертификации, ключа издателя списка отзыва сертификатов или ключа издателя протокола установления статуса сертификатов.
CAdES-X Type 2
Этот формат подписи отличается от CAdES-X Type 1 только тем, что штамп времени ставится не на всю подпись CAdES-C, а только на полные ссылки на сертификаты и списки отзыва сертификатов.
CAdES-X Long Type 1,2
Форматы CAdES-X Long Type 1 и CAdES-X Long Type 2 представляют собой объединение формата CAdES-X Long и соответственно CAdES-X Type 1 и CAdES-X Type 2.
CAdES-A
CAdES-A (Archival) - формат электронной подписи, сформированный на основе CAdES-X Long Type 1 или Type 2 путём добавления одного или нескольких атрибутов archive-time-stamp, представляющих собой архивные штампы времени. Данный формат используется для архивации долгосрочных подписей.
Со временем стойкость криптографических алгоритмов ухудшается в связи с развитием методов криптоанализа и вычислительной отрасли. Периодические архивные штампы времени защищают всё содержимое подписи при выявлении уязвимостей используемых криптографических хеш-функций, при взломе используемых криптографических алгоритмов и при компрометации ключей. Последовательность штампов времени может предоставить защиту от подделки подписи при условии, что эти штампы были применены до компрометации ключа службы штампов времени. Для этого необходимо, чтобы службы штампов времени использовали длинные ключи для алгоритмов генерации подписи (на момент написания последней версии стандарта подписи CAdES минимальная длина ключа для подписи RSA составляла 2048 бит), или более стойкие криптографические алгоритмы. Периодическое наложение штампов времени на подпись позволяет сохранить её подлинность на очень большие периоды времени.