Czym jest PGP? Kompleksowy przewodnik po szyfrowaniu Pretty Good Privacy
Czym jest szyfrowanie PGP?
PGP (Pretty Good Privacy) to program szyfrujący, który zapewnia poufność i uwierzytelnianie kryptograficzne dla komunikacji danych. Szyfrowanie PGP wykorzystuje połączenie kryptografii klucza symetrycznego i kryptografii klucza publicznego, umożliwiając użytkownikom szyfrowanie wiadomości, plików i innych danych tak, aby tylko zamierzony odbiorca mógł je odczytać. Pierwotnie stworzony przez Phila Zimmermanna w 1991 roku, PGP stał się najszerzej używanym standardem szyfrowania e-maili na świecie i stanowi podstawę specyfikacji OpenPGP zdefiniowanej w RFC 4880. Niezależnie od tego, czy musisz wysłać poufny e-mail, zweryfikować tożsamość wydawcy oprogramowania czy zabezpieczyć wrażliwe pliki, PGP dostarcza sprawdzone ramy kryptograficzne, którym ufają dziennikarze, badacze bezpieczeństwa, rządy i codzienni użytkownicy.
Jeśli chcesz wypróbować szyfrowanie PGP od razu bez instalowania oprogramowania, KeychainPGP oferuje narzędzie PGP online, które działa całkowicie w Twojej przeglądarce.
Historia PGP
Phil Zimmermann opublikował PGP 1.0 w czerwcu 1991 roku jako wolne oprogramowanie, motywowany przekonaniem, że silna kryptografia powinna być dostępna dla wszystkich obywateli — nie tylko dla rządów i wojska. W tamtym czasie silne szyfrowanie było klasyfikowane jako amunicja zgodnie z amerykańskimi przepisami eksportowymi, a Zimmermann był przedmiotem trzyletniej dochodzenia karnego przez amerykański urząd celny za dystrybucję PGP za granicę. Dochodzenie zostało ostatecznie umorzone w 1996 roku bez postawienia zarzutów, a sprawa stała się przełomowym momentem w historii wolności cyfrowych.
PGP ewoluowało przez kilka wcieleń komercyjnych. Zimmermann założył PGP Inc. w 1996 roku, która została przejęta przez Network Associates (później McAfee) w 1997 roku, a ostatecznie przez Symantec w 2010 roku. Mimo tych zmian, leżący u podstaw protokół kryptograficzny został ustandaryzowany jako OpenPGP przez Internet Engineering Task Force (IETF), co gwarantuje, że protokół pozostaje otwarty i interoperacyjny niezależnie od własności komercyjnej.
Publikacja standardu OpenPGP oznaczała, że każdy może tworzyć kompatybilne implementacje. Doprowadziło to do powstania GNU Privacy Guard (GnuPG lub GPG), wolnej i otwartej implementacji, która pozostaje jednym z najszerzej używanych narzędzi PGP do dziś. Aby zrozumieć różnice między tymi implementacjami, zapoznaj się z naszym przewodnikiem PGP vs GPG.
Jak działa szyfrowanie PGP
Szyfrowanie PGP opiera się na wyrafinowanym połączeniu technik kryptograficznych. Zamiast używać jednej metody, PGP stosuje hybrydowy model szyfrowania, który łączy szybkość szyfrowania symetrycznego z zaletami dystrybucji kluczy szyfrowania asymetrycznego (klucza publicznego).
Kryptografia klucza publicznego
Sercem PGP jest kryptografia klucza publicznego, nazywana również kryptografią asymetryczną. Każdy użytkownik PGP generuje parę kluczy składającą się z dwóch matematycznie powiązanych kluczy:
- Klucz publiczny — udostępniany otwarcie każdemu. Inni używają tego klucza do szyfrowania wiadomości przeznaczonych dla Ciebie i weryfikacji Twoich podpisów cyfrowych.
- Klucz prywatny (nazywany też kluczem tajnym) — przechowywany w ścisłej tajemnicy. Używasz tego klucza do odszyfrowywania wiadomości wysłanych do Ciebie i tworzenia podpisów cyfrowych.
Fundamentalną właściwością tego systemu jest to, że dane zaszyfrowane kluczem publicznym mogą być odszyfrowane tylko odpowiadającym kluczem prywatnym i odwrotnie. Eliminuje to potrzebę przekazywania wspólnego sekretu między stronami, zanim będą mogły komunikować się prywatnie.
Hybrydowy model szyfrowania
Chociaż kryptografia klucza publicznego rozwiązuje problem dystrybucji kluczy, algorytmy asymetryczne takie jak RSA są kosztowne obliczeniowo przy szyfrowaniu dużych ilości danych. PGP rozwiązuje ten problem, stosując podejście hybrydowe:
- Generowanie klucza sesji — PGP generuje losowy, jednorazowy symetryczny klucz sesji (zazwyczaj 128 lub 256 bitów) dla każdej wiadomości.
- Szyfrowanie danych — Treść wiadomości jest szyfrowana za pomocą szybkiego szyfru symetrycznego (np. AES-256) z kluczem sesji.
- Szyfrowanie klucza sesji — Sam klucz sesji jest następnie szyfrowany kluczem publicznym odbiorcy (operacja asymetryczna).
- Pakowanie — Zaszyfrowana wiadomość i zaszyfrowany klucz sesji są łączone i wysyłane do odbiorcy.
Gdy odbiorca otrzymuje wiadomość, proces jest odwracany: używa swojego klucza prywatnego do odszyfrowania klucza sesji, a następnie odszyfrowany klucz sesji służy do odszyfrowania treści wiadomości.
Podpisy cyfrowe PGP
Oprócz szyfrowania, PGP zapewnia podpisy cyfrowe, które pełnią dwie kluczowe funkcje: uwierzytelnianie (udowodnienie, kto wysłał wiadomość) i integralność (udowodnienie, że wiadomość nie została zmieniona w trakcie przesyłania).
Proces podpisywania działa następująco:
- PGP oblicza skrót kryptograficzny (hasz o stałej długości) treści wiadomości za pomocą algorytmu takiego jak SHA-256 lub SHA-512.
- Hasz jest następnie szyfrowany kluczem prywatnym nadawcy, tworząc podpis cyfrowy.
- Podpis jest dołączany do wiadomości.
Każdy odbiorca może zweryfikować podpis, odszyfrowując podpis kluczem publicznym nadawcy, aby odzyskać oryginalny hasz, niezależnie obliczając hasz otrzymanej wiadomości, a następnie porównując oba hasze. Jeśli są zgodne, wiadomość jest autentyczna i niezmieniona.
Standard OpenPGP
OpenPGP to otwarty standard definiujący formaty wiadomości, algorytmy i procedury używane przez oprogramowanie kompatybilne z PGP. Sam w sobie nie jest produktem programistycznym, lecz specyfikacją, którą każdy programista może zaimplementować.
Dokumenty referencyjne to:
- RFC 4880 (listopad 2007) — Obecna główna specyfikacja formatu wiadomości OpenPGP.
- RFC 6637 (czerwiec 2012) — Rozszerza OpenPGP o obsługę kryptografii na krzywych eliptycznych (ECC).
- RFC 9580 (2024) — Najnowsza rewizja modernizująca standard z obowiązkową obsługą Ed25519/X25519, trybami szyfrowania AEAD i ulepszonymi odciskami kluczy.
OpenPGP gwarantuje interoperacyjność: wiadomość zaszyfrowana za pomocą KeychainPGP może być odszyfrowana przez GnuPG, Mailvelope lub dowolną inną zgodną implementację.
Sieć zaufania
Jedną z wyróżniających cech PGP jest zdecentralizowany model sieci zaufania (Web of Trust) służący do ustalania autentyczności kluczy publicznych. W przeciwieństwie do scentralizowanego modelu urzędów certyfikacji (CA) używanego przez TLS/SSL, PGP pozwala użytkownikom samodzielnie poręczać za siebie nawzajem.
Sieć zaufania działa poprzez podpisywanie kluczy: kiedy weryfikujesz tożsamość kogoś i potwierdzasz, że kontroluje określony klucz publiczny, podpisujesz jego klucz swoim własnym. Podpis ten jest publicznym oświadczeniem, że wierzysz, iż klucz należy do osoby, za którą się podaje.
Narzędzia takie jak KeychainPGP upraszczają ten proces, umożliwiając użytkownikom pracę z kluczami bezpośrednio przez intuicyjny interfejs, korzystając z szyfrowania przez schowek do łatwego udostępniania zaszyfrowanych wiadomości i kluczy publicznych.
Algorytmy i typy kluczy PGP
PGP obsługuje szereg algorytmów kryptograficznych, które ewoluowały wraz z postępem w dziedzinie kryptografii.
Algorytmy klasyczne
- RSA (Rivest-Shamir-Adleman) — Najszerzej wdrożony algorytm asymetryczny w historii PGP. Klucze RSA o długości 2048 bitów są uważane za minimum bezpieczeństwa, a klucze 4096-bitowe są zalecane do długoterminowej ochrony.
- DSA (Digital Signature Algorithm) — Używany do podpisów w połączeniu z ElGamal do szyfrowania. Dziś mniej preferowany.
- AES (Advanced Encryption Standard) — Dominujący szyfr symetryczny używany do szyfrowania treści wiadomości. Obsługiwane są AES-128 i AES-256.
- SHA-2 (SHA-256, SHA-384, SHA-512) — Kryptograficzne funkcje skrótu używane do obliczania skrótów w podpisach cyfrowych.
Algorytmy nowoczesne
Najnowsza generacja implementacji OpenPGP obsługuje kryptografię na krzywych eliptycznych (ECC), która oferuje bezpieczeństwo porównywalne z RSA przy znacznie mniejszych rozmiarach kluczy:
- Ed25519 — Algorytm podpisu cyfrowego oparty na Curve25519. Produkuje szybkie i kompaktowe podpisy. Zalecany w RFC 9580.
- X25519 (Curve25519 ECDH) — Używany do wymiany kluczy (szyfrowania). Oferuje doskonałą wydajność z solidnymi właściwościami bezpieczeństwa.
- NIST P-256 / P-384 / P-521 — Krzywe eliptyczne ustandaryzowane przez NIST. Obsługiwane przez OpenPGP, ale generalnie mniej preferowane niż algorytmy oparte na Curve25519.
Nowoczesne narzędzia takie jak KeychainPGP obsługują te współczesne algorytmy, czyniąc generowanie kluczy z Ed25519 i X25519 prostym i intuicyjnym.
Typowe zastosowania PGP
- Bezpieczna poczta e-mail — Oryginalne i najbardziej znane zastosowanie. PGP pozwala szyfrować treść e-maili i podpisywać wiadomości w celu potwierdzenia ich autentyczności.
- Szyfrowanie plików — PGP może szyfrować pojedyncze pliki lub całe archiwa do bezpiecznego przechowywania lub przesyłania.
- Weryfikacja oprogramowania — Projekty open source regularnie podpisują swoje wydania kluczami PGP. Użytkownicy mogą weryfikować te podpisy, aby potwierdzić autentyczność pobranego pliku.
- Bezpieczne wiadomości — PGP może być używane do szyfrowania dowolnych wiadomości tekstowych, co jest szczególnie przydatne na platformach nieofferujących szyfrowania end-to-end.
- Weryfikacja tożsamości — Odciski kluczy PGP służą jako weryfikowalne tożsamości cyfrowe. Programiści na GitHub mogą podpisywać swoje commity za pomocą PGP.
- Podpisywanie dokumentów — Workflow prawnicze czasami wykorzystują podpisy PGP do ustalenia niezaprzeczalności.
PGP dzisiaj
Ponad trzy dekady po swoim powstaniu, PGP pozostaje jednym z najważniejszych dostępnych narzędzi kryptograficznych. Standard OpenPGP nadal ewoluuje, a RFC 9580 wprowadza znaczące modernizacje, w tym obowiązkową obsługę nowoczesnych algorytmów na krzywych eliptycznych i trybów szyfrowania AEAD.
Ekosystem narzędzi PGP znacznie się wzbogacił. GnuPG pozostaje referencyjną implementacją do użytku z linii poleceń. Nowoczesne narzędzia takie jak KeychainPGP oferują natywne aplikacje desktopowe (Windows, macOS, Linux), aplikację na Android, CLI do skryptów i aplikację webową w przeglądarce — wszystko zbudowane na tym samym silniku Sequoia-PGP w Rust.
Pierwsze kroki z PGP
Gotowy, aby zacząć z szyfrowaniem PGP? Oto najlepsze kolejne kroki:
- Wypróbuj w przeglądarce — Użyj narzędzia PGP online KeychainPGP, aby wygenerować parę kluczy, zaszyfrować wiadomość lub zweryfikować podpis bez instalowania czegokolwiek.
- Przeczytaj poradnik dla początkujących — Jeśli jesteś nowy w kryptografii, nasz poradnik PGP dla początkujących poprowadzi Cię krok po kroku.
- Poznaj praktyczny workflow — Nasz poradnik Jak używać PGP obejmuje generowanie kluczy, szyfrowanie i deszyfrowanie, zarządzanie pękiem kluczy i najlepsze praktyki.
- Zrozum szyfrowanie przez schowek — Odkryj szyfrowanie PGP przez schowek, aby szyfrować i deszyfrować tekst bezpośrednio ze schowka.
- Poznaj narzędzia — Zrozum różnice między PGP a GPG, aby wybrać odpowiednie narzędzie do swojego workflow.
Szyfrowanie PGP chroni poufną komunikację od ponad trzydziestu lat. Dzięki nowoczesnym narzędziom i standardom jest bardziej dostępne niż kiedykolwiek.