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 Digital Signature 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 podstawowych:
- PublicKeySign do podpisywania danych.
- PublicKeyVerify do weryfikacji podpisu.
Jeśli klucz prywatny znajduje się w miejscu, do którego nie można łatwo wysłać wiadomości, np. w module HSM lub usłudze KMS, zapoznaj się z sekcją Prehash i SignPrehash, która dzieli podpisywanie na etap mieszania tylko za pomocą klucza publicznego i etap podpisywania tylko za pomocą klucza prywatnego.
Wybierz typ klucza
W większości przypadków zalecamy używanie algorytmów ML_DSA_44 lub ECDSA_P256, ale dostępnych jest wiele opcji. Ogólnie rzecz biorąc, obowiązuje ta zasada:
- Algorytm ML-DSA-44 jest odporny na złamanie za pomocą komputera kwantowego. Aktywnie wdrażamy tę funkcję i jest ona obecnie zalecana w przypadku języków programowania, w których jest dostępna.
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 wybranymi wiadomościami w przypadku schematów opartych na krzywych eliptycznych
- Poziom bezpieczeństwa 112 bitów w przypadku ataków adaptacyjnych z wybranym komunikatem w schematach opartych na RSA (umożliwia stosowanie kluczy 2048-bitowych)
Kowalność
Schemat podpisu jest podatny na modyfikacje, 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 sygnatury są unikalne, co może prowadzić do nieoczekiwanych wyników.
Przypadek użycia
Zobacz sekcję Chcę podpisać dane cyfrowo.