Я читаю о XML-подписи на странице w3.
Насколько я понимаю, для подписи XML:
- Создайте канонический XML XML-данных, которые необходимо подписать.
- Создайте хэш (дайджест) канонизированных XML-данных, используя алгоритм, упомянутый в
<DigestMethod/>
. Хэш пойдет внутрь<DigestValue>
- Шифрование выше использует алгоритм, упомянутый в
<SignatureMethod/>
. Этот алгоритм будет принимать закрытый ключ отправителя в качестве входных данных. Подпись будет внутри<SignatureValue>
Для проверки (на стороне получателя):
- Используйте открытый ключ отправителя в содержимом
<SignatureValue>
, чтобы получить хэш. - Вычислить хэш данных (xPath/ссылку на данные можно найти в
<Reference>
), используя алгоритм<DigestMethod>
- Проверьте, совпадает ли это с хэшем в
<DigestValue>
Мои вопросы:
- Правильно ли я понимаю?
- Какова роль
<KeyInfo>
в проверке подписи, если для проверки достаточно открытого ключа отправителя?