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

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

Примитив цифровой подписи обладает следующими свойствами:

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

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

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

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

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

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

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

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

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

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

Пластичность

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

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

Видите ли, я хочу подписать данные цифровой подписью .