Podpis cyfrowy

Kryptograficzny mechanizm potwierdzający autentyczność i integralność dokumentu lub wiadomości za pomocą klucza prywatnego nadawcy. Pozwala wykryć, czy dane zostały zmienione.

Podpis cyfrowy to kryptograficzny mechanizm, który potwierdza, że dany dokument lub wiadomość naprawdę pochodzi od konkretnego nadawcy (autentyczność) i nie został po drodze zmieniony nawet o jeden bit (integralność). Nadawca podpisuje dane swoim kluczem prywatnym, a każdy może zweryfikować podpis przy użyciu odpowiadającego mu klucza publicznego. To trochę jak nieusuwalna pieczęć: nie da się jej podrobić bez klucza prywatnego i nie da się dyskretnie zmienić zawartości po jej przyłożeniu.

Nie myl tego z prostym zaszyfrowaniem pliku. Podpis nie ukrywa treści, tylko ją uwierzytelnia. W praktyce nie podpisujesz całego dokumentu, lecz jego skrót (hash), np. SHA-256. Funkcja skrótu zamienia dowolnie duży plik na krótki, stały ciąg znaków, a ten skrót szyfrowany jest kluczem prywatnym. Weryfikator liczy hash z otrzymanych danych, odszyfrowuje podpis kluczem publicznym i porównuje oba skróty. Zgadzają się? Podpis ważny. Różnią się? Ktoś majstrował przy treści albo podpis nie pasuje do tego klucza.

Dochodzi do tego niezaprzeczalność (non-repudiation): skoro tylko nadawca ma swój klucz prywatny, nie może później twierdzić, że to nie on podpisał. Dlatego podpisy cyfrowe są fundamentem TLS/HTTPS, podpisywania kodu, e-maili (S/MIME), a w UE także podpisów elektronicznych zgodnych z rozporządzeniem eIDAS.

Przykład z praktyki

Najprostszy scenariusz, który możesz odpalić sam, to GPG. Podpisujesz plik kluczem prywatnym:

gpg --output dokument.sig --detach-sign dokument.pdf

Odbiorca, mając Twój klucz publiczny, sprawdza:

gpg --verify dokument.sig dokument.pdf

Jeśli ktoś zmieni choćby przecinek w PDF-ie, weryfikacja zwróci BAD signature. Ten sam mechanizm widzisz przy git commit -S (podpisane commity z zieloną plakietką „Verified” na GitHubie) czy przy aktualizacjach systemu, gdzie menedżer pakietów sprawdza podpisy paczek przed instalacją.

Częste błędy i mity

  • „Podpis = szyfrowanie.” Nie. Podpis chroni autentyczność i integralność, a nie poufność. Treść nadal jest jawna, dopóki dodatkowo jej nie zaszyfrujesz.
  • Weryfikacja podpisu to nie to samo co zaufanie do klucza. Możesz mieć poprawny matematycznie podpis kluczem, który należy do oszusta. Dlatego istnieją certyfikaty i urzędy certyfikacji (CA).
  • Wyciek klucza prywatnego to katastrofa. Kto go ma, ten podpisuje się za Ciebie. Trzymaj go w sprzętowym kluczu (np. YubiKey) lub HSM, nigdy w repozytorium.
  • Przestarzałe algorytmy. MD5 i SHA-1 są złamane pod kątem kolizji. Używaj SHA-256 i kluczy RSA 3072+ albo krzywych ECC (Ed25519).

Pojęcia powiązane: klucz prywatny i publiczny, kryptografia asymetryczna, funkcja skrótu (hash), certyfikat cyfrowy, PKI, urząd certyfikacji (CA), TLS, eIDAS.