Zarządzanie kluczami

Mamy już swój klucz i chcemy go użyć - tylko jak? Podstawowym programem jest gpg. Użyliśmy go już przy generowaniu kluczy, teraz opiszę kilka innych jego opcji. Aby uzyskać więcej informacji skorzystaj z dokumentacji lub manuala dostępnego przez polecenie man gpg. Polecenie gpg --help wyświetli krótkie informacje na temat najważniejszych opcji programu. Jeśli nie lubisz używać konsoli, to istnieją programy będące graficznymi nakładkami na gpg (jeden z nich opiszę w dalszej części artykułu), ale nawet jeśli planujesz ich używać, powinieneś znać chociaż podstawy gpg.

Wyświetlanie listy kluczy

Aby wyświetlić listę kluczy użyj polecenia gpg --list-keys. Zostaną wypisane informacje na temat naszego (jedynego jak do tej pory) klucza.

$ gpg --list-keys /var/home/.gnupg/pubring.gpg

pub 1024D/630BE83F 2004-11-16 Imie Nazwisko sub 1024g/624564B4 2004-11-16 $

Drugi sposób to użycie gpg --fingerprint, który poda nam również odcisk palca (fingerprint) każdego klucza.

$ gpg --fingerprint /var/home/gnupg/.gnupg/pubring.gpg

pub 1024D/6CA7 0F6B 2464 909C 1A85 6585 0076 630B E83F sub 1024g/624564B4 2004-11-16 $

Eksport klucza publicznego Jeśli chcemy, by inni mogli szyfrować wysyłane do nas wiadomości, muszą oni mieć nasz klucz publiczny. Musimy go zatem wyeksportować. Możemy to zrobić na dwa sposoby. Pierwszy to export do pliku binarnego. Służy do tego przełącznik --export [nazwa]. [nazwa] jest opcjonalna i określa, który klucz wyeksportować (możemy użyć numeru lub adresu e-mail a nawet tylko jego części). Jeśli nie zostanie podana, wyeksportowane zostaną wszystkie klucze. Program gpg domyślnie zapisuje wynik do standardowego wyjścia więc musimy je przekierować do pliku (tak jak poniżej). Alternatywnym rozwiązaniem jest użycie przełącznika --output .

$ gpg --export [email protected] >/tmp/klucz $ file /tmp/klucz /tmp/klucz: GPG key public ring $

Drugi sposób to export do pliku tekstowego (który można np. "wkleić" do e-maila lub na stronę internetową). W tym przypadku musimy dołączyć jeszcze opcję --armour. Podobnie jak poprzednio możemy albo przekierować wyjście programu albo ustalić plik wyjściowy przełącznikiem --output. Robimy to tak:

$ gpg --armour --output /tmp/klucz2 --export [email protected] $ file /tmp/klucz2 /tmp/klucz2: PGP armored data public key block $ cat /tmp/klucz2 -----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.2.6 (GNU/Linux)

