Как получатель узнает, какой алгоритм хеширования использовать для данных, полученных от отправителя в цифровой подписи

Я понял процесс цифровой подписи

  1. отправитель дает ответ в виде data + hash of data (хешируется алгоритмом, скажем, X и подписывается закрытым ключом)
  2. получатель вычисляет хеш данных, которые получатель получил с шага 1, используя алгоритм X.
  3. Если хэш, полученный в качестве ответа на шаге 1 от отправителя (расшифровать pt с помощью открытого ключа) и получатель хеша, рассчитанный на основе полученных данных, одинаков, мы хороши, но если он отличается, данные будут подделаны.

до сих пор все в порядке. но мой вопрос в том, как получатель или отправитель решает, какой алгоритм использовать для хеширования. в приведенном выше случае, каково значение X. Как это решить?

Согласно моему пониманию, получатель должен сначала указать отправителю, какой алгоритм хэширования он должен использовать. я прав?

Пожалуйста, дайте мне знать взгляды на это.

1 ответ

Цифровая подпись включает в себя как алгоритм дайджеста, так и значение дайджеста, закодированное в ASN.1. См. RFC 3447 PKCS # 1 v2.1.

A.2.4 RSASSA-PKCS1-v1_5

DigestInfo ::= SEQUENCE {
      digestAlgorithm DigestAlgorithm,
      digest OCTET STRING
  }

Таким образом, в процессе проверки можно определить, является ли алгоритм digestAlgorithm ожидаемым.

Но обычно дело в том, что алгоритм подписи включается в качестве атрибута в сам формат подписи, так что часть проверки может применить соответствующий.

Пример XMLSignature XMLDSig

JWT / JWS подпись JWT

Если вы используете формат, который не включает алгоритм подписи, отправитель и получатель должны согласовать это предварительно

Другие вопросы по тегам