linuxpub.pl
Powrót Powrót 
 
1    2    3     
 Następna Następna
Wyślij znajomemu Drukuj

GNU Privacy Handbook

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".

Pytania, sugestie i informacje o błędach prosimy przesyłać do opiekuna niniejszego podręcznika -- Mike'a Ashley'a (jashley@acm.org).

Matthew Copeland, Joergen Grahn oraz David A. Wheeler wnieśli duży wkład w powstanie niniejszego podręcznika. Autorem polskiego tłumaczenia jest Jacek Śliwerski.
Spis treści
1. Rozpoczynamy
Generowanie nowego klucza
Generowanie certyfikatu unieważniającego
Rozpowszechnianie kluczy
Eksportowanie klucza publicznego
Importowanie klucza publicznego
Szyfrowanie i odszyfrowywanie dokumentów
Podpisywanie i sprawdzanie podpisów
Bezingerencyjne podpisywanie dokumentów
Samodzielne podpisy
2. Techniki
Szyfrowanie symetryczne
Szyfrowanie z kluczem publicznym (asymetryczne)
Szyfry hybrydowe
Podpisy cyfrowe
3. Zarządzanie kluczami
Zarządzanie własnym kluczem
Spójność kluczy
Dodawanie i usuwanie części klucza
Unieważnianie składowych klucza
Aktualizacja okresu ważności
Potwierdzanie poprawności kluczy publicznych
Ufanie właścicielom kluczy
Wykorzystywanie zaufania do weryfikacji kluczy
Dystrybucja kluczy
4. GnuPG w codziennym zastosowaniu
Definiowanie potrzeb utrzymania bezpieczeństwa
Wybór rozmiaru klucza
Ochrona klucza prywatnego
Wybieranie okresu ważności i stosowanie kluczy podrzędnych
Utrzymywanie sieci zaufania
Tworzenie sieci zaufania
Stosowanie GnuPG zgodnie z prawem
5. Pozostałe tematy
Tworzenie interfejsu użytkownika
A. GNU Free Documentation License
0. PREAMBLE
1. APPLICABILITY AND DEFINITIONS
2. VERBATIM COPYING
3. COPYING IN QUANTITY
4. MODIFICATIONS
5. COMBINING DOCUMENTS
6. COLLECTIONS OF DOCUMENTS
7. AGGREGATION WITH INDEPENDENT WORKS
8. TRANSLATION
9. TERMINATION
10. FUTURE REVISIONS OF THIS LICENSE
How to use this License for your documents
Spis rysunków
3-1. Przykładowa sieć zaufania

Rozdział 1. Rozpoczynamy



Ten rozdział zawiera informacje o podstawowej funkcjonalności programu GnuPG. Omówiono tu generację, rozpowszechnianie i weryfikację kluczy, szyfrowanie i odszyfrowywanie tekstów oraz cyfrowe podpisywanie dokumentów. Niniejszy rozdział nie zawiera szczegółów dotyczących systemów kryptograficznych z kluczem publicznym ani zasad działania podpisów elektronicznych. Informacje te można znaleźć w rozdziale 2. Nie ma tu również mowy o tym, jak w sposób świadomy i bezpieczny używać GnuPG, ponieważ informacje te czytelnik może znaleźć w rozdziałach 3 oraz 4.

Bezpieczeństwo stosowania GnuPG oparte jest na algorytmach z kluczem publicznym. W systemie takim każdy użytkownik posiada parę kluczy: prywatny i publiczny. Klucz prywatny musi pozostać utajniony i nie może zostać w żadnym przypadku ujawniony innym osobom. Klucz publiczny można przekazać każdemu, z kim chce się porozumiewać. W GnuPG zastosowano bardziej wyszukany schemat, w którym użytkownik posiada główną parę kluczy oraz zbiór podrzędnych par (który może być pusty). Cały zbiór jest ściśle związany, aby ułatwić zarządzanie kluczami i może być traktowany jak pojedyncza para kluczy. Dalej w tym dokumencie będę się posługiwać terminem klucz do określania pary kluczy (ang. keypair). Jeśli będzie chodziło o pojedynczy element pary (klucz prywatny bądź publiczny) to będę to wyraźnie podkreślać. Takiej konwencji użyto również przy tłumaczeniu na język polski komunikatów programu GnuPG.

Generowanie nowego klucza



Przełącznik --gen-key służy do generowania nowego klucza głównego.
alicja% gpg --gen-key
gpg (GnuPG) 1.0.6; Copyright (C) 2001 Free Software Foundation, Inc.
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions. See the file COPYING for details.

Proszę wybrać rodzaj klucza:
 (1) Para kluczy dla algorytmów DSA i ElGamala (domyślne)
 (2) DSA (tylko do podpisywania)
 (4) Klucz dla algorytmu ElGamala (do szyfrowania i podpisywania)
