Назначение KeyInfo в XML-подписи - PullRequest
0 голосов
/ 05 мая 2018

Я читаю о подписи XML со страницы w3

Насколько я понимаю, подписать XML:

  1. Создание канонического XML-данных XML для подписи.
  2. Создайте хэш (дайджест) канонизированных XML-данных, используя алгоритм, упомянутый в <DigestMethod/>. Хеш пойдет внутрь <DigestValue>
  3. Шифрование выше использует алгоритм, указанный в <SignatureMethod/> Этот алгоритм будет принимать закрытый ключ отправителя в качестве входных данных. Подпись будет идти внутрь <SignatureValue>

Для проверки (в конце получателя):

  1. Используйте открытый ключ отправителя для содержимого <SignatureValue>, чтобы получить хеш.
  2. Рассчитать хеш данных (xPath / ссылку на данные можно найти в <Reference>) с использованием алгоритма <DigestMethod>
  3. Проверьте, совпадает ли это с хешем в <DigestValue>

Мои вопросы:

  1. Правильно ли мое понимание?
  2. Какова роль <KeyInfo> в проверке подписи, если для проверки достаточно открытого ключа отправителя?

Ответы [ 2 ]

0 голосов
/ 05 мая 2018

Насколько я понимаю, подписать XML:

  1. Создание канонического XML-данных XML для подписи.

  2. Создайте хеш (дайджест) канонизированных XML-данных, используя алгоритм, упомянутый в. Хеш пойдет внутрь

  3. Шифрование выше использует алгоритм, упомянутый в. Этот алгоритм будет принимать закрытый ключ отправителя в качестве входных данных. Подпись будет идти внутрь

Неправильно, см. 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>, чтобы точно знать, какой сертификат подписал документ (открытый ключ может быть включен в несколько сертификатов)

0 голосов
/ 05 мая 2018

Какова роль <KeyInfo> в проверке подписи, если для проверки достаточно открытого ключа отправителя?

Ключ должен быть где-то, верно? И это место. Он будет содержать ключ для проверки подписи. Как указано в спецификации, можно пропустить элемент <KeyInfo>:

Если KeyInfo опущено, ожидается, что получатель сможет идентифицировать ключ на основе контекста приложения.

Поэтому, когда <KeyInfo> отсутствует, приложение / пользователь должны получить ключ откуда-то еще.

...