Podpis cyfrowy

Funkcja podpisu cyfrowego umożliwia sprawdzenie, czy nikt nie manipulował Twoimi danymi. Zapewnia autentyczność i integralność podpisanych danych, ale nie ich poufność. Jest to szyfrowanie asymetryczne, co oznacza, że używa pary kluczy (klucza publicznego i klucza prywatnego).

Element podstawowy Podpis cyfrowy ma te właściwości:

  • Autentyczność: nie można utworzyć podpisu, który zostałby zweryfikowany przez PublicKeyVerify.Verify(signature, message), jeśli nie masz klucza prywatnego.
  • Asymetryczny: do utworzenia podpisu używany jest inny klucz niż do jego weryfikacji. Dzięki temu możesz rozpowszechniać klucz publiczny do weryfikacji podpisów wśród podmiotów, które nie mogą samodzielnie tworzyć podpisów.

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

Funkcjonalność podpisów cyfrowych jest reprezentowana w Tink jako para elementów pierwotnych:

  • PublicKeySign do podpisywania danych.
  • PublicKeyVerify do weryfikacji podpisu.

Wybierz typ klucza

W większości przypadków zalecamy używanie algorytmów ML_DSA_65 lub ECDSA_P256, ale dostępnych jest wiele opcji. Ogólnie rzecz biorąc, obowiązują te zasady:

W przypadku tych algorytmów niepostkwantowych w najbliższej przyszłości konieczna będzie zmiana typu klucza.

  • ECDSA_P256 to najczęściej używana opcja i rozsądna wartość domyślna. Pamiętaj jednak, że podpisy ECDSA są podatne na modyfikacje.
  • ED25519 tworzy deterministyczne podpisy i zapewnia lepszą wydajność niż ECDSA_P256.
  • RSA_SSA_PKCS1_3072_SHA256_F4 tworzy deterministyczne podpisy 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 bezpieczeństwa przed adaptacyjnymi atakami z wybranym komunikatem w przypadku schematów opartych na krzywych eliptycznych
  • poziom bezpieczeństwa 112 bitów w przypadku ataków z wybranym komunikatem adaptacyjnym w schematach opartych na RSA (umożliwia stosowanie kluczy 2048-bitowych);

Kowalność

Schemat podpisu jest podatny na ataki, jeśli osoba atakująca może utworzyć inny prawidłowy podpis dla już podpisanego komunikatu. W większości przypadków nie stanowi to problemu, ale w niektórych sytuacjach programiści zakładają, że prawidłowe podpisy są unikalne, co może prowadzić do nieoczekiwanych wyników.

Przypadek użycia

Zobacz sekcję Chcę podpisać cyfrowo dane.