Twój wybór?
GnuPG potrafi wygenerować kilka różnych kluczy, ale główny musi umożliwiać składanie podpisu. Z tego powodu użytkownik ma do wyboru tylko trzy opcje. Wybranie 1 spowoduje stworzenie dwóch kluczy. Klucz DSA nadaje się wyłącznie do składania podpisu, natomiast ElGamal służy również do szyfrowania. Wybranie 2 spowoduje stworzenie tylko klucza DSA. Wybranie 4[1] spowoduje wygenerowanie klucza ElGamal, który może służyć zarówno do podpisywania jak i szyfrowania. Bez względu na wybrany rodzaj klucza użytkownik będzie mógł później wygenerować dodatkowe klucze do podpisywania i szyfrowania. Domyślna opcja jest właściwa dla większości użytkowników.

Teraz należy wybrać rozmiar klucza. Rozmiar klucza DSA musi zawierać się między 512 a 1024 bitami, a klucz ElGamal może być dowolnego rozmiaru. GnuPG wymaga, aby klucz był conajmniej 768 bitowy. Dlatego jeśli użytkownik wybierze opcję 1, a następnie poda rozmiar klucza przekraczający 1024 bitów, to wygenerowany zostanie klucz ElGamal podanego rozmiaru i 1024-bitowy klucz DSA.
Nastąpi generacja nowej pary kluczy dla algorytmu(ów) ELG-E.
 minimalny rozmiar klucza wynosi 768 bitów
 domyślny rozmiar klucza wynosi 1024 bity
 największy sugerowany rozmiar klucza wynosi 2048 bitów
Jakiej długości klucz wygenerować? (1024)
Im większy klucz, tym bardziej odporny na ataki typu brute-force (polegających na przeszukiwaniu całej przestrzeni pasujących kluczy), ale do większości zastosowań najlepszy jest domyślny rozmiar. Przy dużych kluczach metody obejścia szyfrowania będą bardziej opłacalne od jego łamania. Ponadto szybkość szyfrowania i deszyfrowania maleje wraz z rosnącym rozmiarem klucza, a długość podpisu rośnie. Raz wybranej długości klucza nie można już zmienić.

Pozostaje już tylko wybór okresu ważności. W przypadku wyboru opcji 1, limit będzie dotyczyć obydwu kluczy (ElGamal i DSA).
Okres ważności klucza.
 0 = klucz nie ma określonego okresu ważności
 {n} = termin ważności klucza upływa za n dni
 {n}w = termin ważności klucza upływa za n tygodni
 {n}m = termin ważności klucza upływa za n miesięcy
 {n}y = termin ważności klucza upływa za n lat
Okres ważności klucza ? (0) 
Klucz bezterminowy jest właściwy dla większości użytkowników. Okres ważności powinien być wybrany ostrożnie. Można go zmienić w dowolnym momencie, ale przekazanie tego wszystkim, którzy posiadają już klucz publiczny może okazać się trudne.

Jako parametr klucza należy podać identyfikator użytkownika. Służy on do jednoznacznego związania klucza z jego właścicielem.
Musisz określić identyfikator użytkownika aby można było rozpoznać twój
klucz; program złoży go z twojego imienia i nazwiska, komentarza i adresu
poczty elektronicznej. Będzie on miał taką postać:
 "Tadeusz Żeleński (Boy) tzb@domena.pl"

Imię i nazwisko:
Podczas generacji klucza tworzony jest tylko jeden identyfikator, ale istnieje możliwość dodania innych identyfikatorów jeśli użytkownik zamierza używać klucza w dwóch różnych kontekstach, np. jako pracownik i jako działacz polityczny. Należy uważać podczas wpisywania identyfikatora, ponieważ nie można go później zmienić.

GnuPG wymaga podania hasła, które będzie chroniło klucze prywatne użytkownika. Osoba tłumacząca komunikaty GnuPG na język polski zbyt dosłownie potraktowała angielski zwrot "pass phrase", dlatego program prosi o "wyrażenie przejściowe". Przejściowość tego wyrażenia nie oznacza jego tymczasowości. Chodziło o to, że znajomość tego wyrażenia jest wymagana do przejścia dalej.
Musisz podać wyrażenie przejściowe (hasło) aby ochronić swój klucz tajny.
Wyrażenie przejściowe:
Długość hasła jest nieograniczona, ale powinno ono być wybrane ostrożnie. Hasło chroniące klucz prywatny jest z punktu widzenia bezpieczeństwa jednym z najsłabszych ogniw GnuPG (i wszystkich innych systemów kryptograficznych z kluczem publicznym) ponieważ jest jedyną ochroną w przypadku dostania się klucza prywatnego w niepowołane ręce. Hasło nie powinno być słownikowe, powinno składać się z małych i wielkich liter oraz cyfr i znaków przestankowych. Dobre hasło decyduje o bezpieczeństwie stosowania GnuPG.

Generowanie certyfikatu unieważniającego



