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.