Подпись XML - причины для подписи элемента KeyInfo

Согласно Спецификации подписи XML (3.2.2 "Проверка подписи" ), элемент KeyInfo может быть подписан:

"Примечание. KeyInfo (или его преобразованная версия) может быть подписано с помощью элемента Reference."

Здесь мы можем увидеть пример xml с такой подписью.

Есть ли причины подписывать сертификат отдельно?

Какие риски безопасности он устраняет?


person dimmoborgir    schedule 10.01.2017    source источник


Ответы (1)


Взгляните на этот поясняющий раздел об атрибуте signingCertificate в XAdES. ETSI XAdES построен на основе XMLDSig для установления требований к расширенным подписям, которые остаются действительными в течение длительного периода времени.

signingCertificate является обязательным, если ds:KeyInfo отсутствует или не содержит сертификата, используемого для подписи, и служит той же цели.

7.2.2 Элемент SigningCertificate

Во многих реальных средах пользователи смогут получить из разных ЦС или даже из одного и того же ЦС разные сертификаты, содержащие один и тот же открытый ключ для разных имен. Основное преимущество заключается в том, что пользователь может использовать один и тот же закрытый ключ для разных целей. Многократное использование закрытого ключа является преимуществом, когда для защиты закрытого ключа используется смарт-карта, поскольку объем памяти смарт-карты всегда ограничен. Когда задействовано несколько ЦС, каждый отдельный сертификат может содержать разные идентификаторы, например. гражданином или сотрудником компании. Таким образом, когда закрытый ключ используется для различных целей, сертификат необходим для уточнения контекста, в котором закрытый ключ использовался при создании подписи. Там, где существует возможность многократного использования закрытых ключей, подписывающая сторона должна указать верификатору, какой именно сертификат будет использоваться.

Многие современные схемы просто добавляют сертификат после подписанных данных и, таким образом, подвергаются различным атакам подмены. Примером атаки подстановки является плохой ЦС, который выдает сертификат кому-то с чужим открытым ключом. Если сертификат от подписавшего был просто добавлен к подписи и, таким образом, не защищен подписью, любой можно заменить один сертификат другим, и сообщение будет выглядеть подписанным кем-то другим. Для противодействия такого рода атакам идентификатор сертификата должен быть защищен цифровой подписью подписывающей стороны.

person pedrofb    schedule 10.01.2017
comment
Я работал с этими подписями и сертификатами в течение 5 лет, но не знал о нескольких сертификатах с одним и тем же ключом или о такой контратаке. Всегда можно узнать что-то новое :) - person Thuan; 10.01.2017
comment
@pedrofb, но если есть плохой (и доверенный) ЦС и он выдает сертификат для злоумышленника, злоумышленник может заменить как сертификат, и подпись, которая также защищает этот сертификат. Подписание сертификата не помогает в случае плохого CA, не так ли? - person dimmoborgir; 10.01.2017
comment
Действительно @dimmoborgir. Вы могли защитить себя, только предварительно отправив открытый ключ получателю для двойной проверки. Плохой центр сертификации не может создать действительную подпись, поскольку он не владеет закрытым ключом. Но этот ЦС трудно считать доверенным. Требования очень жесткие. Взгляните на требования к поставщикам услуг доверия, выдающим сертификаты: etsi.org/deliver/etsi_en/319400_319499/31941101/01.00.00_20/ - person pedrofb; 10.01.2017
comment
@педрофб. Если плохой ЦС не является доверенным (получателем), то замена исходного сертификата (доверенного) другим (ненадежным) может быть легко обнаружена получателем (просто проверьте действительность сертификата). Таким образом, описанная атака подстановки не увенчается успехом. Даже без дополнительной подписи. - person dimmoborgir; 11.01.2017
comment
Если ЦС не является доверенным, вы не должны принимать никакие подписи этого ЦС по умолчанию. Таким образом, атака подстановки не будет иметь никакого эффекта, поскольку получатель отклонит все сертификаты (все они ненадежны). Только те сертификаты, которые ранее были отправлены получателю, как я прокомментировал выше, могут быть приняты. - person pedrofb; 11.01.2017
comment
Тогда я не могу понять, какова цель подписания сертификата. Атака заменой не будет иметь никакого эффекта даже без подписи KeyInfo. О, может есть смысл подписать KeyInfo если это не сертификат? Сертификаты уже защищены (содержат внутри подпись доверенного ЦС), а другие типы, такие как KeyName, KeyValue, X509IssuerSerial, X509SubjectName — нет. - person dimmoborgir; 11.01.2017
comment
@dimmoborgir ключ к пониманию атаки подстановки - ваш первый комментарий. Плохой и надежный ЦС. Я думаю, что не прокомментировал с точностью. Центр сертификации может использовать открытый ключ отправителя для выдачи действительного сертификата, но не может заменить подпись, поскольку у него нет закрытого ключа, поэтому подписанный KeyInfo не может быть заменен если подписан. Если KeyInfo не подписан, его может заменить плохой и надежный ЦС. Таким образом, утверждение и подпись вашего первого комментария невозможно - person pedrofb; 11.01.2017