Moduł Module::Signature

Uniwersytet Gdański - Instytut Matematyki - Zakład Informatyki - Strona domowa

Co to jest?

Moduł do manipulacji plikami z podpisami.

Składnia

Jako komenda w shell'u:

% cpansign # weryfikuje istniejący podpis, lub # tworzy nowy jeśli jeśli żaden nie istnieje % cpansign sign # tworzy podpis; nadpisuje istniejący % cpansign -s # to samo % cpansign verify # weryfikuje podpis % cpansign -v # to samo % cpansign -v --skip # ignoruje pliki w MANIFEST.SKIP % cpansign help # wyświetla ten dokument % cpansign -h # to samo

W progamie:

use Module::Signature qw(sign verify SIGNATURE_OK); sign(); sign(overwrite => 1); # Nadpisuje bez pytania # Spójrz na sekcje o stałych niżej (verify() == SIGNATURE_OK) or die "failed!";

Module::Signature dodaje kryptograficzne poświadczenie do dystrybucji CPAN, poprzez specjalny plik z podpisem.

Podpis cyfrowy (podpis elektroniczny) to dodatkowa informacja dołączona do wiadomości (w naszym przypadku modułowi) służąca do weryfikacji jej źródła. Dzięki podpisowi dowolny użytkownik który sciągną określony moduł jeśli został on wcześniej podpisany jest w stanie sprawdzić czy nikt niepowołany nie wprowadzał w nim zmian. Jest przydatne w przypadkach udostępniania swoich dystrybucji jako ogólno dostępne. Dlatego też moduł ten jest przydatny raczej fachowcom którzy piszą własne moduły później udostępniane ogółowi (np. poprzez cpan).

Jeśli jesteś użytkownikiem modułu, wszystko co musisz zrobić to pamiętać o uruchomieniu cpansing -v (lub tylkocpansign) zanim użyjesz perl Makefile.PL, bądź Build.PL; który upewni się że w dystrybucja nie grzebano.

Autorzy modułu łatwo mogą dodać plik z podpisem do dystrybucji; Zobacz sekcje notatki poniżej aby dowiedzieć się zrobić to jako część make dist.

Jeśli rzeczywiście chcesz podpisać dystrybucje ręcznie, zwyczajnie dodaj podpis do MAINFEST, wtedy napisz cpansign -s zaraz po stworzeniu dystrybucji. Upewnij się aby później skasować plik z podpisem.

Proszę również zobaczyć sekcje Notatki oraz wątki o o dokumentacji, w szczególności jeśli używasz modułu Module::Build do tworzenia swojego własnego MANIFEST.SKIP.

Zmienne

Zmienne które pozwolą nam kontrolować przebieg podpisywania bądź też sprawdzania podpisu. Domyślnie żadne zmienne z pakietu nie są eksportowane.

$Verbose

Jeśli ustawione na prawda, Module::Signature wyświetli informacje w trakcie przetwarzania włączając wyjście gpg. Jeśli ustawione na fałsz, Module::Signature będzie tak cichy jak to tylko możliwe, jak długo tylko wszystko będzie działało bez zarzutu. Domyślnie fałsz.

$SIGNATURE

Nazwa pliku dla pliku z podpisem dystrybucji.. Domyślnie SIGNATURE.

$KeyServer

Serwer z którego może zostać pobrany klucz publiczny OpenPGP autora (obecnie zaimplementowane jedynie gpg, nie Crypt::OpenPGP). Może zostać ustawione na fałsz aby zapobiec pobieranie klucza publicznego przez moduł.

$KeyServerPort

Port do serwera z kluczem OpenGPG, domyślnie 11371.

$Timeout

Maksymalny czas oczekiwania w którym powinno zostać ustanowione połączenie z serwerem z kluczami. Domyślnie 3.

$AutoKeyRetrieve

Czy automatycznie ściągać nieznane klucze z serwera z kluczami. Domyślnie 1.

$Cipher

Domyślny szyfr użyty przez moduł Digest do tworzenia pliku z podpisem. Domyślnie SHA1, ale może zostać zmieniony na inny szyfr poprzez zmienna środowiskową MODULE_SIGNATURE_CIPHER jeśli SHA1 szyfr nie jest pożądany.

Szyfr określony w pliku SIGNATURE będzie użyty do pierwszego wpisu aby zatwierdzić poprawność. Dla SHA1, użytkownik potrzebuje zainstalowany którykolwiek z tych modułów: Digest::SHA, Digest::SHA1, Digest::SHA::PurePerl, albo (obecnie nie istnieje) Digest::SHA1::PurePerl.

