Podpis cyfrowy umożliwia potwierdzenie, że nikt nie modyfikuje Twoich danych. Zapewnia autentyczność i integralność podpisanych danych, ale nie zapewnia ich tajemnicy. Jest asymetryczny, co oznacza, że wykorzystuje parę kluczy (klucz publiczny i prywatny).
Podpisy mają te właściwości:
- Autentyczność: bez klucza prywatnego nie można utworzyć podpisu, którego poprawność będzie sprawdzać
PublicKeyVerify.Verify(signature, message)
. - Asymetryczna: podczas tworzenia podpisu używany jest inny klucz niż jego weryfikacja. Dzięki temu możesz dystrybuować klucz publiczny, aby umożliwić weryfikację podpisów osobom, które nie mogą samodzielnie tworzyć podpisów.
Jeśli nie potrzebujesz asymetrii, rozważ użycie prostszego i wydajniejszego narzędzia MAC.
Funkcjonalność podpisów cyfrowych jest reprezentowana w Tink jako para podstawowych elementów:
- PublicKeySign na potrzeby danych podpisywania.
- PublicKeyVerify do weryfikacji podpisu.
Wybierz typ klucza
W większości przypadków zalecamy używanie ECDSA_P256, ale jest wiele opcji. Ogólnie rzecz biorąc, poniższe stwierdzenia są prawdziwe:
- ECDSA_P256 to najczęściej używana opcja i rozsądne rozwiązanie domyślne. Pamiętaj jednak, że podpisy ECDSA są możliwe do usunięcia.
- ED25519 tworzy podpisy deterministyczne i zapewnia większą wydajność niż ECDSA_P256.
- RSA_SSA_PKCS1_3072_SHA256_F4 tworzy podpisy deterministyczne i zapewnia najlepszą wydajność weryfikacji (ale jest znacznie wolniejsze niż ECDSA_P256 czy ED25519).
Minimalne gwarancji bezpieczeństwa
- Dane do podpisania mogą mieć dowolną długość
- 128-bitowy poziom bezpieczeństwa przed adaptacyjnymi atakami typu „wybrana wiadomość” w przypadku schematów opartych na krzywych eliptycznych
- 112-bitowy poziom zabezpieczeń przed adaptacyjnym atakami opartymi na wybranej wiadomości w przypadku schematów RSA (obsługuje klucze 2048-bitowe)
Przykład zastosowania
Zapoznaj się z artykułem Chcę cyfrowo podpisywać dane.
Wydolność
Schemat podpisu jest elastyczny, jeśli atakujący może utworzyć inny prawidłowy podpis dla już podpisanej wiadomości. Nie stanowi to problemu w większości sytuacji, ale w niektórych przypadkach programiści domyślnie zakładają, że prawidłowe podpisy są unikalne, co może prowadzić do nieoczekiwanych wyników.