Definicja PGP
PGP (Pretty Good Privacy) to protokół szyfrowania i podpisu cyfrowego dla poczty elektronicznej i plików. Treść jest szyfrowana losowym kluczem sesji, a ten klucz zamyka klucz publiczny odbiorcy. Dziś rolę wspólnej specyfikacji pełni standard OpenPGP, opisany w RFC 9580, a najbardziej znaną otwartą implementacją jest GnuPG.
Pierwszą wersję programu PGP opublikował w 1991 roku Phil Zimmermann, ale z czasem nazwa przestała oznaczać jeden program i dziś obejmuje format wiadomości i kluczy oraz rodzinę zgodnych ze sobą implementacji. Format opisuje otwarty standard OpenPGP, a narzędzia takie jak GnuPG tylko go realizują, więc PGP to protokół i format, a GPG jedna z jego implementacji. Ten sam skrót noszą też podmioty i usługi niezwiązane z kryptografią, ale w bezpieczeństwie informacji oznacza właśnie szyfrowanie i podpis.
Jak to działa
PGP łączy dwa rodzaje kryptografii, bo każdy ma inną wadę. Szyfr symetryczny jest szybki, ale wymaga wspólnego sekretu, a kryptografia z kluczem publicznym obywa się bez niego, lecz jest kosztowna przy dużych danych. Stąd szyfrowanie hybrydowe:
- Program nadawcy losuje symetryczny klucz sesji, osobny dla każdej wiadomości.
- Tym kluczem szyfruje treść.
- Klucz sesji zamyka kluczem publicznym odbiorcy. Przy kilku adresatach robi to osobno dla każdego z nich.
- Odbiorca otwiera klucz sesji swoim kluczem prywatnym, a dopiero potem odszyfrowuje treść.
Podpis cyfrowy działa w przeciwną stronę: nadawca liczy skrót wiadomości i podpisuje go swoim kluczem prywatnym, a każdy, kto ma klucz publiczny autora, może ten podpis sprawdzić. Zgodny podpis potwierdza, że wiadomość podpisał posiadacz klucza prywatnego i że treść nie zmieniła się od podpisania, ale nie mówi, kim ta osoba jest. Na to pytanie odpowiada model zaufania opisany niżej.
Format dopełniają dwa elementy: opcjonalna kompresja, którą stosuje się przed zaszyfrowaniem, oraz "ASCII armor", czyli zapis danych binarnych jako drukowalnych znaków ASCII w kodowaniu base64, dzięki któremu szyfrogram da się wkleić do e-maila albo przesłać kanałem tekstowym.
Struktura i klasyfikacja
Klucz PGP nie jest pojedynczym ciągiem znaków, tylko zestawem powiązanych elementów:
| Element | Rola |
|---|---|
| Klucz główny | Tożsamość właściciela. Poświadcza własne podklucze i identyfikatory użytkownika. |
| Podklucz | Klucz do jednej operacji, na przykład szyfrowania albo podpisu, powiązany z kluczem głównym podpisem. |
| Odcisk palca (fingerprint) | Jednoznaczny identyfikator klucza. W kluczach wersji 4 ma 20 oktetów, w kluczach wersji 6 - 32. |
| Identyfikator klucza (Key ID) | Krótki, 8-oktetowy identyfikator. RFC 9580 każe nie zakładać, że jest unikalny. |
| Certyfikat unieważnienia | Podpis oznaczający klucz jako unieważniony. Odwołanie klucza opiera się na nim. |
Podział na klucz główny i podklucze ma praktyczny sens, bo klucz główny można trzymać offline, a na co dzień używać podkluczy. Zgubiony albo skradziony podklucz da się unieważnić bez utraty tożsamości właściciela.
Klucz publiczny wymienia się plikiem, na stronie właściciela albo przez serwer kluczy (keyserver). Serwer przechowuje klucz i udostępnia go innym, ale samo umieszczenie klucza na serwerze nie dowodzi, kto go wygenerował, dlatego odbiorca porównuje odcisk palca drugim, niezależnym kanałem.
Pozostaje pytanie, skąd odbiorca wie, że klucz należy do właściwej osoby. PGP odpowiada na nie siecią zaufania (Web of Trust): użytkownicy podpisują nawzajem swoje klucze po sprawdzeniu tożsamości, a każdy sam decyduje, czyim podpisom wierzy. Nie ma tu centralnego urzędu, więc unieważnić klucz może wyłącznie jego właściciel.
Model S/MIME i TLS jest odwrotny: certyfikat wystawia urząd certyfikacji (CA), zaufanie wynika z zaufania do tego urzędu, a certyfikat odwołuje jego wystawca.
W szerszym kontekście
Aktualną specyfikacją OpenPGP jest RFC 9580, opublikowany w lipcu 2024 roku, który zastępuje RFC 4880, RFC 5581 i RFC 6637, a relacja Obsoletes jest tu jednoznaczna (mechanizm opisuje hasło RFC). Część narzędzi nadal opisuje jednak swoją zgodność przez RFC 4880, więc odwołanie do starszego dokumentu w dokumentacji programu nie musi być błędem.
Nowy standard wprowadza klucze wersji 6 z odciskiem palca o długości 32 oktetów, a klucz wersji 6 musi składać podpisy wersji 6. Dochodzą do tego szyfrowanie z uwierzytelnianiem AEAD oraz funkcja Argon2 do wyprowadzania klucza z hasła. RFC 9580 nadal opisuje jednak także klucze wersji 4.
Wsparcie dla nowej specyfikacji zależy od implementacji i jej wersji: strona projektu GnuPG opisuje go jako pełną implementację OpenPGP, ale odwołuje się przy tym do RFC 4880. Zanim więc ktoś wygeneruje klucz wersji 6, powinien sprawdzić w dokumentacji narzędzia, czy odbiorcy go obsłużą.
Na tle pokrewnych rozwiązań PGP wygląda tak:
- S/MIME rozwiązuje to samo zadanie dla poczty, ale opiera się na certyfikatach X.509 i hierarchii urzędów certyfikacji.
- TLS chroni połączenie, więc gdy ono się kończy, treść widzi każdy serwer, który ją przyjął. PGP szyfruje treść u nadawcy, dlatego serwery pośredniczące mają do dyspozycji wyłącznie szyfrogram.
- SSH uwierzytelnia połączenie własnymi kluczami i własnym protokołem, więc to inna rodzina rozwiązań, choć oba opierają się na parach kluczy.
Zastosowanie w praktyce
- Podpisywanie pakietów i wydań. Projekty open source i dystrybucje oprogramowania podpisują wydania, pakiety oraz znaczniki wersji w repozytoriach. Użytkownik sprawdza odcisk palca klucza wydawcy i weryfikuje podpis, a zgodny podpis oznacza, że plik pochodzi od posiadacza klucza i nie zmieniono go po podpisaniu.
- Poufne zgłoszenia podatności. Organizacja przyjmująca takie zgłoszenia może opublikować klucz publiczny, a zgłaszający szyfruje nim raport, więc treść nie leży jawnie na skrzynkach pośrednich.
- Kopie zapasowe i archiwa. Szyfrowanie wymaga wyłącznie klucza publicznego, więc archiwum można przygotować na maszynie bez dostępu do klucza prywatnego, a odszyfruje je dopiero osoba, która go ma.
- Poufna korespondencja. Sprawdza się przy stałych kontaktach, bo obie strony muszą wcześniej wymienić klucze i porównać odciski palców.
Najczęstsze nieporozumienia
- "PGP to to samo co GPG" - nie. PGP to protokół i format, a GPG to jedna z implementacji standardu OpenPGP. Pliki i klucze z jednej zgodnej implementacji da się zwykle otworzyć w innej, ale nazwy nie są wymienne.
- "PGP chroni metadane" - nie. W typowym użyciu szyfrowana jest treść wiadomości, a temat i pola nagłówka, takie jak adres nadawcy, adres odbiorcy i data, pozostają jawne, bo serwery pocztowe potrzebują ich do doręczenia. Zaszyfrowana treść nie ukrywa więc faktu, że dwie osoby korespondują.
- "PGP chroni przed phishingiem" - nie. Podpis potwierdza tylko, że złożył go właściciel danego klucza. Jeśli odbiorca zaufał kluczowi atakującego, podpis oszusta jest poprawny, a porównanie odcisku palca z wiarygodnym źródłem ustala jedynie, czyj to klucz. Podpis nie ocenia też treści: kto przejmie klucz prywatny nadawcy albo urządzenie z dostępem do niego, wyśle złośliwy link z poprawnym podpisem. Wiadomość bez podpisu od kogoś, kto zwykle podpisuje, bywa za to sygnałem ostrzegawczym.
- "Zgubiony klucz prywatny da się odzyskać" - nie bez kopii zapasowej. Hasło chroni plik z kluczem, ale go nie zastępuje, więc utrata klucza oznacza utratę dostępu do wszystkiego, co zaszyfrowano na jego podstawie.
- "Klucz można unieważnić w każdej chwili" - tylko z certyfikatem unieważnienia. Certyfikat wystawia się kluczem prywatnym, więc po utracie klucza nie da się go już utworzyć, i dlatego przygotowuje się go z góry, a przechowuje osobno.
FAQ
Co to jest PGP?
PGP (Pretty Good Privacy) to protokół szyfrowania i podpisu cyfrowego wiadomości e-mail oraz plików. Używa pary kluczy: publicznego, który można udostępniać, i prywatnego, który zostaje u właściciela. Dziś jego format opisuje standard OpenPGP, a konkretne programy, na przykład GnuPG, są jego implementacjami.
Jak działa szyfrowanie PGP?
Program losuje klucz sesji, szyfruje nim treść, a sam klucz sesji zamyka kluczem publicznym odbiorcy. Odbiorca otwiera klucz sesji swoim kluczem prywatnym i dopiero wtedy odszyfrowuje treść, dzięki czemu szyfrowanie jest szybkie, a nadawca i odbiorca nie muszą wcześniej uzgadniać wspólnego sekretu.
Czym różni się PGP od GPG?
PGP to protokół i format, który określa, jak wyglądają wiadomości i klucze, a GPG (GnuPG) to otwarta implementacja standardu OpenPGP, czyli narzędzie, które je tworzy i odczytuje. Szczegóły narzędzia opisuje hasło GPG.
Co to jest klucz PGP i gdzie go przechowywać?
Klucz PGP to para: klucz publiczny do szyfrowania i weryfikacji podpisów oraz klucz prywatny do odszyfrowywania i podpisywania. Klucz prywatny chroni się silnym hasłem i trzyma w miejscu, do którego nie mają dostępu inne osoby. Kopię zapasową oraz certyfikat unieważnienia przechowuje się osobno i offline. Klucz główny można odłożyć poza codzienne urządzenie, a na nim zostawić podklucze.
Czy PGP jest bezpieczne i czy nadal się go używa?
Bezpieczeństwo PGP zależy głównie od sposobu użycia, a jego słabymi punktami są zarządzanie kluczami, niesprawdzone odciski palca i jawne metadane. PGP nie zapewnia też poufności z wyprzedzeniem (forward secrecy): kto zdobędzie klucz prywatny, odszyfruje również wcześniej przechwycone wiadomości. Standard jest nadal rozwijany, a RFC 9580 ukazał się w lipcu 2024 roku. Typowe zastosowania to podpisywanie wydań oprogramowania oraz szyfrowanie plików i wybranej korespondencji.
Powiązane pojęcia
- GPG - otwarta implementacja standardu OpenPGP, najczęściej używana do podpisywania i szyfrowania z wiersza poleceń.
- S/MIME - alternatywny standard szyfrowania i podpisu poczty, oparty na certyfikatach X.509.
- RFC - seria dokumentów opisujących standardy internetu, w tym OpenPGP.
- TLS - protokół chroniący połączenie, a nie samą wiadomość.
- SSH - protokół zdalnego dostępu z własnymi kluczami uwierzytelniającymi.
- Phishing - podszywanie się pod nadawcę; podpis PGP potwierdza autora klucza, ale nie ocenia bezpieczeństwa treści.
Bezpieczeństwo infrastruktury
Znajdziesz tu powiązane pojęcia dotyczące szyfrowania, kluczy i protokołów komunikacji.