mQGiBEGaNQMRBADjQnGz4XaFgnyw9myEDRzDT9yZNdbkVk6wTF1e0YUgikmLAV+V yP1PLnLmzNaSt8omssoBp5S5ysTY6FMqFGtytCQek4YZyxbO/tP4SUUnM8w8rvgN 1K54+xSHF4RyINagEZbjTBPw5A8rTZXReVJ5Wc4O+uV58XwPETXMPXCCTwCgzF9I pcUa6A7G/tj4BebQms5sZbMD/AhcskgaZW+IR/wKrI9EH04Jt+phrONfx1uXr8Dw HVftalxLYQBANC3RBfxqRxrn5+vRk6Kp9X18wO9Iz342/mMlxam4d+m7vnrNK8wc qeIKv01ICGbtNKh0JISrJ7eDfJfHmuuC5+pCTBx3ZcxAxsmwD4t6029vEG0O2BOh 4cTiBADMQyiBIBYhPxqoCCKBI+H/HyLIqrV2BwKMb8bfWWL9B22704EYZOVO7oCG ACrePrYVMf0lsg2CfnDdK74AOe7K5bAIi/t3DJHbOgjpbzUXWjvVLMoC7M5lMJAg G375YD8KAVXVo61l75fpxeKRO/6LQd4EyGQ1WjKkKv/Zo+ujIbQeSW1pZSBOYXp3 aXNrbyA8YWRyZXNAZW1haWwucGw+iF4EExECAB4FAkGaNQMCGwMGCwkIBwMCAxUC AwMWAgECHgECF4AACgkQZYUAdmML6D/UXACghsaiUUUvQvnqzOBVPQv3BtWeAQkA oJkaQr4GRXnKRplRDIJu7gxnx3j3uQENBEGaNQoQBAC5AT4WPf/P633ZPyUUgQyR 3hfHXGc6JAbqybXC9XsOWwTX9SroFz2ew+T69WXIFLxOy/wkzsiOc1vWVmaDuu0k VOuaaNp2K9JwZU4Z2kDdkAs7G0UxNSjTCcdbNeUQgZkWjhzafg0hr1x69Gw3Y39O yVz1H7tSCRRUB88CEoggQwADBgQAo/RYzidlKQ8SNgd7IUX7JH7ZBsxACuvkygFE rK0oZpjeMYIypLm1yhsQ3BlnQDL4P9bSHn7SlVmHg3IlaBJSMZZ6HnTcnnDqfPun VWFfpatIEMI1ZszC/QzhD5L8dDQTUWwaacTrwVv5zXmbHx8gICoCLoTZrjfIxV5y d922OhqISQQYEQIACQUCQZo1CgIbDAAKCRBlhQB2YwvoP64MAKCOQK76i9lrE9oI UrNYM/v4Myap4QCcD3B77vNHeu+CfBv56a7XPYlbLgY= =AFFC -----END PGP PUBLIC KEY BLOCK-----

Po wyeksportowaniu klucza publicznego (w formie binarnej lub tekstowej) możemy go wysłać znajomym e-mailem, udostępnić np. na stronie internetowej lub skorzystać z innego sposobu komunikacji. Nie musimy się obawiać, że nasz klucz publiczny trafi do kogoś, kogo nie znamy. Jak już wspomniałem, nie stanowi to zagrożenia.

Import klucza publicznego Wiemy już jak eksportować klucze. Teraz nauczymy się je importować. Sprawa ma się podobnie jak w przypadku eksportu - możemy określić plik z którego wczytane zostaną klucze lub po prostu przekierować wejście programu. Do importu używamy parametru --import [nazwa-pliku]. Jeśli nie podamy nazwy pliku, program będzie próbował wczytać je przez standardowe wejście. Nie ma różnicy czy importowany plik ma postać binarną czy tekstową. Oto przykład:

$ gpg --import /tmp/klucz-import gpg: klucz D82E0E4B: klucz publiczny ,,Krzysztof Adamski '' wczytano do zbioru gpg: Ogółem przetworzonych kluczy: 1 gpg: dołączono do zbioru: 1

$ gpg --list-keys /var/home/gnupg/.gnupg/pubring.gpg

pub 1024D/630BE83F 2004-11-16 Imie Nazwisko sub 1024g/624564B4 2004-11-16

pub 1024D/D82E0E4B 2004-02-07 Krzysztof Adamski sub 1024g/E9B3B634 2004-02-07 $

Jak widać został zaimportowany nowy klucz i znajduje się on na naszej liście kluczy. Teraz możemy już wysyłać zaszyfrowane wiadomości do osobnika używającego tego klucza, a także sprawdzać jego podpisy.