Zaraz po wygenerowaniu klucza należy stworzyć certyfikat unieważniający dla głównego klucza publicznego. Używa się do tego przełącznika --gen-revoke. W przypadku zapomnienia hasła, zagubienia lub złamania klucza publicznego certyfikat ten może zostać rozpowszechniony w celu poinformowania innych, że ten klucz nie powinien być już nigdy więcej używany. Unieważniony klucz publiczny nadaje się nadal do potwierdzania podpisów wykonanych w przeszłości, ale nie będzie nim można podpisać dokumentów w imieniu jego właściciela. Nadal będzie można odszyfrowywać stare wiadomości przy pomocy odpowiadającego mu klucza prywatnego.
alicja% gpg --output revoke.asc --gen-revoke klucz
[...]
Parametr wywołania klucz musi jednoznacznie identyfikować klucz. Może to być pełen identyfikator klucza lub jakakolwiek jego część jednoznacznie go wskazująca. Certyfikat zostanie zapisany do pliku revoke.asc. Jeśli pominięty zostanie przełącznik --output wynik działania programu zostanie skierowany na standardowe wyjście. Certyfikat ten jest dość krótki, więc można go wydrukować i zachować w bezpiecznym miejscu (np. w kasetce, albo depozycie). Nikt obcy nie powinien mieć dostępu do certyfikatu unieważniającego, ponieważ za jego pomocą będzie mógł unieważnić odpowiadający mu klucz publiczny.

Rozpowszechnianie kluczy



Aby móc porozumiewać się z innymi trzeba uprzednio wymienić swoje klucze publiczne. Aby wyświetlić listę dostępnych kluczy publicznych należy użyć przełącznika --list-keys.
alicja% gpg --list-keys
/users/alicja/.gnupg/pubring.gpg
---------------------------------------
pub 1024D/BB7576AC 1999-06-04 Alicja (Sędzia) alicja@cyb.org
sub 1024g/78E9A8FA 1999-06-04

Eksportowanie klucza publicznego



Aby przesłać znajomemu swój klucz publiczny trzeba go najpierw wyeksportować. Służy do tego przełącznik --export. Jako parametr bierze on ciąg znaków jednoznacznie identyfikujący klucz. Tak jak w przypadku parametru --gen-revoke może to być zarówno cały identyfikator klucza jak i jego dowolna część, jeśli jest właściwa dla dokładnie jednego klucza.
alicja% gpg --output alicja.gpg --export alicja@cyb.org


Powyższe polecenie spowoduje eksport klucza do pliku binarnego, co może być niepożądane jeśli ma on być wysłany pocztą lub umieszczony na stronie www. Do tego celu GnuPG udostępnia przełącznik --armor[2], który powoduje utworzenie pliku w formacie ASCII, podobnym do tego co generuje program uuencode. Właściwie każdy wynik działania GnuPG (jak np. klucze, zaszyfrowane teksty, czy podpisy) może mieć postać czystego tekstu ASCII. Wystarczy użyć opcji --armor.
alicja% gpg --armor --export alicja@cyb.org
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.0.6 (GNU/Linux)
Comment: Dalsze informacje znajdują się na http://www.gnupg.org/

[...]
-----END PGP PUBLIC KEY BLOCK-----

Importowanie klucza publicznego



Zbiór kluczy publicznych można rozszerzyć o nowy klucz przy pomocy przełącznika --import.
alicja% gpg --import blake.gpg
gpg: klucz 9E98BC16: klucz publiczny wczytany do zbioru
gpg: Ogółem przetworzonych kluczy: 1
gpg: dołączono do zbioru: 1
alicja% gpg --list-keys
/users/alicja/.gnupg/pubring.gpg
---------------------------------------
pub 1024D/BB7576AC 1999-06-04 Alicja (Sędzia) alicja@cyb.org
sub 1024g/78E9A8FA 1999-06-04

pub 1024D/9E98BC16 1999-06-04 Blake (Egzekutor) blake@cyb.org
sub 1024g/5C8CBD41 1999-06-04


Po zaimportowaniu klucz powinien zostać zweryfikowany. GnuPG używa bardzo wygodnego modelu wiarygodności, który nie wymaga aby użytkownik własnoręcznie weryfikował każdy importowany klucz, choć niektóre klucze mogą wymagać takiego potwierdzenia. Aby zatwierdzić klucz należy obliczyć, czy zawarty w nim odcisk jest prawidłowy i (w przypadku powodzenia) oznaczyć go jako zatwierdzony. Odcisk swojego klucza można obejrzeć przy pomocy przełącznika --fingerprint. Zatwierdzenie klucza wymaga ingerencji użytkownika.
alicja% gpg --edit-key blake@cyb.org
gpg (GnuPG) 1.0.6; Copyright (C) 2001 Free Software Foundation, Inc.
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions. See the file COPYING for details.


pub 1024D/9E98BC16 utworzony: 1999-06-04 wygasa never zaufanie: -/q
sub 1024g/5C8CBD41 utworzony: 1999-06-04 wygasa never 
(1) Blake (Egzekutor) blake@cyb.org

Polecenie> fpr
pub 1024D/9E98BC16 1999-06-04 Blake (Egzekutor) blake@cyb.org
 Odcisk: 268F 448F CCD7 AF34 183E 52D8 9BDE 1A08 9E98 BC16
