Насколько я понимаю, подписать XML:
Создание канонического XML-данных XML для подписи.
Создайте хеш (дайджест) канонизированных XML-данных, используя алгоритм, упомянутый в. Хеш пойдет внутрь
Шифрование выше использует алгоритм, упомянутый в. Этот алгоритм будет принимать закрытый ключ отправителя в качестве входных данных. Подпись будет идти внутрь
Неправильно, см. 3.1.2 Генерация подписи раздел ссылки, которую вы указали.
<SignatureValue>
рассчитывается по канонизированному содержимому узла <SignedInfo>
, который включает в себя <SignatureMethod>
, <CanonicalizationMethod>
и ссылки. Элемент <Reference>
содержит <DigestMethod>
и <DigestValue>
Документ не зашифрован, он подписан секретным ключом. Он включает в себя аналогичную криптографическую операцию, но механизм заполнения отличается. См https://crypto.stackexchange.com/questions/15997/is-rsa-encryption-with-a-private-key-the-same-as-signature-generation
Какова роль <KeyInfo>
в проверке подписи, если для проверки достаточно открытого ключа отправителя?
Содержит сертификат подписи, соответствующий закрытому ключу, используемому для подписи документа.
Проверяющая сторона может проверить подпись, используя открытый ключ подписавшего, не извлекая ее из элемента <KeyInfo>
, но это означает, что получатель сохранил открытые ключи каждого подписавшего. Проверяющая сторона обычно имеет доверенный список центра сертификации и проверяет, что сертификат подписи был выдан одним из этих органов.
Обратите внимание, что ссылка на <KeyInfo>
также включена в раздел <SignedInfo>
, чтобы точно знать, какой сертификат подписал документ (открытый ключ может быть включен в несколько сертификатов)