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.