Właściciel klucza uczestniczy przy weryfikacji odcisku klucza. Może to zrobić osobiście, telefonicznie lub w jakikolwiek inny sposób gwarantujący, że mamy do czynienia z właściwą osobą. Jeśli otrzymany odcisk jest taki sam, jak właściciela klucza, to można być pewnym, że klucz jest prawidłowy.

Po sprawdzeniu odcisku można podpisać klucz własnym kluczem. Weryfikacja klucza jest słabym punktem systemów kryptograficznych z kluczem publicznym. Z tego powodu użytkownicy powinni być szczególnie ostrożni i zawsze sprawdzać odcisk klucza z jego właścicielem przed podpisaniem.
Polecenie> sign
 
pub 1024D/9E98BC16 utworzony: 1999-06-04 wygasa never zaufanie: -/q
 Odcisk: 268F 448F CCD7 AF34 183E 52D8 9BDE 1A08 9E98 BC16

 Blake (Egzekutor) blake@cyb.org

Czy jesteś naprawdę pewien że chcesz podpisać ten klucz
swoim kluczem: "Alicja (Sędzia) alicja@cyb.org"

Na pewno podpisać?


Po podpisaniu można obejrzeć listę podpisów pod kluczem, w tym własny podpis. Każdy identyfikator użytkownika związany z kluczem będzie miał conajmniej jeden podpis właściciela oraz podpisy użytkowników, którzy weryfikowali ten klucz.
Polecenie> check
uid Blake (Egzekutor) blake@cyb.org
sig! 9E98BC16 1999-06-04 [podpis klucza nim samym]
sig! BB7576AC 1999-06-04 Alicja (Sędzia) alicja@cyb.org

Szyfrowanie i odszyfrowywanie dokumentów



Klucz prywatny i publiczny mają różne zastosowania przy szyfrowaniu i odszyfrowywaniu dokumentów. O kluczu publicznym można myśleć jak o otwartym sejfie. Kiedy korespondent szyfruje dokument kluczem publicznym, wkłada go do sejfu, zamyka i kilkukrotnie przekręca zapadkę. Odpowiedni klucz prywatny jest kombinacją przy pomocy której można otworzyć zamknięty sejf i odzyskać dokument. Innymi słowy, tylko osoba posiadająca klucz prywatny może odczytać dokument zaszyfrowany odpowiednim kluczem publicznym.

Procedura szyfrowania i odszyfrowywania dokumentu jest zgodna z następującym schematem. Aby zaszyfrować wiadomość do Alicji, należy go zakodować kluczem publicznym Alicji, a ona odkoduje go swoim kluczem prywatnym. Jeśli Alicja zechce wysłać zakodowaną wiadomość użytkownikowi, zaszyfruje ją jego kluczem publicznym, by mógł odszyfrować tekst przy pomocy swojego klucza prywatnego.

Przełącznik --encrypt służy do szyfrowania. Trzeba uprzednio posiadać klucz publiczny odbiorcy. Program zakłada, że zostanie mu podany plik do zaszyfrowania. Jeśli nie zostanie podana nazwa żadnego pliku, to program będzie czytał ze standardowego wejścia. Wynik szyfrowania zostanie wysłany na standardowe wyjście, chyba że dodany zostanie przełącznik --output. Dokument jest kompresowany po zaszyfrowaniu, co powinno dodatkowo zwiększyć bezpieczeństwo.
alicja% gpg --output doc.gpg --encrypt --recipient blake@cyb.org doc
Przełącznik --recipient służy do wskazania odbiorcy. Jego argument musi jednoznacznie wyznaczyć klucz publiczny, przy pomocy którego program ma zaszyfrować dokument. Zaszyfrowany dokument może być odszyfrowany wyłącznie przez osobę posiadającą klucz prywatny pasujący do tego klucza publicznego. W szczególności osoba szyfrująca dokument nie może go odkodować, chyba że zaszyfrowała go swoim własnym kluczem publicznym.

Przełącznik --decrypt służy do odszyfrowywania wiadomości. Aby to zrobić trzeba posiadać klucz prywatny, dla którego zaszyfrowano tę wiadomość. Podobnie jak przy szyfrowaniu, wejściem dla programu jest zakodowany dokument, a wyjściem jego jawna wersja.
blake% gpg --output doc --decrypt doc.gpg

Musisz podać wyrażenie przejściowe (hasło) aby uaktywnić klucz tajny
dla użytkownika: "Blake (Egzekutor) blake@cyb.org"
długość 1024 bitów, typ ELG-E, klucz 5C8CBD41, stworzony 1999-06-04

Wyrażenie przejściowe:


Dokumenty mogą być również szyfrowane bez używania kryptografii z kluczem publicznym. Zamiast tego używa się szyfru symetrycznego. Kluczem zastosowanym do zakodowania dokumentu jest hasło podane przez użytkownika w trakcie szyfrowania. Aby zapewnić bezpieczeństwo hasło to powinno być różne od chroniącego klucz prywatny. Szyfrowanie symetryczne jest szczególnie przydatne do zabezpieczania dokumentów, do których nikt więcej nie musi mieć dostępu. Realizowane jest przy pomocy przełącznika --symmetric.
alicja% gpg --output doc.gpg --symmetric doc
Wyrażenie przejściowe:

