GnuPG/Podpisywanie cyfrowe plików

Do cyfrowego podpisywania wiadomości służy opcja --sign. Podobnie jak w przypadku szyfrowania, opcja ta przyjmuje opcjonalny argument w postaci nazwy pliku do podpisania. Możemy określić nazwę pliku wynikowego za pomocą --output. Opcja --armour umożliwia zapisanie podpisu w formacie tekstu.

 $ gpg --armour --output /tmp/wiadomosc.sig --sign /tmp/wiadomosc.txt
 
 Musisz podać hasło aby odbezpieczyć klucz prywatny użytkownika:
 "Imie Nazwisko <adres@email.pl>"
 długość 1024 bitów, typ DSA, numer 630BE83F, stworzony 2004-11-16
 
 $ file /tmp/wiadomosc.sig
 /tmp/wiadomosc.sig: PGP armored data message
 $ 

Do sprawdzenia podpisu służy opcja --verify a do sprawdzenia i jednoczesnego odczytania wiadomości służy opcja --decrypt. Oto przykład:

 $ gpg --decrypt /tmp/wiadomosc.sig
 wiadomość
 gpg: Podpisano w pią 03 gru 2004 19:57:12 CET kluczem DSA o numerze 630BE83F.
 gpg: Poprawny podpis złożony przez "Imie Nazwisko <adres@email.pl>"
 $

Niestety podpisana w ten sposób wiadomość (lub jakikolwiek plik) nie może być w prosty sposób odczytana nie używając GnuPG ponieważ jest pakowana przez podpisem. Aby temu zapobiec (i umożliwić odczytywanie wiadomości tym, którzy nie maja GnuPG), musisz użyć opcji --clearsign zamiast --sign.

 $ gpg --output /tmp/wiadomosc.sig --clearsign /tmp/wiadomosc.txt
 
 Musisz podać hasło aby odbezpieczyć klucz prywatny użytkownika:
 "Imie Nazwisko <adres@email.pl>"
 długość 1024 bitów, typ DSA, numer 630BE83F, stworzony 2004-11-16
 
 $ cat /tmp/wiadomosc.sig
 -----BEGIN PGP SIGNED MESSAGE-----
 Hash: SHA1
 
 wiadomość
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1.2.6 (GNU/Linux)
 
 iD8DBQFBsLSFZYUAdmML6D8RAsSVAKDDEHFazZXa4m7aZtYnf2GUVaI7DwCfeUp+
 dKW8EPNOSW7sPe93xomD8RY=
 =oCXH
 -----END PGP SIGNATURE-----

Podpisane dokumenty mają jednak jedną wadę - uzyskanie z nich normalnej wersji dokumentu zajmuje trochę czasu. Rozwiązaniem tego problemu jest trzecia metoda podpisu, która tworzy oddzielny plik z podpisem nie zmieniając oryginalnego dokumentu. Służy do tego opcja --detach-sig.

 $ gpg --output /tmp/wiadomosc.sig --detach-sig /tmp/wiadomosc.txt
 Musisz podać hasło aby odbezpieczyć klucz prywatny użytkownika:
 "Imie Nazwisko <adres@email.pl>"
 długość 1024 bitów, typ DSA, numer 630BE83F, stworzony 2004-11-16
 $

Do sprawdzenia takiego podpisu wymagane są oba pliki - plik źródłowy i plik z podpisem. Sprawdzenia dokonuje się przez opcję --verify z dwoma argumentami oznaczającymi nazwę pliku z podpisem oraz nazwę pliku źródłowego. Oto przykład:

 $ gpg --verify /tmp/wiadomosc.sig /tmp/wiadomosc.txt
 gpg: Podpisano w pią 03 gru 2004 20:02:55 CET kluczem DSA o numerze 630BE83F.
 gpg: Poprawny podpis złożony przez "Imie Nazwisko <adres@email.pl>"
 $