Kiedy korzystamy z szyfrowania musimy posiadać klucze szyfrujące nasze oraz partnerów. W zarządzaniu kluczami pomaga nam oprogramowanie między innymi takie jak Gnu4Win GPA (Gnu Privacy Assistant). Program pozwala generować pary kluczy (prywatny + publiczny), eksportować publiczne na serwery i do plików a prywatne archiwizować w plikach. Podstawy szyfrowania zawarto w innym poście.
Najpierw utworzymy parę osobistych kluczy prywatny + publiczny, w tym celu przechodzimy do GPA i z menu Keys / New key… uruchamiamy kreatora kluczy.
W naszych przykładach używamy kluczy o długości 2048 bitów oraz opartych o algorytm RSA. Pozostałe dane wedle uznania mając na uwadze, że data ważności klucza może być wymagana w niektórych środowiskach jednak wiąże się to z koniecznością dbania o archiwum oraz historię kluczy co już nie jest takie proste.
Kolejny krok to ustalenie hasła dla klucza prywatnego i wygenerowanie pary kluczy przez GPA. Jeśli to była pierwsza para kluczy automatycznie staje się ona kluczami domyślnymi:
W podsumowaniu mamy ważne informacje dotyczące parametrów klucza, co stanie się jaśniejsze przy imporcie innych kluczy z jakimi będziemy pracować.
Przyjrzyjmy się jeszcze konfiguracji programu: menu Edit / Preferences, gdzie można ustawić domyślny serwer kluczy, ustawmy zatem na keyserver.ubuntu.com
W sumie w tym momencie można już zacząć pracę, jednak dobrze jest wykonać jeszcze kilka kroków celem zabezpieczenia naszych kluczy. Wez pod uwagę, że to co zaszyfrujesz kluczem publicznym może być odszyfrowane tylko związanym z nim kluczem prywatnym. Gdy stracisz klucz prywatny prawdopodobnie nigdy już nie uzyskasz danych zaszyfrowanych związanym z nim kluczem publicznym. Wobec tego należało by jakoś zabezpieczyć najlepiej oba klucze. W omawianym programie mamy taką możliwość i to w kilku wariantach:
– eksport klucza publicznego na ogólnodostępny serwer
– eksport klucza publicznego do pliku tekstowego
– archiwizacja pary kluczy do pliku tekstowego
– kasowanie klucza / pary kluczy
– wczytanie pary kluczy z pliku tekstowego
– wczytanie klucza publicznego z pliku tekstowego
– import klucza publicznego z serwera
– podpisywanie innych kluczy
Eksport klucza publicznego na ogólnodostępny serwer
W sieci mamy dostępnych wiele serwerów kluczy publicznych takich jak
http://keyserver.ubuntu.com/
http://pgp.mit.edu/
http://keys.gnupg.net/
oraz inne świadczące podobne usługi. Pamiętaj o jednym fakcie: raz posłany tam klucz zostaje na zawsze – praktycznie nie ma możliwości jego skasowania gdyż serwery te tworzą sieć i co „wrzucisz” do jednego pojawia się na wielu innych. Wgrywanie klucza publicznego jest automatyczne i bardzo proste:
Kliknij prawym klawiszem myszki dany klucz (parę kluczy) i wybierz opcję Send Keys – klucz publiczny zostanie wysłany na serwer (o tym na jaki decyduje opcja Default keyserver z menu Edit / Preferences programu GPA).
Aby sprawdzić czy klucz znajduje się na serwerach kluczy wystarczy otworzyć jedną z podanych wyżej stron np: http://keyserver.ubuntu.com i w pole Search string wpisać dane użytkownika (np mail) jakie były podane przy tworzeniu jego klucza:
W odpowiedzi dostajemy przechowywane klucze. Uwaga – Search string poszukuje dokładnie takich danych jak wpiszemy – to nie Google więc Igor Brzeżek to zupełnie coś innego niż Igor Brzezek (ż i z) więc najlepiej szukać po adresie e-mail. Poniżej fragment odpowiedzi serwera kluczy:
Jak widać klucze posortowane są wdł. daty ich umieszczenia i opisane zgodnie z tym co widzimy w programie GPA. Mój najnowszy klucz ma ID: D915D89E. ID będzie potrzebne do importu kluczy w programie GPA ale o tym nieco pózniej. Klikając w ID klucza jago widok wyświetla się w przeglądarce tak więc można go skopiować, wkleić do pliku a następnie zaimportować do GPA.
Eksport klucza publicznego do pliku tekstowego
Kolejna możliwość to eksport klucza publicznego do pliku tekstowego celem archiwizacji lub przekazania innym. W tym celu z przycisków wybieramy pozycję Export lub na danym kluczu (kluczach) klikamy prawym i wybieramy opcje Export Keys.
Pojawia się okno zatytułowane: Export public keys to file co wyraznie oznacza eksport tylko klucza (kluczy) prywatnego. W oknie podajemy nazwę pliku (może być email + ID klucza z rozszerzeniem asc) oraz włączmy opcję armor oznaczającą zapis do pliku w postaci tekstu ASCII (jest to bardziej uniwersalne). Tak wyeksportowany klucz w postaci pliku możemy udostępnić wszystkim, którzy chcą wysyłać do nas zaszyfrowane wiadomości lub sprawdzać nasz podpis cyfrowy. W mojej wersji program niestety nie wstawiał automatycznie rozszerzenia asc co pewnie będzie naprawione w nowszych edycjach.
Wygenerowany plik można przeglądać w dowolnym edytorze tekstu, kopiować zawartość i np. wkleić na swoja stronę www czy do maila. Ważne jest aby nie zmienić ani jednego znaku gdyż to spowoduje zniszczenie klucza. Poniżej widok klucza publicznego z wyeksportowanego pliku.
—–BEGIN PGP PUBLIC KEY BLOCK—–
Version: GnuPG v2.0.17 (MingW32)
mQENBFFfFh8BCACzb383NDIdV53t1F1cpWgS0NF95qLApf4c9VGwCEDCglMunMWG
I+xHy18F6iUpP4HI9Ws0vTP/gz+VqwkA7IfmBG47cEt5/a6ltZgGlh2BxrQ7aVSM
0uCc3O5b/wcrI5Eg1nUb60dhQWWBR/M+tPAzfRl2MyAXn/VYbir44LIM1EkA9Xb8
SwKFVGJ3SeX9nuJXMUP4VXynyLIfDVzj/zHBPKeRiTD8stVTi6mSapzJH3I6/S9H
DrnB6qJe7m0xYsEJgWsXwya5D3XPJfmH+eEYXHgzg7e97YdSwjkCtHrpN3Nnn0Qd
RUzi6HJN4Z5fYRu44x3xRPk5+fJkCtCOxZdbABEBAAG0Nklnb3IgQnJ6ZXplayAo
S2x1Y3ogb3NvYmlzdHkpIDxpZ29yLmJyemV6ZWtAZ21haWwuY29tPokBOAQTAQIA
IgUCUV8WHwIbAwYLCQgHAwIGFQgCCQoLBBYCAwECHgECF4AACgkQbTE72NkV2J7S
sQf/eqlwXS7Sse5M5BqqbSOiDOsR2cRuVnenZIqCqgXr7v8yUxvv9GAW3WuJ3vkK
2CQ9tDz4nE2OkW3KI9PYgWacwCv2hDO7ZiJ2tRXM8TmgsquB9GfFmCQ2gAbH/tt9
bNZbtJz7y5tEmaz1mruDAVzUYEK2zL4JJWhSV3JGcR7D94R4NmXM9XRJxxsP9weS
AcPRb+Qu6hB/c7j505a2wf80MKNRifDsvJgWUcA8Qt008L9V20JgX9vjMYYgzu2e
J+Va9HvzAPyPhOCOVujmkIy40vz9onsRYj2RDEw6zoL8f6+J2y94x5XJHbQTKaNo
mUHu/f1VUy9GJBEBUy4mJsKP4LkBDQRRXxYfAQgAo0Uh/P0ngbwMw5aDJKU017vJ
3cPbJCL+aj+WMsTNd+YN5I1HTkqm2LDUNrXUwmoA92wgIgci+l8YN5qMY1Fuctk4
Dy+3PX+GQJJUzhJfQeN9Kv7xtPUCtzX78HpzxniO0BiA76GAkme3kTOzOUdtYzU+
ciXuKbIYhEUmg0l6Zemj4yvQYmqP2bBlHMvqXL40xtb72WbD5tpPRWTvsAYdEjU4
ljSYdaME+SZxymaNKRpFXdYYeK93tL2t7EpUz0QfIlBCr09XP+o7ss25V4ePITvE
7yrPFtWf23A5q6M8gxYfHUcoBU33H6NUrdue/7XIgdpa3FukDWC2XyadtfS+UQAR
AQABiQEfBBgBAgAJBQJRXxYfAhsMAAoJEG0xO9jZFdieCNMH/Rfh2QltMGSyYJwU
BG9dcyitgR2c4eXUA2EOEN2fIje1p6e2NoBz9+sDIvS9rL7wc6Ef+helBoRS1ArC
uDuUjxnafCRIURe0cB2NosoJs990Q1eCBxA7DZsnZY5QH/j34dnae98S9ZDu5Ml/
L+EKvpFEpRr3DN/hQq7QdqLj0QkTPvqnLDjwVOTo548A4wzbWMHM1E2VFCbKJ8WC
R8mZBtdjaX6RrOtPkkGvWJQm7saFHwtmuCOs/haT/4b42j4scDOOLMJkWiFpxrwu
C6HG9AZBDgCpprpMmVe0R7m1fijAZ0S7GDDDLqhLfgS4vPayoUu45NsbJdfCDII0
/T8PHYI=
=RTbv
—–END PGP PUBLIC KEY BLOCK—–
Archiwizacja pary kluczy do pliku tekstowego
Archiwizacja (ang. backup) to nie to samo co eksport gdyż zapisuje ona do pliku (najczęściej też tekstowego) klucz publiczny oraz prywatny co naraża go na ujawnienie. Wobec tego tak wygenerowany plik należy zabezpieczyć. Archiwizację wykonuje się w wielu celach, dla uproszczenia przyjmijmy, iż jest ona potrzebna w przypadku np. uszkodzenia nośnika z kluczem. W takiej sytuacji oba klucze można łatwo odzyskać z pliku archiwum. W celu archiwizacji zaznaczamy wymagany klucz (najczęściej jest to powiązana para), klikamy prawy i z menu wybieramy pozycję Backup. To samo osiągniemy korzystając z menu Keys / Backup.
Pojawia się okno podobne do eksportu klucza publicznego z tym, że tym razem program już wygenerował nazwę pliku docelowego składającą się z frazy secret-key-ID_KLUCZA.asc, co oznacza iż mamy do czynienia z kluczem prywatnym (secret) i plikiem tekstowym. Do nazwy można dodać e-mail czy dane właściciela.
Kasowanie klucza / pary kluczy.
Jeśli mamy już zarchiwizowaną parę kluczy (w pliku i na serwerze) oraz klucz publiczny możemy dokonać operacji skasowania kluczy celem przedstawienie operacji importu. W tym celu zaznaczmy klucz, klikamy prawym i wybieramy opcję Delete keys. Jest to operacja nieodwracalna więc program dwa razy każe ją potwierdzić po czym klucze zostają bezpowrotnie skasowane. Jeśli coś zaszyfrowałeś a nie masz kopii kluczy (zwłaszcza prywatnego) masz kłopot…
Jeśli skasowałeś wszystkie pary swoich kluczy GPA przy następnym uruchomieniu pokaże błąd:
Oznacz to iż brak klucza domyślnego. Nic nie szkodzi za chwilę wczytamy takowy i będzie ok. Generalnie jedne z kluczy (zazwyczaj pierwszy wczytany czy utworzony) prywatnych jest kluczem domyślnym jaki stosowany jest domyślnie przy operacjach podpisu.
Wczytanie pary kluczy z pliku tekstowego.
Pierwsze odzyskanie klucza przeprowadzimy na bazie klucza publicznego. To dokładnie to co będziesz robić w przypadku gdy dostaniesz od kogoś jego klucz publiczny. Potem wczytamy jeszcze dwa klucze publiczne, używane w innym poście dotyczącym szyfrowania. Są to klucze Janka i Helgi. Jeśli w pliku mamy klucz publiczny wczytamy go bez problemu ale jeśli jest to plik z parą kluczy (publiczny + prywatny) będzie trzeba podać hasło klucza prywatnego.
1 – Wczytujemy nasz poprzednio skasowany klucz, w tym celu z programu GPA wybieramy menu Keys / Import keys i wskazujemy plik z parą naszych kluczy (uprzednio zarchiwizowanych, w tym wypadku plik IgorBrzezek_secret-key-4D6E9EE5.asc ). Ponieważ jest to para kluczy wczytana z pliku a więc z założenia nie są one zaufane. Aby podnieść poziom ufności dla tych kluczy należy zmienić to poprzez menu Keys / Set Owner Trust, który ustawiamy na Ultimate. (Poziom zaufania dla kluczy opisany jest w dokumentacji GPG, generalnie Ultimate tylko dla tych którym ufamy i znamy ich gdyż powoduje to iż ufamy też kluczom podpisanym przez te osoby co może tworzyć długi łańcuchy zaufania)
Jak widać poniżej zaufanie dla klucza zostało ustanowione na pełne:
Ponieważ wczytano parę kluczy należy je traktować jako klucze osobiste. Możemy teraz dla lepszego zobrazowania dalszych czynności dodać nową parę kluczy, którą wygenerujemy wcześniej poznanym sposobem (Keys / New keys)
OK mamy już drugą parę kluczy czas na dalsze czynności.
2 – Klucz domyślny. Zauważmy, iż nadal nie ma klucza domyślnego (status u dołu okna), aby takowy ustanowić przechodzimy do menu Edit / Preferences i zaznaczamy wybraną parę kluczy, od tego moment staną się one kluczami domyślnymi, automatycznie używanymi przez program do np podpisywania, co oczywiście możemy w trakcie różnych operacji zmienić.
Zaznaczamy wybraną parę kluczy, ew. inne opcje i klikamy OK. W tym momencie mamy ustanowiony klucz domyślny co widać w dolnej linii statusowej programu GPA:
Wczytanie klucza publicznego z pliku tekstowego
Kolejna operacja polega na imporcie kluczy publicznych naszych partnerów komunikacji, najpierw zajmiemy się wczytaniem kluczy publicznych z dostarczonych nam plików. Pliki możemy otrzymać od znajomych, którzy chcą abyśmy szyfrowali dla nich dane ich kluczami publicznymi tak aby mogli je rozszyfrować. Janek i Helga wyeksportowali już swoje klucze publiczne do plików janek_pub.asc i helga_pub.asc oraz dostarczyli je nam. Aby zaimportować klucz publiczny do GPA wybieramy menu Keys / Import keys i zaznaczamy właściwy plik z kluczem czy kluczami. W ten sposób można importować klucze publiczne znajomych. Czynność przeprowadzamy dla oby podanych wyżej plików. W GPA pojawiły sie wczytane klucze publiczne, jednak nie są one kluczami zaufanymi i trzeba to zmienić w podany wcześniej sposób (Kesy / Set Owner Trust) zmieniamy na Ultimate.
Pobranie klucza z serwera
Klucz publiczny z serwera kluczy można pobrać na dwa sposoby:
– z poziomu GPA
– ręcznie przeszukując zasoby serwera a następnie wklejając klucz do pliku tekstowego, który z kolei importujemy do GPA
Automatyczne wczytanie klucza z serwerów kluczy polega na wybraniu menu Server / Retrieve keys i wpisaniu ID klucza. Jeśli ID jest poprawne klucz publiczny danej osoby zostanie zaimportowany. ID klucza dostajemy od właściciela lub szukamy w bazie kluczy za pomocą metod opisanych wyżej.
Podpisywanie kluczy
Każdy klucz jest podpisany sam przez siebie co można zobaczyć w statusie klucza:
W tym wypadku mamy klucz publiczny Janka, który jest podpisany sam przez siebie co oznacza, iż jeszcze nikt go nie podpisał. Zaraz to zrobimy domyślnym kluczem jednak najpierw parę słów wyjaśnienia. Podpisywani kluczy ma na celu stworzenie przechodniego łańcucha zaufania. Jeśli Helga ufa kluczowi publicznemu Brunnera a Janek ufa kluczowi Helgi to oznacza to iż Janek nie musi sprawdzać kluczy podpisanych przez Helgę tylko może im zaufać co obrazuje poniższa ilustracja.
Taka konstrukcja zaufania upraszcza sprawdzanie wielu kluczy i tworzy sieć zaufania (ang. Web of Trust). Inną kwestią jest całkowity brak kontroli nad tym czy Brunner jest Brunnerem czy kimkolwiek innym. Web of Trust nie rozwiązuje takich problemów. Powracając do naszego GPA i klucza Janka widzimy, iż nie jest on przez nikogo podpisany. Podpiszmy go więc. Tu uwaga: obce klucze publiczne GPA podpisuje aktualnie domyślnym kluczem prywatnym. Jeśłi chcemy podpisać czyjś klucz innym naszym kluczem należy zmienić klucz domyślny w ustawieniach programu GPA. Tak więc podpiszmy klucz publiczny Janka naszym kluczem aktualnie domyślnym: prawy na kluczy Janka i wybieramy opcje Sign keys:
Pojawia się okno w którym ważnym parametrem jest Sign only locally co powoduje, że klucz jest podpisany tylko w systemie lokalnym i w razie eksportu klucza nie zostaną z nim te informacje wyeksportowane.
Zaznaczamy tą opcje i zatwierdzamy. Jak widać w parametrach klucza Janka pojawił się wpis świadczący iż został on podpisany (czerwona ramka) naszym kluczem domyślnym (zielona ramka):
Dodatkowo jest informacja, iż podpis jest ważny tylko w systemie lokalnym co oznacza, że jeśli klucz zostanie wyeksportowany na serwer tam już nie bzie podpisany przez nasz klucz. Jeśli tej opcji podczas podpisywania nie zaznaczymy a potem klucz zostanie wyeksportowany na serwer kluczy wraz z nim będą tam informacje jakie klucze (osoby) go podpisały. Aby sprawdzić jak to działa użyjemy w tym celu jednego z mich starych kluczy ID = 8C62932A. Sprawdzając na keyserver.ubuntu.com dostajemy:
Klucz jest podpisany tylko przez siebie. Zaimportujemy go teraz do GPA i podpiszemy go moim kluczem tamże domyślnym (ID = 139F81D0 nie jest wyeksportowany na żaden serwer kluczy). Tak więc GPA -> Server / Retrieve keys, wpisujemy ID = 8C62932A i ok. Podnosimy jego poziom zaufania na Ultimete (bo to mu klucz wiec jakże by inaczej) i podpisujemy go kluczem domyślnym czyli prawym na kluczu i Sign keys. NIE zaznaczamy Sign only locally i klikamy ok. Jak widać klucz został podpisany moim domyślnym kluczem:
Teraz eksportujemy na serwer kluczy ten nowo podpisany klucz (o ID = 8C62932A) czyli Server / Send keys i ponownie sprawdzamy na stronie serwera czy jest jakaś zmiana:
Jak najbardziej pojawił się wpis świadczący iż klucz 8C62932A jest podpisany przez klucz 139F81D0. Pięknie tylko, że po kliknięciu w klucz 139F81D0 nic się nie wyświetla czyli klucza tego nie ma na serwerze wiec nie można go w żaden sposób zweryfikować. Zostawmy to jednak i podpiszmy teraz kluczem D915D89E czyli moim aktualnym. W tym celu importuje go z pliku archiwizacyjnego (para kluczy) i ustalam jako domyślny a następnie podpisuję nasz testowy klucz.
W razie gdyby GPA wyświetlał błąd hasła po zmianie klucza domyślnego – zrestartuj program. Teraz eksportujemy nasz klucz testowy 8C62932A do serwera kluczy i sprawdzamy jak wygląda jego wpis:
Jest OK wpis się pojawił nasz klucz testowy ma już dwa podpisy. Mój klucz może być podpisany przez innych itd co daje strukturę Web of Trust. Po zaimportowaniu klucza do lokalnego systemu wszystkie powiązania są oczywiście zachowywane.
Kilka ważnych uwag
Fingerprint to cyfrowy odcisk klucza – zawsze po pobraniu klucza publicznego należy zweryfikować czy podany fingerptint jest zgodny z prawdą np przez kontakt z właścicielem klucza.
Poziomy zaufania kluczom
GPG pozwana na ustalenie kilku poziomów zaufania jakimi możemy obdarzyć klucze:
– unknow: domyślnie, brak danych dotyczących klucza
– never: nie ufaj nigdy kluczom oznaczonym tym poziomem
– marginal: nie można być pewnym co do klucza ani właściciela
– full: pełne zaufanie do klucza i właściciela
– ultimate: pełne zaufanie w sumie tylko dla naszych kluczy
Poziomy są dość płynne i jest możliwa ich różna interpretacja.
Podsumowanie
Przedstawione oprogramowanie i możliwości raczej nadają się do prywatnego użytku głównie ze względu na brak mechanizmu potwierdzającego autentyczność osób stojących za kluczami oraz małą skalowalność. Program GPA pomaga w obsłudze kluczy choć nie zawsze działa poprawnie czasem się wieszając lub zamykając z błędem. Dostępna jest oczywiście wersja dla Linuxa ale to będzie temat na inny post.