Podpisywanie i sprawdzanie podpisów



Podpis cyfrowy poświadcza istnienie dokumentu w określonym czasie. Jeśli podpisany dokument zostanie w jakikolwiek sposób zmodyfikowany, sprawdzenie podpisu nie powiedzie się. Podpis cyfrowy ma zasadniczo takie samo zastosowanie jak podpis ręczny, z tą różnicą, że dokumentu podpisanego elektronicznie nie można zmienić bez ponownego podpisania. Dystrybucja źródłowa programu GnuPG jest podpisana, aby każdy użytkownik mógł sprawdzić, że kod źródłowy nie został zmodyfikowany od czasu umieszczenia go w archiwum.

Podpisy sporządza się i sprawdza odwrotnie niż w przypadku szyfrowania i odszyfrowywania. Dokument podpisuje się kluczem prywatnym, a sprawdza podpis przy pomocy odpowiedniego klucza publicznego. Alicja mogłaby na przykład podpisać artykuł do Miesięcznika Chemii Nieorganicznej swoim kluczem prywatnym. Redaktor przyjmujący jej zgłoszenie mógłby użyć publicznego klucza Alicji, aby sprawdzić, czy praca ta została rzeczywiście napisana przez Alicję i czy jej treść nie została zmieniona od czasu wysłania. W konsekwencji trudno jest wyprzeć się podpisanego dokumentu, ponieważ oznaczałoby to, że klucz prywatny jest znany osobom do tego nieupoważnionym.

Przełącznik --sign służy do podpisywania. Wejściem dla programu jest podpisywany dokument, a wyjściem ten sam dokument, podpisany.
alicja% gpg --output doc.sig --sign doc

Musisz podać wyrażenie przejściowe (hasło) aby uaktywnić klucz tajny
dla użytkownika: "Alicja (Sędzia) alicja@cyb.org"
długość 1024 bitów, typ DSA, klucz BB7576AC, stworzony 1999-06-04

Wyrażenie przejściowe:
Dokument jest kompresowany przed podpisaniem, a na wyjściu otrzymuje się plik binarny.

Oprócz sprawdzenia prawdziwości podpisu można również odzyskać oryginalny dokument. Do samego sprawdzenia służy przełącznik --verify. Aby dodatkowo odzyskać dokument należy użyć przełącznika --decrypt. Podpisany dokument jest wejściem dla programu, a odtworzony oryginał wyjściem.
blake% gpg --output doc --decrypt doc.sig
gpg: Podpis złożony pią 4 sty 1999 12:02:38 CET za pomocą DSA,
z użyciem klucza o identyfikatorze BB7576AC
gpg: Poprawny podpis złożony przez "Alicja (Sędzia) alicja@cyb.org"

Bezingerencyjne podpisywanie dokumentów



Powszechnym zastosowaniem podpisu cyfrowego jest poczta elektroniczna. To zastosowanie wyklucza kompresję podpisywanej wiadomości. Przełącznik --clearsign spowoduje otoczenie niezmienionego dokumentu nagłówkiem oraz podpisem. Wynik będzie składał się wyłącznie ze znaków ASCII.
alicja% gpg --clearsign doc

Musisz podać wyrażenie przejściowe (hasło) aby uaktywnić klucz tajny
dla użytkownika "Alicja (Sędzia) alicja@cyb.org"
długość 1024 bitów, typ DSA, klucz BB7576AC, stworzony 1999-06-04

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

[...]
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.6 (GNU/Linux)
Comment: Dalsze informacje znajdują się na http://www.gnupg.org

iEYEARECAAYFAjdYCQoACgkQJ9S6ULt1dqz6IwCfQ7wP6i/i8HhbcOSKF4ELyQB1
oCoAoOuqpRqEzr4kOkQqHRLE/b8/Rw2k
=y6kj
-----END PGP SIGNATURE-----

Samodzielne podpisy



Podpisany dokument ma kilka wad. Każdy użytkownik, który chce go odczytać zmuszony jest nawet w przypadku bezingerencyjnego podpisu oddzielić treść od podpisu. Dlatego jest jeszcze trzecia metoda podpisywania dokumentów, która tworzy samodzielny podpis i umieszcza go w osobnym pliku. Służy do tego przełącznik --detach-sig.
alicja% gpg --output doc.sig --detach-sig doc

Musisz podać wyrażenie przejściowe (hasło) aby uaktywnić klucz tajny
dla użytkownika "Alicja (Sędzia) alicja@cyb.org"
długość 1024 bitów, typ DSA, klucz BB7576AC, stworzony 1999-06-04

Wyrażenie przejściowe:


Do sprawdzenia podpisu potrzebne są oba pliki. Przełącznik --verify służy również do potwierdzania samodzielnego podpisu.
blake% gpg --verify doc.sig doc
gpg: Podpis złożony pią 4 sty 1999 12:38:46 CET za pomocą DSA,
z użyciem klucza o identyfikatorze BB7576AC
gpg: Poprawny podpis złożony przez "Alicja (Sędzia) alicja@cyb.org"

