Цифровая подпись

Цифровая подпись позволяет убедиться, что никто не подделывает ваши данные. Он обеспечивает подлинность и целостность подписанных данных, но не их секретность. Он асимметричен, то есть использует пару ключей (открытый ключ и закрытый ключ).

Сигнатуры обладают следующими свойствами:

  • Аутентичность : невозможно создать подпись, для которой будет проверяться PublicKeyVerify.Verify(signature, message) , если у вас нет закрытого ключа.
  • Асимметричный : для создания подписи используется другой ключ, чем для ее проверки. Это позволяет вам распространять открытый ключ для проверки подписей среди сторон, которые не могут создавать подписи самостоятельно.

Если вам не нужна асимметрия, рассмотрите возможность использования вместо этого более простого и эффективного MAC .

Функционал цифровых подписей представлен в Tink парой примитивов:

  • PublicKeySign для подписи данных
  • PublicKeyVerify для проверки подписи

Выберите тип ключа

Мы рекомендуем использовать ECDSA_P256 в большинстве случаев, но существует множество вариантов. В целом справедливо следующее:

  • ECDSA_P256 — наиболее широко используемый параметр и разумный вариант по умолчанию. Однако обратите внимание, что подписи ECDSA являются гибкими .
  • ED25519 создает детерминированные подписи и обеспечивает лучшую производительность, чем ECDSA_P256.
  • RSA_SSA_PKCS1_3072_SHA256_F4 создает детерминированные подписи и обеспечивает наилучшую производительность проверки (но подписывание происходит намного медленнее, чем ECDSA_P256 или ED25519).

Минимальные гарантии безопасности

  • Подписываемые данные могут иметь произвольную длину.
  • 128-битный уровень безопасности против адаптивных атак по выбранному сообщению для схем на основе эллиптических кривых
  • 112-битный уровень безопасности против адаптивных атак по выбранному сообщению для схем на основе RSA (допускаются 2048-битные ключи)

Пример варианта использования

См. раздел «Я хочу подписать данные цифровой подписью» .

Податливость

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