Подпись XML - причины подписывать элемент KeyInfo
Согласно Спецификации подписи XML (3.2.2 "Проверка подписи") элемент KeyInfo может быть подписан:
"Обратите внимание, что KeyInfo (или некоторая его преобразованная версия) может быть подписана через элемент Reference".
Здесь мы можем увидеть пример xml с такой подписью.
Есть ли причины подписывать сертификат самостоятельно?
Какие риски безопасности это устраняет?
1 ответ
Взгляните на этот разъясняющий раздел об атрибутах signingCertificate
в XAdES. ETSI XAdES построен на основе XMLDSig, чтобы удовлетворить требования расширенных подписей, которые остаются действительными в течение длительных периодов времени.
signingCertificate
является обязательным, когда ds:KeyInfo
отсутствует или не содержит сертификат, используемый для подписи, и служит той же цели
7.2.2 Элемент SigningCertificate
Во многих реальных средах пользователи смогут получать от разных ЦС или даже от одного и того же ЦС разные сертификаты, содержащие один и тот же открытый ключ для разных имен. Основным преимуществом является то, что пользователь может использовать один и тот же закрытый ключ для разных целей. Многократное использование закрытого ключа является преимуществом, когда смарт-карта используется для защиты закрытого ключа, поскольку хранение смарт-карты всегда ограничено. Когда задействовано несколько ЦС, каждый отдельный сертификат может содержать различную идентификационную информацию, например, в качестве гражданина или сотрудника компании. Таким образом, когда закрытый ключ используется для различных целей, сертификат необходим для уточнения контекста, в котором закрытый ключ использовался при создании подписи. Там, где существует возможность многократного использования закрытых ключей, подписывающему лицу необходимо указать верификатору точный сертификат, который будет использоваться.
Многие современные схемы просто добавляют сертификат после подписанных данных и, таким образом, подвергаются различным атакам замещения. Примером атаки замещения является "плохой" центр сертификации, который выдаст сертификат кому-то с открытым ключом другого человека. Если сертификат от подписавшего был просто добавлен к подписи и, следовательно, не защищен подписью, любой мог заменить один сертификат другим, и сообщение могло бы быть подписано кем-то другим. Чтобы противостоять такого рода атакам, идентификатор сертификата должен быть защищен цифровой подписью подписавшего.