Weryfikacja kluczy Po zaimportowaniu klucza powinniśmy go zweryfikować. Polega to na sprawdzeniu odcisku palca klucza. Jest to rodzaj hash'u klucza. Nawet najmniejsza zmiana klucza powoduje również zmianę odcisku. Żeby być pewnym, że wszystko jest w porządku, musimy po prostu skontaktować się z właścicielem klucza (np. przez telefon lub jakiś IM, ważne jest tylko żebyśmy byli pewni, że rozmawiamy z właściwą osobą, a nie z kimś, kto się pod nią podszywa) i poprosić o podyktowanie odcisku. Jeśli jest taki sam jak ten, który widzimy u siebie to możemy być pewni, że klucz publiczny nie został zmieniony. Weryfikacja jest najsłabszym ogniwem w kryptografii z kluczem publicznym. Powinniśmy więc być przy niej ostrożni i zawsze sprawdzać fingerprint przed uznaniem klucza za poprawny. Po weryfikacji możemy podpisać klucz publiczny naszym kluczem prywatnym. Możemy to zrobić używając opcji --edit-key [nazwa klucza]. Dzieki niej przejdziemy w tryb interaktywny i będziemy mogli wydawać polecenia. Aby uzyskać ich listę wytarczy wpisać '?'. Nie będę się tu zajmował ich dokładnym opisem, jeśli jesteś zainteresowany, to odsyłam do manuala. Do podpisywania kluczy służy polecenie sign. Poniżej pokazuję jak to wygląda:

$ gpg --edit-key [email protected] gpg (GnuPG) 1.2.6; Copyright (C) 2004 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/D82E0E4B utworzony: 2004-02-07, wygasa: nigdy zaufanie: -/- sub b1024g/E9B3B634u tworzony: 2004-02-07, wygasa: nigdy (1). Krzysztof Adamski

Polecenie> sign

pub 1024D/D82E0E4B utworzony: 2004-02-07, wygasa: nigdy zaufanie: -/- Odcisk klucza głównego: B33C 5CF3 2083 1A33 B449 90E5 400A D4C2 D82E 0E4B

Krzysztof Adamski

Jak dokładnie została przez Ciebie sprawdzona tożsamość tej osoby? Jeśli nie wiesz co odpowiedzieć, podaj ,,0''.

(0) Nie odpowiem na to pytanie. (domyślnie) (1) W ogóle nie. (2) Pobieżnie. (3) Bardzo dokładnie.

Twój wybór (,,?'' podaje więcej informacji): 3 Czy jesteś naprawdę pewien że chcesz podpisać ten klucz swoim kluczem: "Imie Nazwisko " (630BE83F)

Tożsamość użytkownika została dokładnie sprawdzona. Czy na pewno podpisać? t

Po podpisaniu możemy zobaczyć listę podpisów. Każdy klucz jest podpisany przez jego właściciela i może być podpisany przez innych. Służy do tego polecenie sign.

Polecenie> check uid Krzysztof Adamski sig!3 D82E0E4B 2004-02-07 [podpis klucza nim samym] sig!3 630BE83F 2004-12-02 Imie Nazwisko Polecenie>

Aby zmiany zostały zapisane, powinniśmy użyć polecenia save lub potwierdzić chęć zapisu przy wyjśćiu poleceniem quit. Jeśli praca programu zostanie nagle przerwana (np. przez ctrl-c), zmiany mogą nie zostać utrwalone.

Ustalanie zaufania kluczy

Osobiste weryfikowanie dużej ilości kluczy może być kłopotliwe. Aby rozwiązać ten problem, GnuPG używa mechanizmu web of trust (z ang. sieć zaufania). W skrócie polega on na tym, że możemy ustalić zaufanie dla kluczy, przykładowo: - nasz kolega Krzysiek podpisał klucz Mateusza, - Mateusz podpisał klucz Adama. Jeśli Krzysiek ufa Mateuszowi, to nie musi już sam sprawdzać poprawności podpisanych przez niego kluczy (może uznać klucz Adama za prawidłowy). Idąc dalej, jeżeli my ufamy Krzyśkowi, nie musimy weryfikować kluczy Mateusza ani Adama. Oczywiście zaufanie może być ograniczone, z tego powodu wyróżnia się pięć jego poziomów:

1 - nie wiem

Jest to podstawowy poziom. Dopóki nie określisz inaczej, klucz będzie miał właśnie ten poziom zaufania. Oznacza on, że nic nie wiemy na temat jego poprawności.

