GnuPG/Szyfrowanie i deszyfrowanie plików
We wcześniejszej części artykułu było opisane, jak zaimportować czyjś klucz publiczny. Teraz pokażę, jak za jego pomocą zaszyfrować dokument. Z technicznego punktu widzenia nie ma znaczenia jaki rodzaj pliku szyfrujemy (może to być tekst, plik graficzny czy muzyczny), najczęściej jednak są to dokumenty tekstowe. Do szyfrowania używamy opcji --encrypt. Jako parametr tej opcji możemy podać nazwę pliku do zaszyfrowania (w takim wypadku opcja ta powinna zostać podana jako ostatnia), w przeciwnym wypadku dane zostaną wczytane ze standardowego wejścia. Za pomocą opcji --output możemy określić nazwę pliku wyjściowego. Jeśli tego nie zrobimy, wynikiem będzie plik o nazwie stworzonej z nazwy pliku wejściowego z sufiksem .gpg. Klucz publiczny można ustalić za pomocą opcji --recipient, która przyjmuje jako argument identyfikator użytkownika. Jeśli chcemy zaszyfrować wiadomość do wielu użytkowników, musimy ich podać osobno, za każdym razem używająć --recipient. Jeśli nie zostanie ustalony żaden klucz publiczny, program poprosi o ustalenie odbiorców. Pamiętaj, że jeśli nie podasz swojego klucza publicznego w liście kluczy odbiorców, nie będziesz mógł odszyfrować wiadomości, którą zaszyfrowałeś. Poniżej pokazuję jak to wygląda w praktyce.
$ gpg --output /tmp/widomosc.gpg --encrypt /tmp/wiadomosc.txt Nie został podany identyfikatora użytkownika (np za pomocą ,,-r) Identyfikator użytkownika (pusta linia oznacza koniec): mr_K Added 1024g/E9B3B634 2004-02-07 "Krzysztof Adamski <mr_K@interia.pl>" Identyfikator użytkownika (pusta linia oznacza koniec): $ file /tmp/widomosc.gpg /tmp/widomosc.gpg: data $
Jak można było zauważyć w przykładzie przytoczonym przed chwilą, plik wynikowy zawiera dane w formacie binarnym. Jeśli chcemy żeby zamiast tego wynik był w formacie tekstu, tak żebyśmy mogli go na przykład wkleić do wiadomości e-mail, musimy użyć opcji --armour. Przykład podaję poniżej.
$ gpg --armour --output /tmp/wiadomosc2.gpg -r mr_K --encrypt /tmp/wiadomosc.txt $ cat /tmp/widomosc2.gpg -----BEGIN PGP MESSAGE----- Version: GnuPG v1.2.6 (GNU/Linux) hQEOA6X+L6Tps7Y0EAP+JsSr0WOVY3oKio93Osw/x+L3fvrvphWZbeE+fYPZuXzc K7j8LrkJJlyBFmE7ZYJnrGyywU+d+OCnCYwpj68FSVrWUx3RP6HWFsLTMRxKgTbm XCr8AzZ7KV/U4/ZGdCh3QAjoUb9v4YhNcSB9P9IaAS/y7Xt18u7tzte53pAtgiED /R70N5bTxatlc8MQ3xvIHUUWyJ+UaNHAaxskA6lytcJ5pYEgYuRof1PVsmeLaDIT WLnaNxJf4d71MT4pmdxiYc38UXhbvxXA0GAuVKRuWtbk7flFu0GzYOB+kpa0SVeK P6SKKtvVLJsHQgLG0popGAHOC/MOICN23HDeBh9rSzh00k0BttGocgWyac35yBXb nuNCLo+Cv8oBLn7ik/PAISdwh5iu7VK75WxNmp/VWWYs0i+LXmr3ecEzYvmdRYfR fCCxYihBTBdmGV+4E7v3yg== =LwSl -----END PGP MESSAGE----- $
Do deszyfrowania plików służy opcja --decrypt, która podobnie jak --encrypt pobiera jako argument nazwę pliku do rozszyfrowania. Jak poprzednio, za pomocą opcji --output można określić nazwę pliku wynikowego. Gdy nie jest on określony, wynik wypisywany jest na standardowe wyjście. Oto przykład:
$ gpg --decrypt /tmp/wiadomosc2.gpg Musisz podać hasło aby odbezpieczyć klucz prywatny użytkownika: "Krzysztof Adamski <mr_K@interia.pl>" długość 1024 bitów, typ ELG-E, numer E9B3B634, stworzony 2004-02-07 (podklucz D82E0E4B) gpg: zaszyfrowano 1024-bitowym kluczem ELG-E, numer E9B3B634, stworzonym 2004-02-07 "Krzysztof Adamski >mr_K@interia.pl<" wiadomość $
Istnieje również możliwość zaszyfrowania danych bez klucza publicznego, za pomocą szyfrowania symetrycznego. W takim wypadku plik jest szyfrowany za pomocą podanego hasła, które wymagane jest oczywiście w procesie deszyfrowania. Ze względów bezpieczeństwa nie powinieneś używać tego samego hasła, które chroni Twój klucz prywatny. Aby zaszyfrować plik w ten sposób, powinieneś użyć opcji --symmetric, która podobnie jak poprzednie posiada opcjonalny argument określający nazwę pliku do zaszyfrowania. Również w tym przypadku możesz użyć opcji --armour. Oto przykład:
$ gpg --armour --output /tmp/wiadomosc-sym.gpg --symmetric /tmp/wiadomosc.txt $ file /tmp/wiadomosc-sym.gpg /tmp/wiadomosc-sym.gpg: PGP armored data message $
Wysyłanie zaszyfrowanej wiadomości
edytujWyobraźmy sobie, że stworzyliśmy Łukaszowi konto na naszym serwerze. Chłopak się ucieszył, ale my mamy poważny problem. Jak przesłać mu w bezpieczny sposób nowy login oraz hasło dostępowe?! Nierozsądne byłoby w tym momencie wysyłanie tak poufnych danych w postaci jawnej przez sieć. Oczywiście i tym razem z pomocą przychodzi nam GnuPG. Stajemy teraz przed potrzebą zaszyfrowania całej wiadomości. Jest to wbrew pozorom operacja bardzo prosta. Całą treść poufnej wiadomości szyfrujemy używając klucza publicznego należącego do Łukasza i dopiero tak przygotowany kryptogram wysyłamy mu przez internet. Zauważmy, że w poprzednim przykładzie znajomość klucza publicznego odbiorcy nie była konieczna. Teraz nawet jeśli atakujący przechwyci naszą wiadomość, to bez znajomości klucza prywatnego kolegi na nic się mu ona nie przyda.
> Krok 1 - Importowanie klucza:
Załóżmy, że Łukasz wysłał nam wcześniej numer ID swojego klucza, teraz musimy go tylko w całości ściągnąć z serwera. Wydajemy więc polecenie:
[root@crusader root]# gpg --keyserver www.keys.pgp.net --recv-keys 3958260E gpg: key 3958260E: public key "Łukasz Kowalski " imported gpg: Total number processed: 1 gpg: imported: 1
Klucz o identyfikatorze 3958260E został pomyślnie zaimportowany. Jak widzimy w danych identyfikacyjnych, należy on do naszego kolegi. Teraz powinniśmy dla pewności zweryfikować nowy klucz oraz podpisać wspomnianą wyżej opcją --sign-key. Jeśli wszystko przebiegło pomyślnie, możemy przystąpić do szyfrowania naszego listu.