+Otrzymałem pytanie jak wykonać punkt 8.3 „Stworzyć plik tekstowy, podpisać go, sprawdzić podpis, a następnie zmodyfikować go i sprawdzić podpis. System powinien pokazać, że plik został zmieniony.„
Ja tu będę używał bezpośrednio poleceń oprogramowania gpg (nie używając żadnego środowiska graficznego).
- Tworzę plik o nazwie
ala.txt
zawierający tekst Ala ma kota. - Podpisuję ten plik używając polecenia
gpg --output ala.txt.sig --sign ala.txt
. Program pyta o hasło odbezpieczające klucz i robi swoje. - Utworzony jest plik (binarny)
ala.txt.sig
. Trudno go obejrzeć, ale w systemie Linux jest znakomity edytor nazywający się vim. Pozwala zajrzeć do każdego pliku. Plik wygląda tak:Jak widać jest tam zakodowana zarówno pierwotna nazwa pliku, jak i jego zawartość. Całą reszta to binarny (ustandaryzowany) pojemnik zawierający dodatkowo podpis pliku. Nie jest to format wygodny do użytku.
- Znacznie lepiej jest podpisać ten dokument w sposób pozwalający na odczyt jego zawartości nawet bez specjalnego oprogramowania. Robi się to poleceniem:
gpg --clearsign ala.txt
. Program utworzy plik o nazwieala.txt.asc
i zawartości:
123456789101112131415161718-----BEGIN PGP SIGNED MESSAGE-----Hash: SHA512Ala ma kota-----BEGIN PGP SIGNATURE-----iQGzBAEBCgAdFiEEUPln/mbmhBtCDB5vazls6ManeQ4FAl6dZiUACgkQazls6ManeQ4tEQv/eLUDBInxCxXsbGf+eRPv6syKJkYTXWdtsfcgAru9ewKCGyIrF+TvCQ44JUfeqo01iMwAke+abTalCgByBf0ajLlLr4rSvfS0YkIBBtz/Ze1KD+ewXdEpyg4y4sQyfhR6k+ByMIQUPEJTDRQnL1sknlkYhrOBHTk6xqrd9UQjVZDxz0BXvlCfT1vqlakH+7QdKFRytoi6DgXGYtyE1QRoPHGfx64HE9W62481+qLC+cKAfcrNRH0dlZL5u24EFWqu2ogxRGWlobXUFBAB/A5Wj0N+DUh1DUZdfT2GnPfstH8UF7lHO4900ew/lrB+MGeTapcX3zdxJqBYnpGz4UcJYC6Jy/UEit7hS8Gm+OnqW+F2vb1T14LAMVaIQhQPsi43vwhfmQRGRgT4wBfBtJbl3FDueVlRyz9wkY2m9nqp33DNb+P1Tds9MTvogGICyu1KJnjU5rIUwWg7EtZ6LN4PtWER6/+zSM9drhUGKyJvGciLEN9MGIBgNrFErA3WsR+8=HeRT-----END PGP SIGNATURE-----
Składa się on z dwu części: tekstu wiadomości i podpisu. Bez specjalnego oprogramowania można przeczytać wiadomość. Można też sprawdzić jej poprawność poleceniem
gpg --verify ala.txt.asc
. Efekt pracygpg
jest taki:123gpg: Podpisano w pon, 20 kwi 2020, 11:06:45 CESTgpg: przy użyciu klucza RSA 50F967FE66E6841B420C1E6F6B396CE8C6A7790Egpg: Poprawny podpis złożony przez ,,Wojciech Myszka <wojciech.myszka@pwr.edu.pl>'' [absolutne]Teraz plik
ala.txt.asc
zmodyfikuję zamieniając wielkieA
na małe:
12345678-----BEGIN PGP SIGNED MESSAGE-----Hash: SHA512ala ma kota-----BEGIN PGP SIGNATURE-----iQGzBAEBCgAdFiEEUPln/mbmhBtCDB5vazls6ManeQ4FAl6dZiUACgkQazls6Man…
Próba weryfikacji takiego pliku kończy się komunikatem:
123gpg: Podpisano w pon, 20 kwi 2020, 11:06:45 CESTgpg: przy użyciu klucza RSA 50F967FE66E6841B420C1E6F6B396CE8C6A7790Egpg: NIEPOPRAWNY podpis złożony przez ,,Wojciech Myszka <wojciech.myszka@pwr.edu.pl>'' [absolutne]
co należy rozumieć, że zawartość pliku została zmieniona. - Aby odzyskać pierwotną zawartość z pliku podpisanego należy użyć opcji
--decrypt
:gpg --decrypt ala.txt.sig
; zawartość zostanie wypisana na terminalu, ale dodanie--output
zapisuje do pliku:gpg --output ala --decrypt ala.txt.sig
. Za każdym razem program informuje o poprawności podpisu. Nawet gdy podpis jest niepoprawny zawartość zostanie „odtworzona”1. - W przypadku gdy modyfikacji ulegnie podpis, komunikat programu
gpg
może wyglądać tak:
123456gpg: Błąd sumy CRC; 670360 - 7656D9gpg: [don't know]: invalid packet (ctb=21)gpg: nie znaleziono podpisugpg: nie można sprawdzić podpisu.Należy pamiętać o podawaniu pliku podpisu (.sig lub .asc) jako pierwszegoargumentu linii poleceń.
- Gdy podpis jest niepoprawny — zostanie odtworzona zmodyfikowana wersja pliku. Po modyfikacji podpisu zostanie odtworzona zawartość pliku (ale nie będziemy w stanie nic na jej temat powiedzieć).↩