$preamble

Tekst wyjaśniający umieszczony na nowo wygenerowanych plikach z podpisem przed rzeczywistym wpisem.

Środowisko

Zmienne środowiskowe pozwolą nam kontrolować przebieg procesu weryfikacji bez potrzeby podawania ich bezpośrednio do metod. Może okazać się to przydatne w momencie gdy będziemy musieli wytworzyć wiele podpisów (chyba nie częsta sytuacja). Moduł Module::Signature honoruje następujące zmienne środowiskowe:

MODULE_SIGNATURE_CIPHER

Działa tak samo jak $Cipher

MODULE_SIGNATURE_VERBOSE

Działa tak samo jak $Verbose

MODULE_SIGNATURE_KEYSERVER

Działa tak samo jak $KeyServer

MODULE_SIGNATURE_KEYSERVERPORT

Działa tak samo jak $KeyServerPort

MODULE_SIGNATURE_TIMEOUT

Działa tak samo jak $Timeout

Stałe

Stałe które pozwolą nam sprawdzić jaki wynik dało testowanie podpisu. Dzięki tym stałym nasz kod stanie się bardziej czytelny. Te stałe nie są eksportowane domyślnie.

CANNOT_VERIFY (0E0)

Nie można zweryfikować podpisu OpenPGP, może poprzez brak połącznia do sieci, albo zarówno gnupg bądź Crypt::OpenPGP nie istnieje w systemie.

SIGNATURE_OK (0)

Podpis pomyślnie sprawdzony.

SIGNATURE_MISSING (-1)

Plik z podpisem nie istnieje.

SIGNATURE_MALFORMED (-2)

Podpis nie zawiera poprawnej wiadomości OpenPGP.

SIGNATURE_BAD (-3)

Znaleziono niepoprawny podpis -- coś mogło zostać zmienione.

SIGNATURE_MISMATCH (-4)

Podpis jest poprawny, ale pliki w dystrybucji zmienił sie od momentu jego stworzenia.

MANIFEST_MISMATCH (-5)

Istnieją dodatkowe pliki w bieżącym katalogu nie uwzględnione w pliku MANIFEST.

CIPHER_UNKNOWN (-6)
Szyfr użyty do podpisu nie jest rozpoznawalny przez moduły Digest::*.

Dodatkowe informacje.

Podpisywanie własnego modułu poprzez make dist.

Najprostszym sposobem jest użycie Module::Install:

sign; # umieść to przed "WriteAll" WriteAll;

Dla ExtUtils::MakeMaker możesz użyć:

WriteMakefile( (MM->can('signature_target') ? (SIGN => 1) : ()), # ... pierwotne argumenty ... );

Użytkownicy modułu Module::Build mogą zrobić tak:

Module::Build->new( (sign => 1), # ... pierwotne argumenty ... )->create_build_script;
Testowanie podpisów.

Możesz dodać ten kod jako t/0-signature.t w drzewie swojej dystrybucji:

#!/usr/bin/perl use strict; print "1..1\n"; if (!$ENV{TEST_SIGNATURE}) { print "ok 1 # skip Set the environment variable", " TEST_SIGNATURE to enable this test\n"; } elsif (!-s 'SIGNATURE') { print "ok 1 # skip No signature file found\n"; } elsif (!eval { require Module::Signature; 1 }) { print "ok 1 # skip ", "Next time around, consider install Module::Signature, ", "so you can verify the integrity of this distribution.\n"; } elsif (!eval { require Socket; Socket::inet_aton('pgp.mit.edu') }) { print "ok 1 # skip ", "Cannot connect to the keyserver\n"; } else { (Module::Signature::verify() == Module::Signature::SIGNATURE_OK()) or print "not "; print "ok 1 # Valid signature\n"; } __END__
Przykładowe użycie

Przedstawiam poniżej przykład następujących czynności: stworzenie nowego (nadpisanie starego), sprawdzenie podpisu. Wszystkie czynności zostały wykonane na naszym module. Aby miało to sens należało by udostępnić klucz publiczny w moim przykładzie jednak nie jest to konieczne ponieważ posiadam własny klucz publiczy :).


Przydatne linki

Dokumentacja tego modułu w cpan'ie

Kontakt i informacje o autorze opracowania

Autor modułu:

Audrey Tang

Autor przekładu: MD

Numer GG: Słoneczko 2194164

Uniwersytet Gdański - Instytut Informatyki - Strona domowa - Perl - Wyklady
[c] Piotr Arłukowicz, materiały z tej strony udostępnione są na licencji GNU.