Rozdział 2. Techniki



GnuPG korzysta z kilku technik kryptograficznych w tym: szyfrowania symetrycznego, algorytmów z kluczem publicznym (asymetrycznych) i jednokierunkowych funkcji hashujących[3]. Nie trzeba rozumieć wszystkich szczegółów ukrytych za tymi terminami, aby korzystać z GnuPG. Bezpieczeństwo stosowania tych rozwiązań jest jednak w dużym stopniu związane ze zrozumieniem ich podstaw.

W tym rozdziale wprowadzone zostaną podstawowe techniki kryptograficzne stosowane w GnuPG. Więcej szczegółów można znaleźć w książkach dotyczących kryptografii. Godną polecenia pozycją jest podręcznik Bruce'a Shneiera pod tytułem ,,Applied Cryptography''.

Szyfrowanie symetryczne



System kryptograficzny nazywamy symetrycznym, jeśli ten sam klucz służy do szyfrowania i deszyfrowania. Strony komunikujące się przy pomocy tego schematu muszą uprzednio uzgodnić klucz, którym będą szyfrować dane. Nadawca może wtedy zaszyfrować wiadomość ustalonym kluczem, a odbiorca odtworzy przy pomocy tego klucza oryginalną treść. Przykładem systemu symetrycznego może być niemiecka Enigma, do której klucze (codziennie inny) rozprowadzane były w postaci książek kodowych. Operator radia sprawdzał w książce kod na bieżący dzień i szyfrował nim całą transmisję. 3DES, Blowfish i IDEA to współczesne szyfry symetryczne.

W dobrym systemie kryptograficznym bezpieczeństwo zależy wyłącznie od tajności klucza. Znajomość algorytmu nie powinna w żaden sposób pomagać osobom trzecim. Szyfry stosowane w GnuPG mają tę własność, że wiedza o stosowanym algorytmie jest bezużyteczna bez znajomości klucza zastosowanego do szyfrowania.

Ponieważ całe bezpieczeństwo stosowania szyfru leży w tajności klucza, musi być bardzo trudno zgadnąć, jaki jest ten klucz. Innymi słowy zbiór wszystkich możliwych kluczy powinien być jak największy. Richard Feynman słynął w Los Alamos ze swojej umiejętności otwierania sejfów. Aby zwiększyć wiarę innych w swoje nieludzkie możliwości nosił ze sobą zestaw narzędzi, w tym stary stetoskop. W rzeczywistości stosował różne sztuczki do zmniejszenia ilości kombinacji do niewielkiej liczby, po czym sprawdzał je wszystkie. Jednym słowem zmniejszał przestrzeń kluczy.

Podczas 2 Wojny Światowej Anglicy posługiwali się specjalnymi maszynami, które łamały klucze. Niemiecka Enigma miała bardzo dużą przestrzeń kluczy, ale specjalne urządzenie Bombes mechanicznie wypróbowywało wszystkie kombinacje aż do napotkania właściwej (tzn. klucza dziennego). Oznaczało to, że raz klucz był odnajdywany w przeciągu kilku godzin, a innym razem nie został znaleziony wcale. Maszyny Bombes nie nadawały się do przeprowadzania obliczeń w pełnej ogólności, ale można je uznać za prekursorów współczesnych komputerów.

Dziś komputery potrafią liczyć bardzo szybko i dlatego wielkość klucza jest tak istotna we współczesnych kryptosystemach. W algorytmie DES używa się kluczy 56 bitowych, co oznacza że istnieje 256 różnych kluczy. 256 wynosi 72,057,594,037,927,936. To całkiem sporo, ale przeszukanie całej tej przestrzeni zajęłoby zwykłemu komputerowi zaledwie kilka dni. Specjalnie przystosowana maszyna dokonałaby tego w ciągu paru godzin. Z drugiej jednak strony istnieją szyfry takie jak np. 3DES, Blowfish, czy IDEA, które operują kluczami 128 bitowymi. W takim przypadku istnieje 2128 różnych kluczy. To jest znacznie więcej i nawet gdyby wszystkie komputery na naszej planecie współpracowały przy przeszukaniu tej przestrzeni, to mogłoby to im zająć więcej czasu niż upłynęło od powstania wszechświata.

Szyfrowanie z kluczem publicznym (asymetryczne)



Największą wadą szyfrowania symetrycznego nie jest jego bezpieczeństwo, ale kwestie związane z wymiana kluczy. Gdy nadawca i odbiorca uzgodnią klucze, mogą się swobodnie porozumiewać. Ale w jaki sposób mogą przekazać sobie sam klucz? Potencjalnemu adwersarzowi łatwiej byłoby zatem w jakiś sposób przechwycić sam klucz niż wypróbowywać wszystkie możliwe. Kolejnym problemem jest ilość kluczy jakie musi mieć każdy użytkownik. W każdej grupie n-osobowej potrzebnych jest n(n-1)/2 kluczy, aby każda para osób mogła swobodnie rozmawiać. Liczba ta może być znośna dla niewielkich grup ludzi, ale przestaje być dla większych.