2 - NIE ufam mu

Wiemy, że klucze podpisane przez tego użytkownika mogą być fałszywe. Jego podpis nic nie znaczy.

3 - mam ograniczone zaufanie

Właściel klucza potrafi podpisywać klucze i robi to raczej dobrze. Nie jesteśmy jednak na tyle pewni jego podpisu, żeby uznać klucz za poprawny tylko i wyłącznie na podstawie tego jednego podpisu. Jeśli klucz posiada kilka podpisów na tym poziomie to mu ufamy.

4 - mam pełne zaufanie

Ufamy jego właścicielowi na tyle, żeby uznać za poprawny każdy klucz przez niego podpisany.

5 - ufam absolutnie

Podpisom jego właściciela ufasz jak swoim własnym. Tego poziomu używa się najczęściej do podpsiywania własnych kluczy. Używanie go w innych wypadkach nie jest zalecane.

Zaufanie dla klucza ustalamy samodzielnie i jest to informacja osobista. Oznacza to, że nie jest ona eksportowana razem z kluczem. Jest ona nawet przechowywana w oddzielnym pliku. Do jego ustalania możemy użyć edytora kluczy i polecenia trust. Poniżej pokazuje proces zmiany zaufania dla klucza.

$ gpg --edit-key [email protected]

pub 1024D/D82E0E4B utworzony: 2004-02-07, wygasa: nigdy zaufanie: m/f sub 1024g/E9B3B634 utworzony: 2004-02-07, wygasa: nigdy (1). Krzysztof Adamski

Polecenie> trust pub 1024D/D82E0E4B utworzony: 2004-02-07, wygasa: nigdy zaufanie: m/f sub 1024g/E9B3B634 utworzony: 2004-02-07, wygasa: nigdy (1). Krzysztof Adamski

Zastanów się jak bardzo ufasz temu użytkownikowi w kwestii sprawdzania tożsamości innych użytkowników (czy sprawdzi on odciski kluczy pobrane z różnych źródeł, dokumenty potwierdzające tożsamość, itd.).

1 = nie wiem 2 = NIE ufam mu 3 = mam ograniczone zaufanie 4 = mam pełne zaufanie 5 = ufam absolutnie m = powrót do głównego menu

Twoja decyzja? 4

pub 1024D/D82E0E4B utworzony: 2004-02-07, wygasa: nigdy zaufanie: f/f sub 1024g/E9B3B634 utworzony: 2004-02-07, wygasa: nigdy (1). Krzysztof Adamski Pokazana wartość wiarygodności klucza może być niepoprawna, dopóki program nie zostanie uruchomiony ponownie. Polecenie>

Zaufanie dla klucza jest wypisywane po jego prawej stronie zaraz za inforamcją o tym, kiedy klucz wygasa. Składa się on z dwóch liter, pierwsza oznacza nasze zaufanie dla właściciela klucza a druga to zaufanie dla klucza. Należy tu odróżnić zaufanie do klucza od zaufania do jego właściela. Mogą one być różne. Np. jeśli podpisujemy klucz oznacza to, że ufamy mu w pełni. Możemy jednak nie ufać, że jego właściciel odpowienio podpisuje klucze i ustawić zaufanie dla niego na ograniczone. W takim wypadku zaufanie będzie przedstawione jako m/f. Oto znaczenie liter:

q - nie wiem

n - NIE ufam mu

m - ograniczone zaufanie

f - pełne zaufanie

u - zaufanie absolutne

Określanie zaufania dla klucza jest dość złożone. Aby uznać klucz za zaufany (f), muszą być spełnione poniższe warunki: 1. Klucz jest podpisany przez wystarczającą liczę zaufanych kluczy, tj.: - osobiście, przez Ciebie, lub - został podpisany przez przynajmniej jeden w pełni zaufany klucz, lub - został podpisany przez przynajmniej trzy klucze o ograniczonym zaufaniu; 2. Ścieżka podpisanych kluczy między Twoim kluczem a danym nie może być dłuższa niż pięć.