Есть ли смысл использовать CAdES вместо XAdES для расширенных электронных подписей?

Я не смог найти никакой причины, по которой кто-то должен предпочесть реализовать программное решение электронной подписи, ориентированное на CAdES, а не ориентированное на XAdES.

В Интернете есть гораздо больше открытых библиотек, вариантов реализации и примеров XAdES, но все же я не верю, что это причина, по которой люди решают использовать XAdES вместо CAdES.

Это потому, что XAdES ориентирован на XML, а разработчики программного обеспечения склонны любить все, что связано с XML? Есть ли сценарий, в котором CAdES является лучшим вариантом для использования вместо XAdES?

Для справки:

  • CAdES — это CMS/PKCS#7 в расширенной форме (поддерживает отметку времени)
  • XAdES — это XML-DSig в расширенной форме (поддерживает отметку времени)



Ответы (2)


Одним из преимуществ CAdES является то, что он обычно вызывает меньше проблем с совместимостью, поскольку стандарт XML-DSig допускает множество параметров, включая XSLT, XPointer Framework, канонизацию XML и многое другое. CAdES был бы менее требователен, если бы имел дело только с подписями, строго закодированными DER (картина меняется, когда вам нужно иметь дело с кодировками BER).

CAdES превосходит XAdES в сценариях, где необходимо создавать «прикрепленные» подписи к большим блокам данных (вы хотите, чтобы результатом был один блок данных, содержащий как исходные данные, так и подпись). Эквивалентом прикрепленной подписи CAdES (исходные входные данные хранятся в элементе EncapContentInfo структуры CMS) является Подпись на конверте. Если вам необходимо создать такую ​​​​подпись, существует высокая вероятность того, что вы столкнетесь с проблемами при работе с большими входными данными, если ваша реализация XAdES основана на DOM (те, о которых я знаю) - ваша машина в конечном итоге закончится памяти.

Производительность будет еще одним аргументом в пользу CAdES. Вычисление дайджеста сообщения CAdES обычно выполняется непосредственно на необработанных байтах входных данных, XML-подписи, которые вычисляются в XML-документах, влекут за собой много накладных расходов, таких как оценка выражений XPath, преобразования XSLT, кодирование/декодирование Base64 и канонизация. и, возможно, несколько элементов Transform.

Если вы создаете систему архивации для долгосрочной проверки подписей, в которой хранится много подписей, CAdES является предпочтительным форматом из-за его компактности по сравнению с текстовым форматом XAdES.

person emboss    schedule 04.07.2011
comment
Спасибо за отличный ответ! Мы собираемся подробнее изучить различные сценарии, которые вы упомянули. - person ABE; 05.07.2011

CADES вместо XAdES:

  • Меньше вариантов реализации
  • (Способ) Легче проверить
  • Работает с любыми данными, включая XML.
  • Проще для ASiC
  • Windows API более надежен для его создания
  • Нет необходимости в сложных канонизациях
  • Может использоваться с S/MIME
  • Позволяет использовать несколько подписей
  • Используется в PAdES
  • Быстрее

XAdES вместо CAdES:

  • Подписанные XML-файлы по-прежнему могут быть прочитаны приложениями, не поддерживающими шифрование.
  • Несколько элементов могут быть подписаны за один проход
  • Вам не нужен компилятор ASN.1

Единственная причина, по которой я бы использовал XAdES, — это первое, личное мнение. Но затем неосведомленное приложение может изменить файл, сделав подпись недействительной. Кроме того, использование типов *AdES означает, что вы хотите быть совместимым с правилами ЕС, и это обычно означает PDF-документы, подписанные с помощью PAdES. Когда вы просто хотите подписать электронное письмо, CAdES не очень полезен, поскольку он не проверяется большинством клиентов S/MIME. AdES — это европейские законы, поэтому не так много американских приложений знают об этом.

Так же эти формы не просто старые с отметками времени, там много аддонов. См. https://www.w3.org/TR/XAdES/ и https://www.secureblackbox.com/kb/articles/8-CAdES.rst.

Я также реализовал их на C++ для Windows, проверьте здесь и здесь для моего полного набора инструментов.

person Michael Chourdakis    schedule 09.09.2018