Podpis cyfrowy

Pierwotny typ podpisu cyfrowego umożliwia sprawdzenie, czy nikt nie wprowadził zmian w Twoich danych. Zapewnia autentyczność i integralność danych, ale nie ich poufność. Jest to algorytm asymetryczny, czyli wykorzystuje parę kluczy (klucz publiczny i klucz prywatny).

Pierwotny element podpis cyfrowy ma te właściwości:

  • Autentyczność: niemożliwe jest utworzenie podpisu, który PublicKeyVerify.Verify(signature, message) zweryfikuje, chyba że masz klucz prywatny.
  • Asymetryczny: do utworzenia podpisu używany jest inny klucz niż do jego weryfikacji. Dzięki temu możesz rozpowszechniać klucz publiczny, aby weryfikować podpisy w przypadku podmiotów, które nie mogą samodzielnie tworzyć podpisów.

Jeśli nie potrzebujesz asymetrii, rozważ użycie prostszego i bardziej wydajnego prymitywu MAC.

Funkcje podpisów cyfrowych są w Tink reprezentowane przez parę prymitywów:

  • PublicKeySign do podpisywania danych
  • PublicKeyVerify do weryfikacji podpisu

Wybieranie typu klucza

W większości przypadków zalecamy używanie ECDSA_P256, ale istnieje wiele opcji. Ogólnie obowiązują następujące zasady:

  • ECDSA_P256 to najczęściej używana opcja i domyślna opcja. Pamiętaj jednak, że podpisy ECDSA są zmienialne.
  • ED25519 tworzy podpisy deterministyczne i zapewnia lepszą wydajność niż ECDSA_P256.
  • RSA_SSA_PKCS1_3072_SHA256_F4 tworzy podpisy deterministyczne i zapewnia najlepszą wydajność weryfikacji (ale podpisywanie jest znacznie wolniejsze niż w przypadku ECDSA_P256 lub ED25519).

Minimalne gwarancje bezpieczeństwa

  • Dane do podpisania mogą mieć dowolną długość.
  • 128-bitowy poziom zabezpieczeń przed dostosowywanymi atakami typu „wybrany komunikat” w przypadku schematów opartych na krzywej eliptycznej
  • 112-bitowy poziom zabezpieczeń przed atakami dostosowanymi do wybranych wiadomości w schematach opartych na RSA (umożliwia używanie kluczy 2048-bitowych)

Złożoność

Schemat podpisu jest podatny na manipulację, jeśli atakujący może utworzyć inny prawidłowy podpis dla już podpisanej wiadomości. W większości przypadków nie jest to problemem, ale w niektórych przypadkach programiści domyślnie uznają, że prawidłowe podpisy są unikalne, co może prowadzić do nieoczekiwanych wyników.

Przykładowy przypadek użycia

Zobacz, jak podpisać dane cyfrowo.