Szyfrowanie asymetryczne zostało wymyślone w celu całkowitego uniknięcia problemu wymiany kluczy. W kryptosystemie z kluczem publicznym stosuje się parę kluczy do wysyłania wiadomości. Oba należą do odbiorcy wiadomości. Klucz publiczny może być przekazany każdemu podczas gdy klucz prywatny powinien zostać utrzymany w ścisłej tajemnicy. Nadawca szyfruje wiadomość przy pomocy klucza publicznego. Kryptogram można odszyfrować jedynie znając klucz prywatny.

Taki protokół rozwiązuje nieodłączny problem szyfrów symetrycznych. Zbędne staje się uzgadnianie kluczy między nadawcą i odbiorcą. Jedynym warunkiem jest to, że nadawca będzie posiadał klucz publiczny odbiorcy zanim rozpoczną tajną konwersację. Ponadto ten sam klucz publiczny może być używany przez wszystkich potencjalnych nadawców. A zatem tylko n par kluczy jest potrzebnych, aby n osób mogło się bezpiecznie porozumiewać.

Kryptosystemy z kluczem publicznym oparte są na funkcjach jednokierunkowych (aby być zgodnym z oryginalnym 'one-way trapdoor function' trzeba wspomnieć, że chodzi o takie funkcje jednokierunkowe, których odwrotności są łatwo obliczalne przy danej "wskazówce"). Funkcja jednokierunkowa charakteryzuje się tym, że jest łatwo obliczalna, ale jej odwrotność nie. Na przykład łatwo jest otrzymać liczbę złożoną z mnożenia dwóch liczb pierwszych, ale trudno jest rozłożyć ją z powrotem na czynniki, jeśli ich nie znamy. Wskazówka w funkcjach jednokierunkowych polega na tym, że dysponujemy pewną porcją informacji, która pozwala nam odwrotność danej funkcji obliczyć w sposób efektywny. Załóżmy na przykład, że mamy dany iloczyn dwóch liczb pierwszych. Jeśli będziemy znać jeden z czynników, to w prosty sposób obliczymy drugi. W systemie opartym na faktoryzacji kluczem publicznym jest wynik mnożenia dwóch liczb pierwszych. Do szyfrowania wiadomości używa się właśnie tej liczby. Algorytm odszyfrowujący wymaga znajomości czynników, więc jest bardzo prosty, kiedy zna się jeden z nich, ale wyjątkowo trudny bez tej wiedzy.

Podobnie jak w przypadku szyfrów symetrycznych jakość systemu z kluczem publicznym zależy wyłącznie od klucza. Jednak nie można w żaden sposób porównać siły algorytmu symetrycznego i asymetrycznego porównując wielkości ich kluczy. W ataku typu brute-force na szyfr symetryczny adwersarz musi sprawdzić do 280 kluczy aby znaleźć właściwy. W tego samego typu ataku na szyfr asymetryczny z 512 bitowym kluczem adwersarz musi rozłożyć na czynniki pierwsze liczbę zapisaną na 512 bitach (do 155 cyfr dziesiętnych). Koszt jest znacząco różny i zależy od zastosowanego szyfru. Podczas, gdy 128 bitowe klucze wystarczają w szyfrowaniu symetrycznym, to zaleca się stosowanie 1024 bitowych kluczy publicznych.

Szyfry hybrydowe



Szyfrowanie z kluczem publicznym nie jest lekarstwem na wszystkie bolączki. Wiele szyfrów symetrycznych jest silniejszych, a procedury szyfrujące i deszyfrujące w algorytmach asymetrycznych są mniej efektywne. Systemy z kluczem publicznym są jednak bardzo wygodnym narzędziem do rozpowszechniania kluczy symetrycznych i tak właśnie są używane w systemach hybrydowych.

W systemie hybrydowym klucz do szyfrowania symetrycznego jest przekazywany jako wiadomość zakodowana kluczem publicznym. Właściwa wiadomość może być później zaszyfrowana przy pomocy klucza symetrycznego. To rozwiązanie pozwala na ustalanie nowego klucza symetrycznego do każdej transmisji. Klucz taki nazywa się czasami kluczem sesyjnym.

Zarówno PGP jak i GnuPG stosują szyfry hybrydowe. Klucz sesyjny szyfrowany jest kluczem publicznym, a wiadomość zakodowanym kluczem. Złączone razem tworzą kryptogram. Odbiorca używa swojego klucza prywatnego do odkodowania klucza sesyjnego, przy pomocy którego może odczytać wiadomość.

Szyfr hybrydowy jest tak bezpieczny jak jego najsłabsze ogniwo. W PGP i GnuPG szyfrowanie asymetryczne jest prawdopodobnie tą słabszą częścią. Tak się szczęśliwie składa, że jeśli komuś uda się odszyfrować klucz sesyjny, to będzie mógł za jego pomocą odczytać tylko tę jedną wiadomość. W celu odszyfrowania następnej wiadomości będzie musiał powtórzyć całą procedurę odkodowania nowego klucza sesyjnego.

Podpisy cyfrowe



Funkcja hashująca jest funkcją zawężającą, która przyporządkowuje swoim argumentom elementy skończonego zbioru. Zbiorem wartości jest na ogół pewien podzbiór zbioru liczb naturalnych. Wynik funkcji hashującej nazywamy hashem. Prostym przykładem funkcji hashującej jest f(x) = 0 dla wszystkich x ze zbioru liczb całkowitych. Znacznie ciekawszą funkcją hashującą jest f(x) = x mod 37, która liczbie x przyporządkowuje jej resztę z dzielenia przez 37.

Podpisem cyfrowym dla dokumentu jest wynik funkcji hashującej obliczony dla tego dokumentu (czyli hash tego dokumentu). Szczególnie pożądane są funkcje hashujące posiadające następujące dwie własności. Po pierwsze, trudno powinno być znaleźć dwa różne dokumenty, dla których wynik funkcji hashującej będzie ten sam. Po drugie, trudne powinno być odzyskanie dokumentu, który dał określony wynik.

Niektóre szyfry asymetryczne[4] nadają się również do podpisywania dokumentów. Podpisujący szyfruje dokument swoim kluczem prywatnym. Każdy, kto zechce sprawdzić prawdziwość podpisu może użyć klucza publicznego podpisującego, aby odszyfrować dokument. Ten algorytm posiada obydwie pożądane właściwości dobrej funkcji hashującej, ale w praktyce jest zbyt wolny.

Alternatywnie można używać funkcji hashujących specjalnie do tego zaprojektowanych. Przykładami takich algorytmów są SHA i MD5. Wartość funkcji obliczonej dla zadanego dokumentu jest jego podpisem. Osoba chcąca zweryfikować poprawność podpisu oblicza tę samą funkcję dla dokumentu i porównuje z wartością uzyskaną dla oryginału. Jeśli obie są takie same to z prawie stuprocentową pewnością można powiedzieć, że oba te dokumenty są identyczne.

Problemem tkwi w tym, jak używać funkcji hashujących, aby uniemożliwić osobom trzecim wpływ na weryfikację podpisu. Jeśli dokument i jego podpis wyślemy niezaszyfrowane, to ktoś mógłby zmienić dokument i wygenerować do niego podpis bez wiedzy odbiorcy. Jeśli zaszyfrujemy tylko dokument, to adwersarz może zmienić podpis powodując, że nie powiedzie się weryfikacja podpisu. Trzecią możliwością jest użycie szyfrowania hybrydowego do zakodowania dokumentu i podpisu. Podpisujący używa w tym celu swojego prywatnego klucza, a każdy może potem przy pomocy klucza publicznego zweryfikować poprawność dokumentu i podpisu. Pomysł wydaje się niezły, ale jest kompletnie chybiony. Gdyby ten algorytm zabezpieczył dokument, ochroniłby go również przed wszelkimi innymi zmianami, więc mógłby służyć zamiast podpisu.

Sprawę załatwia zaszyfrowanie kluczem prywatnym samego podpisu. Obliczony dla dokumentu hash jest szyfrowany i każdy może przy pomocy klucza publicznego sprawdzić podpis. Podpisany dokument może być zaszyfrowany dowolnym innym algorytmem, lub nie być szyfrowany w ogóle jeśli jest otwarty. Sprawdzenie poprawności podpisu dla zmienionego dokumentu zawiedzie, ale to jest właśnie to, czego oczekujemy od podpisu elektronicznego. DSA (Digital Signature Algorithm) jest podpisem z kluczem publicznym, który działa zgodnie z opisanym powyżej schematem. GnuPG używa DSA jako podstawowego algorytmu do podpisywania dokumentów.

 


Do góry Do góry 
 
Powrót Powrót 
1    2    3     
 Następna Następna
Wyślij znajomemu Drukuj
Dodaj komentarz
Temat: *
Treść: *
Podpis: *
Adres e-mail: Nie publikuj adresu na stronie
Powiadom mnie
jeżeli ktoś doda komentarz:
(Musisz podać adres emial aby skorzytsać z tej opcji)
 
* - pola obowiązkowe

Komentarze powinny być zgodne ogólnie przyjętymi normami moralnymi oraz zasadami netykiety.
Zabronione jest umieszczanie obraźliwych, niecenzuralnych wypowiedzi. Niedozwolone jest również
wykorzystywanie serwisu do celów komercyjnych bez wiedzy i zgody administratora.
Komentarze które naruszą powyższe warunki będą usuwane.

Za treści pozostawione przez osoby odwiedzające nasze serwisy, zespół linuxpub.pl nie ponosi odpowiedzialności.
 
Wiadomości | Archiwalne wiadomości | Faq | Felietony | Podstawy | Konfiguracja | Administracja | Programowanie | Licencja GNU/GPL
2000 - 2008 Copyright (c) linuxpub.pl, epub.pl | Zgłoś błąd