GnuPG (Polski)
Według official website:
- GnuPG to pełna i darmowa implementacja OpenPGP standard zdefiniowany przez RFC4880 (znany również jako PGP). GnuPG pozwala na szyfrowanie i podpisywanie danych i komunikacji. Posiada wszechstronny system zarządzania kluczami, a także moduły dostępu do wszystkich rodzajów katalogów kluczy publicznych. GnuPG, znany również jako GPG, to narzędzie linii poleceń z funkcjami ułatwiającymi integrację z innymi aplikacjami. Dostępnych jest wiele aplikacji i bibliotek frontendowych. Wersja 2 GnuPG zapewnia także obsługę S/MIME i Secure Shell (ssh).
Instalacja
Zainstaluj paczkę gnupg.
To również zainstaluje pinentry, kolekcję prostych okienek do wpisywania PINów oraz haseł które GnuPG używa do wprowadzania. Które z okienek dialogowych od pinentry zostanie użyte, jest determinowane przez symboliczny link /usr/bin/pinentry
, który domyślnie wskazuje /usr/bin/pinentry-gtk-2
.
Jeśli chcesz używać graficznego interfejsu, lub programu który integruje się z GnuPG, zobacz List of applications/Security#Encryption, signing, steganography.
Konfiguracja
Lokalizacja katalogu
$GNUPGHOME
jest używany przez GnuPG do wskazywania katalogu, w którym przechowywane są jego pliki konfiguracyjne. Domyślnie $GNUPGHOME
nie jest ustawione i twoje $HOME
jest używany zamiast; w ten sposób znajdziesz ~/.gnupg
katalog zaraz po instalacji.
Aby zmienić domyślną lokalizację, uruchom gpg w ten sposób $ gpg --homedir path/to/file
lub ustaw GNUPGHOME
environment variable.
Pliki konfiguracyjne
Domyślne pliki konfiguracyjne to ~/.gnupg/gpg.conf
i ~/.gnupg/dirmngr.conf
.
Domyślnie katalog gnupg ma ustawione uprawnienia do 700
, a pliki, które zawiera, mają ustawione uprawnienia do 600
. Tylko właściciel katalogu ma uprawnienia do odczytu, zapisu i uzyskiwania dostępu do plików. Jest to ze względów bezpieczeństwa i nie należy go zmieniać. W przypadku, gdy ten katalog lub jakikolwiek inny plik wewnątrz niego nie jest zgodny z tą miarą bezpieczeństwa, otrzymasz ostrzeżenia o niebezpiecznych uprawnieniach do plików i katalogu domowego.
Dołącz do tych plików dowolne długie opcje, które chcesz. Nie zapisuj dwóch kresek, ale po prostu nazwę opcji i wymagane argumenty. Znajdziesz pliki szkieletów w /usr/share/gnupg
. Pliki te są kopiowane do ~/.gnupg
przy pierwszym uruchomieniu gpg, jeśli tam nie istnieją. Inne przykłady można znaleźć w #Zobacz też.
Dodatkowo pacman używa innego zestawu plików konfiguracyjnych do weryfikacji podpisów paczek. Zobacz Pacman/Package signing dla szczegółów.
Domyślne opcje dla nowych użytkowników
Jeśli chcesz ustawić domyślne opcje dla nowych użytkowników, umieść pliki konfiguracyjne w /etc/skel/.gnupg/
. Po dodaniu nowego użytkownika w systemie pliki z tego katalogu zostaną skopiowane do katalogu domowego GnuPG. Istnieje również prosty skrypt o nazwie "addgnupghome", który można wykorzystać do stworzenia nowych katalogów domowych GnuPG dla istniejących użytkowników:
# addgnupghome user1 user2
To doda odpowiednie /home/user1/.gnupg
i /home/user2/.gnupg
i skopiuj do niego pliki z katalogu szkieletu. Użytkownicy z istniejącym katalogiem macierzystym GnuPG są po prostu pomijani.
Używanie
user-id
jest wymagany w poleceniu, można go określić za pomocą identyfikatora klucza, odcisku palca, części imienia i nazwiska lub adresu e-mail itp. GnuPG jest elastyczny w tym zakresie..
Utwórz parę kluczy
Wygeneruj parę kluczy, wpisując w terminalu:
$ gpg --full-gen-key
--expert
możliwość uzyskania alternatywnych szyfrów ECC.Polecenie spowoduje wyświetlenie odpowiedzi na kilka pytań. Do ogólnego użytku większość ludzi będzie chciała:
- klucz RSA (tylko podpis) i klucz RSA (tylko szyfrowanie).
- klucz do domyślnej wartości (2048). Większy klucz 4096 "daje nam prawie nic, a kosztuje nas sporo"[1].
- data wygaśnięcia. Okres roku jest wystarczająco dobry dla przeciętnego użytkownika. W ten sposób, nawet jeśli dojdzie do utraty dostępu do kluczy, pozwoli to innym dowiedzieć się, że nie jest już ważny. Później, jeśli to konieczne, data wygaśnięcia może zostać przedłużona bez konieczności ponownego wydania nowego klucza.
- twoje imię i adres e-mail. Możesz dodać wiele tożsamości do tego samego klucza później (" ', jeśli masz wiele adresów e-mail, które chcesz powiązać z tym kluczem).
- 'komentarz "nie". Ponieważ semantyka pola komentarza to not well-defined, ma ograniczoną wartość do identyfikacji.
- a secure passphrase.
Lista kluczy
Aby wyświetlić listę kluczy w swoim publicznym key ring:
$ gpg --list-keys
Aby wyświetlić sekretną listę kluczy key ring:
$ gpg --list-secret-keys
Wyeksportuj swój klucz publiczny
Głównym zastosowaniem gpg jest zapewnienie poufności wymienianych wiadomości za pośrednictwem kryptografii z kluczem publicznym. Dzięki niemu każdy użytkownik dystrybuuje klucz publiczny swojego klucza, który może być używany przez innych do szyfrowania wiadomości do użytkownika. Klucz prywatny musi być zawsze "prywatny", w przeciwnym razie dochodzi do złamania poufności. Zobacz w w:Public-key cryptography przykłady wymiany wiadomości.
Tak więc, aby inni mogli wysyłać zaszyfrowane wiadomości, potrzebują Twojego publicznego klucza.
By wygenerować wersję ASCII klucza publicznego do pliku public.key
(np. do dystrybucji poprzez e-mail):
$ gpg --output public.key --armor --export user-id
Alternatywnie lub dodatkowo możesz zobaczyć sekcję #Użyj serwera kluczy by podzielić się swoim kluczem.
--no-emit-version
aby uniknąć drukowania numeru wersji lub dodać odpowiednie ustawienie do pliku konfiguracyjnego.Zaimportuj klucz publiczny
Aby szyfrować wiadomości innym osobom, a także weryfikować ich podpisy, potrzebujesz ich klucza publicznego. Aby zaimportować klucz publiczny z nazwą pliku public.key
do twojego publicznego breloczka
$ gpg --import public.key
Alternatywnie, #Użyj serwera kluczy aby znaleźć klucz publiczny.
Użyj serwera kluczy
Możesz zarejestrować swój klucz za pomocą publicznego serwera kluczy PGP, aby inni mogli odzyskać klucz bez konieczności bezpośredniego kontaktu z Tobą:
$ gpg --send-keys user-id
Aby poznać szczegóły klucza na serwerze kluczy, bez importowania go, wykonaj następujące czynności:
$ gpg --search-keys user-id
Aby zaimportować klucz z serwera kluczy:
$ gpg --recv-keys key-id
- Powinieneś zweryfikować autentyczność pobranego klucza publicznego, porównując jego odcisk palca z tym, który właściciel opublikował w niezależnym źródle (np. Kontaktując się bezpośrednio z osobą). Zobacz Wikipedia:Public key fingerprint po więcej informacji.
- Używanie krótkiego ID może napotkać na kolizje. Wszystkie klucze zostaną zaimportowane z krótkim identyfikatorem. Aby tego uniknąć, należy użyć pełnego identyfikatora odcisku palca lub długiego identyfikatora klucza podczas odbierania klucza. [3]
- Dodanie
keyserver-options auto-key-retrieve
dogpg.conf
automatycznie pobierze klucze z serwera kluczy w razie potrzeby. - Alternatywny serwer kluczy to
pool.sks-keyservers.net
i można go określić za pomocąkeyserver
wdirmngr.conf
; Zobacz też wikipedia:Key server (cryptographic)#Keyserver examples. - Jeśli twoja sieć blokuje porty używane dla hkp / hkps, być może musisz podać port 80, tzn.
pool.sks-keyservers.net:80
- Możesz połączyć się z serwerem kluczy przez Tor używając
--use-tor
. Zobacz GnuPG blog post po więcej informacji. - Możesz połączyć się z serwerem kluczy za pomocą serwera proxy, ustawiając opcję
http_proxy
Zmienna i ustawienie środowiskahonor-http-proxy
wdirmngr.conf
. Ewentualnie ustawhttp-proxy host[:port]
wdirmngr.conf
, przesłoniętehttp_proxy
Zmienna środowiskowa. - Jeśli chcesz zaimportować identyfikator klucza, aby zainstalować konkretny pakiet Arch Linux, Zobacz pacman/Package signing#Managing the keyring i Makepkg#Signature checking.
Szyfrowanie i odszyfrowanie
Asymetryczne
Musisz zaimportować klucz publiczny użytkownika przed szyfrowaniem (opcje --encrypt
or -e
) pliku lub wiadomości do danego odbiorcy (opcje --recipient
or -r
). Dodatkowo musisz Utworzyć parę kluczy jeśli jeszcze tego nie zrobiłeś.
Aby zaszyfrować plik o nazwie "doc", użyj:
$ gpg --recipient user-id --encrypt doc
Aby odszyfrować (opcja --decrypt
lub -d
) zaszyfrowany kluczem publicznym plik o nazwie doc .gpg za pomocą klucza prywatnego, użyj:
$ gpg --output doc --decrypt doc.gpg
gpg poprosi cię o podanie hasła, a następnie odszyfruje i zapisze dane z doc . gpg do doc . Jeśli pominiesz -o
(--output
) opcje, gpg zapisze odszyfrowane dane na standardowe wyjście.
- Dodaj
--armor
zaszyfrować plik przy użyciu zbroi ASCII (nadaje się do kopiowania i wklejania wiadomości w formacie tekstowym) - Używająć
-R user-id
lub--hidden-recipient user-id
zamiast-r
nie umieszczać identyfikatorów kluczy odbiorców w zaszyfrowanej wiadomości. Pomaga to ukryć odbiorców wiadomości i stanowi ograniczony środek zaradczy przeciwko analizie ruchu. - Dodaj
--no-emit-version
aby uniknąć drukowania numeru wersji lub dodać odpowiednie ustawienie do pliku konfiguracyjnego. - Możesz użyć gnupg do zaszyfrowania poufnych dokumentów za pomocą własnego identyfikatora użytkownika jako odbiorcy lub używając
--default-recipient-self
zamiast tego flaga; można jednak wykonać tylko ten jeden plik naraz, chociaż zawsze można zarchiwizować różne pliki, a następnie zaszyfrować plik tar. Zobacz też Disk encryption#Available methods jeśli chcesz zaszyfrować katalogi lub cały system plików.
Symetryczne
Szyfrowanie symetryczne nie wymaga generowania pary kluczy i może być używane do prostego szyfrowania danych za pomocą hasła. Po prostu użyj --symmetric
lub -c
aby wykonać szyfrowanie symetryczne:
$ gpg -c doc
Poniższy przykład:
- Szyfruje
doc
z symetrycznym szyfrem za pomocą hasła - Używa algorytmu szyfrowania AES-256 do szyfrowania hasła
- Korzysta z algorytmu skrótu SHA-512, aby pomieszać hasło
- Miesza hasło 65536 razy
$ gpg -c --s2k-cipher-algo AES256 --s2k-digest-algo SHA512 --s2k-count 65536 doc
Aby odszyfrować symetrycznie zaszyfrowany doc.gpg
za pomocą hasła i wypakować odszyfrowane treści do tego samego katalogu, co doc
:
$ gpg --output doc --decrypt doc.gpg
Konserwacja kluczy
Zrób kopię swojego klucza prywatnego
Aby wykonać kopię zapasową klucza prywatnego, wykonaj następujące czynności:
$ gpg --export-secret-keys --armor <user-id> > privkey.asc
Zwróć uwagę, że "gpg" wersja 2.1 zmieniła domyślne zachowanie, więc powyższe polecenie wymusza ochronę hasłem, nawet jeśli świadomie zdecydowałeś się nie używać go przy tworzeniu klucza. Jest tak, ponieważ w przeciwnym razie każdy, kto uzyska dostęp do powyższego wyeksportowanego pliku, będzie mógł szyfrować i podpisywać dokumenty tak, jakby były "bez", które wymagają znajomości hasła.
Aby zaimportować kopię zapasową klucza prywatnego:
$ gpg --import privkey.asc
Zrób kopię certyfikatu unieważniającego
Certyfikaty unieważniające są generowane automatycznie dla nowo wygenerowanych kluczy. One domyślnie są usytuowane w ~/.gnupg/openpgp-revocs.d/
. Nazwa pliku tego certyfikatu jest odciskiem palca klucza, którego unieważnia.
Certyfikat unieważniający może zostać również ręcznie wygenerowany przez użytkownika użwywając:
$ gpg --gen-revoke --armor --output revcert.asc user-id
Ten certyfikat może zostać wykorzystany do Unieważnienia klucza[broken link: invalid section], jeśli ten zostanie kiedyś zgubiony lub skompromitowany. Kopia zapasowa jest dlatego właśnie ważna, ponieważ gdy stracimy dostęp do prywatnego klucza, nie będziemy w stanie już później wygenerować takiego certyfikatu, jak za pomocą wyżej wymienionej komendy. Jest on na tyle krótki, aby został wydrukowany i wpisany ręcznie, gdy zajdzie taka potrzeba.
Edytuj swój klucz
Uruchomienie polecenia gpg --edit-key <user-id>
wyświetli menu, które pozwoli ci wykonać większość kluczowych zadań związanych z zarządzaniem.
Kilka przydatnych poleceń w podmenu edycji kluczy:
> passwd # change the passphrase > clean # compact any user ID that is no longer usable (e.g revoked or expired) > revkey # revoke a key > addkey # add a subkey to this key > expire # change the key expiration time
Typ help
w podmenu edycji kluczy, aby uzyskać więcej poleceń.
adduid
komenda. Możesz wtedy ustawić swój ulubiony jako primary
.Eksportowanie podklucza
Jeśli zamierzasz używać tego samego klucza na wielu urządzeniach, możesz usunąć klucz główny i przechowywać tylko minimalny podklucz szyfrowany na mniej bezpiecznych systemach.
Najpierw sprawdź, który podklucz chcesz wyeksportować.
$ gpg -K
Wybierz tylko ten podklucz do eksportu.
$ gpg -a --export-secret-subkeys [subkey id]! > /tmp/subkey.gpg
W tym momencie możesz przestać, ale najprawdopodobniej dobrze jest również zmienić hasło. Zaimportuj klucz do folderu tymczasowego.
$ gpg --homedir /tmp/gpg --import /tmp/subkey.gpg $ gpg --homedir /tmp/gpg --edit-key <user-id> > passwd > save $ gpg --homedir /tmp/gpg -a --export-secret-subkeys [subkey id]! > /tmp/subkey.altpass.gpg
W tym momencie możesz teraz użyć /tmp/subkey.altpass.gpg
na innych urządzeniach.
Rotacja podkluczy
Jeśli ustawiłeś podklucze, aby wygasły po określonym czasie, możesz utworzyć nowe. Zrób to z kilkutygodniowym wyprzedzeniem, aby inni mogli zaktualizować swoją bazę kluczy.
Utwórz nowy podklucz (powtórz dla podpisu i klucza szyfrowania)
$ gpg --edit-key <user-id> > addkey
I odpowiedz na następujące pytania, które prosi (patrz#Utwórz parę kluczy dla sugerowanych ustawień).
Zapisz zmiany
> save
Zaktualizuj go do serwera kluczy.
$ gpg --keyserver pgp.mit.edu --send-keys <user-id>
Unieważnij klucz
Unieważnienie klucza powinno się wykonać gdy klucz zostanie skompromitowany, zastąpiony, jest już nieużywany lub gdy zapomnisz do niego swojego hasła. Wykonuje się to scalając klucz z certyfikatem unieważnienia.
Jeśli już nie masz dostępu do swojej pary kluczy, wpierw #Zaimportuj klucz publiczny by zaimportować własny klucz. Wtedy, by unieważnić swój klucz, zaimportuj plik zapisany w #Zrób kopię certyfikatu unieważniającego:
$ gpg --import revcert.asc
Teraz uniważnienie musi zostać upublicznione. #Użyj serwera kluczy by wysłać swój unieważniony klucz do serwera PGP jeśli takiego wcześniej użyłeś, w przeciwnym razie, eksportuj unieważniony klucz do pliku i roześlij do osób z którymi się komunikujesz.
Podpisy
Podpisy potwierdzają i znakują czasowo dokumenty. Jeśli dokument zostanie zmodyfikowany, weryfikacja podpisu nie powiedzie się. W przeciwieństwie do szyfrowania, które wykorzystuje klucze publiczne do szyfrowania dokumentu, podpisy tworzone są za pomocą klucza prywatnego. Odbiorca podpisanego dokumentu sprawdza następnie podpis za pomocą klucza publicznego nadawcy.
Utwórz podpis
Zarejestruj plik
Aby podpisać plik, użyj --sign
lub -s
flaga:
$ gpg --output doc.sig --sign doc
doc.sig
zawiera zarówno skompresowaną zawartość oryginalnego pliku doc
, jak i podpis w formacie binarnym, ale plik nie jest zaszyfrowany. możesz łączyć podpisywanie z szyfrowaniem
Clearsign a file or message
Aby podpisać plik bez kompresowania go do formatu binarnego użyj:
$ gpg --output doc.sig --clearsign doc
Tutaj zarówno zawartość oryginalnej dokumentacji doc
, jak i podpis są przechowywane w formie czytelnej dla człowieka w pliku doc.sig
.
Utwórz oddzielny podpis
Aby utworzyć oddzielny plik podpisu, który ma być dystrybuowany oddzielnie od samego dokumentu lub pliku, użyj flagi --detach-sig
$ gpg --output doc.sig --detach-sig doc
Tutaj podpis jest przechowywany w doc.sig
, ale zawartość doc
nie jest w nim zapisana. Ta metoda jest często używana w dystrybucji oprogramowania, aby umożliwić użytkownikom sprawdzenie, czy program nie został zmodyfikowany przez stronę trzecią.
Zweryfikuj podpis
Aby zweryfikować podpis, użyj flagi --verify
$ gpg --verify doc.sig
gdzie doc.sig
to podpisany plik zawierający podpis, który chcesz zweryfikować.
Jeśli sprawdzasz odłączony podpis, zarówno podpisany plik danych, jak i plik podpisu muszą być obecne podczas weryfikacji. Na przykład, aby sprawdzić najnowszą wersję iso Arch Linux, wykonaj:
$ gpg --verify archlinux-version.iso.sig
gdzie archlinux-version.iso
musi znajdować się w tym samym katalogu.
Można również określić podpisany plik danych z drugim argumentem:
$ gpg --verify archlinux-version.iso.sig /path/to/archlinux-version.iso
Jeśli plik został zaszyfrowany, oprócz podpisu, po prostu odszyfruje plik i jego podpis również zostaną zweryfikowane.
gpg-agent
gpg-agent jest najczęściej używany jako demon do żądania i buforowania hasła dla pęku kluczy. Jest to przydatne, jeśli GnuPG jest używany z zewnętrznego programu, takiego jak klient poczty gnupg przychodzi z systemd user gniazda, które są domyślnie włączone. Te gniazda są gpg-agent.socket
, gpg-agent-extra.socket
, gpg-agent-browser.socket
, gpg-agent-ssh.socket
, i dirmngr.socket
.
- Główny
gpg-agent.socket
jest używany przez gpg do łączenia się z demonem gpg-agent. - Celem użycia
gpg-agent-extra.socket
w systemie lokalnym jest skonfigurowanie przekazywania domeny unixowej z systemu zdalnego. Umożliwia to używanie gpg w systemie zdalnym bez narażania kluczy prywatnych w systemie zdalnym. Aby uzyskać szczegółowe informacje, patrz gpg-agent(1). gpg-agent-ssh.socket
może być używany przez SSH do buforowania kluczy SSH dodanych przez program ssh-add. Zobacz #SSH agent dla potrzebnej konfiguracji.dirmngr.socket
uruchamia demona GnuPG obsługującego połączenia z serwerami kluczy.
gpgconf --list-dirs
..
Konfiguracja
gpg-agent można skonfigurować za pomocą pliku ~/.gnupg/gpg-agent.conf
. Opcje konfiguracji są wymienione w gpg-agent(1). Na przykład możesz zmienić podręczne cache dla nieużywanych kluczy:
~/.gnupg/gpg-agent.conf
default-cache-ttl 3600
$ /usr/lib/gnupg/gpg-preset-passphrase --preset XXXXXX
gdzie XXXX jest kluczem. Możesz uzyskać jego wartość podczas uruchamiania gpg --with-keygrip -K
. Hasło zostanie zapisane, dopóki gpg-agent
nie zostanie zrestartowany. Jeśli ustawisz wartość default-cache-ttl
, będzie ona miała pierwszeństwo.
Załaduj ponownie agenta
Po zmianie konfiguracji, ponownie załaduj agenta za pomocą gpg-connect-agent:
$ gpg-connect-agent reloadagent /bye
Polecenie powinno wyświetlić OK
.
Jednak w niektórych przypadkach tylko ponowne uruchomienie może nie być wystarczające, np. Gdy keep-screen
został dodany do konfiguracji agenta. W takim przypadku najpierw musisz zabić trwający proces gpg-agent, a następnie możesz go ponownie uruchomić, jak wyjaśniono powyżej.
pinentry
Wreszcie, agent musi wiedzieć, jak poprosić użytkownika o hasło. Można to ustawić w pliku konfiguracyjnym gpg-agent.
Domyślne używa okna dialogowego gtk. Dostępne są inne opcje - patrz informacja o pinentry. Aby zmienić konfigurację okna dialogowego, ustaw konfigurację programu pinentry-program
:
~/.gnupg/gpg-agent.conf
# PIN entry program # pinentry-program /usr/bin/pinentry-curses # pinentry-program /usr/bin/pinentry-qt # pinentry-program /usr/bin/pinentry-kwallet pinentry-program /usr/bin/pinentry-gtk-2
/usr/bin/pinentry-kwallet
, musisz zainstalować pakiet kwalletcliAUR pakiet.Po wprowadzeniu tej zmiany, ponownie załaduj gpg-agent.
Bezobsługowe hasło
Począwszy od GnuPG 2.1.0, wymagane jest użycie gpg-agent i pinentry, co może przełamać kompatybilność wsteczną dla haseł wprowadzanych przez STDIN za pomocą opcji --passphrase-fd 0
. Aby mieć ten sam typ funkcjonalności co starsze wersje, należy zrobić dwie rzeczy:
Najpierw edytuj konfigurację gpg-agent, aby umożliwić tryb pracy z loopback
~/.gnupg/gpg-agent.conf
allow-loopback-pinentry
Zrestartuj proces gpg-agent, jeśli jest uruchomiony, aby zmiana zaczęła obowiązywać.
Po drugie, albo aplikacja musi zostać zaktualizowana, aby zawierała parametr wiersza poleceń, aby użyć trybu pętli zwrotnej, jak na przykład:
$ gpg --pinentry-mode loopback ...
...lub jeśli nie jest to możliwe, dodaj opcję do konfiguracji:
~/.gnupg/gpg.conf
pinentry-mode loopback
pinentry-mode loopback
in gpg.conf
may break other usage, using the commandline option should be preferred if at all possible. [4]SSH agent
gpg-agent ma emulację agenta OpenSSH. Jeśli już korzystasz z pakietu GnuPG, możesz rozważyć użycie jego agenta do buforowania SSH keys Ponadto niektórzy użytkownicy mogą preferować okno dialogowe wprowadzania kodu PIN, które zapewnia agent GnuPG w ramach zarządzania hasłami.
Set SSH_AUTH_SOCK
Musisz ustawić SSH_AUTH_SOCK
, aby SSH używał gpg-agent zamiast ssh-agent. Aby upewnić się, że każdy proces może znaleźć Twoją instancję gpg-agent niezależnie od np. typ powłoki jest dzieckiem użytkowania pam_env.
~/.config/environment.d/50-ssh_auth_sock.conf
SSH_AGENT_PID DEFAULT= SSH_AUTH_SOCK DEFAULT="${XDG_RUNTIME_DIR}/gnupg/S.gpg-agent.ssh"
SSH_AUTH_SOCK
ręcznie (na przykład w tym przykładzie pam_env), pamiętaj, że lokalizacja gniazda może być inna, jeśli używasz niestandardowego GNUPGHOME
. Możesz użyć poniższego przykładu bash lub zmienić SSH_AUTH_SOCK
na wartość gpgconf --list-dirs agent-ssh-socket
.Ewentualnie zależą od Bash. Działa to również w przypadku niestandardowych lokalizacji gniazd:
~/.bashrc
unset SSH_AGENT_PID if [ "${gnupg_SSH_AUTH_SOCK_by:-0}" -ne $$ ]; then export SSH_AUTH_SOCK="$(gpgconf --list-dirs agent-ssh-socket)" fi
gnupg_SSH_AUTH_SOCK_by
variable is for the case where the agent is started as gpg-agent --daemon /bin/sh
, in which case the shell inherits the SSH_AUTH_SOCK
variable from the parent, gpg-agent [5].Skonfiguruj pinentry, aby użyć prawidłowego TTY
Ustaw również GPG_TTY i odśwież TTY, jeśli użytkownik przełączył się w sesję X, jak podano w gpg-agent(1). Na przykład:
~/.bashrc
# Set GPG TTY export GPG_TTY=$(tty) # Refresh gpg-agent tty in case user switches into an X session gpg-connect-agent updatestartuptty /bye >/dev/null
Dodaj klucze SSH
Po uruchomieniu gpg-agent możesz użyć ssh-add do zatwierdzenia kluczy, wykonując te same kroki, co dla ssh-agent. Lista zatwierdzonych kluczy przechowywana jest w pliku ~/.gnupg/sshcontrol
.
Po zatwierdzeniu klucza, za każdym razem, gdy potrzebne jest hasło, otrzymasz okno dialogowe z danymi. Możesz kontrolować buforowanie hasła w pliku ~/.gnupg/gpg-agent.conf
. W poniższym przykładzie gpg-agent będzie przechowywać klucze w pamięci podręcznej przez 3 godziny:
~/.gnupg/gpg-agent.conf
default-cache-ttl-ssh 10800 max-cache-ttl-ssh 10800
Użyj klucza GPG jako klucza SSH
Jeśli używasz gpg-agent jako agent SSH, możesz użyć swojego klucza GnuPG jako klucza SSH. Zmniejsza to kluczową konserwację i możesz przechowywać klucz SSH na karcie dostępu. Musisz utworzyć klucz z funkcją uwierzytelniania (patrz #Niestandardowe funkcje). GnuPG automatycznie użyje tego klucza, jeśli będzie to konieczne. Aby sprawdzić, czy klucz został dodany, uruchom:
$ ssh-add -l
Komentarz do klucza powinien wyglądać tak: openpgp:key-id
cardno:card-id
.
$GNUPGHOME/sshcontrol
, gdzie znajdują się "normalne" klucze SSH.Smartcards
GnuPG używa scdaemona jako interfejsu do czytnika kart inteligentnych. Szczegółowe informacje znajdują się w man page
GnuPG only setups
Jeśli nie planujesz używać innych kart oprócz tych opartych na GnuPG, powinieneś sprawdzić parametr port-czytnika w ~/.gnupg/scdaemon.conf
. Wartość "0" odnosi się do pierwszego dostępnego czytnika portów szeregowych, a wartość "32768" (domyślnie) odnosi się do pierwszego czytnika USB.
GnuPG z pcscd (PCSC Lite)
pcscd.service
musi być uruchomiona, lub gniazdo pcscd.socket musi nasłuchiwać.pcscd to demon, który obsługuje dostęp do karty inteligentnej (SCard API). Jeśli scduemon GnuPG nie połączy bezpośrednio karty inteligentnej (np. Za pomocą zintegrowanej obsługi CCID), będzie się starał znaleźć kartę elektroniczną za pomocą sterownika PCSC Lite.
Zawsze używaj pcscd
Jeśli używasz jakiejkolwiek karty inteligentnej ze sterownikiem opensc (np .: karty identyfikacyjne z niektórych krajów) powinieneś zwrócić uwagę na konfigurację GnuPG. Po wyjęciu z pudełka możesz otrzymać wiadomość podobną do tej, gdy używasz gpg --card-status
gpg: selecting openpgp failed: ec=6.108
Domyślnie scdaemon będzie próbował łączyć się bezpośrednio z urządzeniem. To połączenie zakończy się niepowodzeniem, jeśli czytnik będzie używany przez inny proces. Na przykład: demon pcscd używany przez OpenSC. Aby poradzić sobie z tą sytuacją, powinniśmy użyć tego samego sterownika, co opensc, aby mogli dobrze współpracować. W celu wskazania scdaemona do użycia pcscd powinieneś usunąć reader-port
z ~/.gnupg/scdaemon.conf
, określić lokalizację biblioteki libpcsclite.so
i wyłączyć ccid, abyśmy upewnili się, że używamy pcscd:
~/.gnupg/scdaemon.conf
pcsc-driver /usr/lib/libpcsclite.so card-timeout 5 disable-ccid
Sprawdź scdaemon(1), jeśli nie korzystasz z OpenSC.
Porady i wskazówki
Inny algorytm
Możesz użyć silniejszych algorytmów:
~/.gnupg/gpg.conf
... personal-digest-preferences SHA512 cert-digest-algo SHA512 default-preference-list SHA512 SHA384 SHA256 SHA224 AES256 AES192 AES CAST5 ZLIB BZIP2 ZIP Uncompressed personal-cipher-preferences TWOFISH CAMELLIA256 AES 3DES
W najnowszej wersji GnuPG domyślnymi algorytmami są SHA256 i AES, które są wystarczająco bezpieczne dla większości ludzi. Jeśli jednak używasz wersji GnuPG starszej niż 2.1 lub chcesz uzyskać jeszcze wyższy poziom bezpieczeństwa, wykonaj powyższy krok.
Zaszyfruj hasło
Przydaje się szyfrowanie hasła, więc nie będzie ono zapisane w pliku konfiguracyjnym. Dobrym przykładem jest twoje hasło e-mail.
Najpierw utwórz plik z hasłem. Po podaniu hasła musisz zostawić jedną pustą linię, w przeciwnym razie gpg zwróci komunikat o błędzie podczas oceniania pliku.
Następnie uruchom:
$ gpg -e -a -r <user-id> your_password_file
-e
is for encrypt, -a
for armor (ASCII output), -r
for recipient user ID.
Zostaniesz z nowym plikiem your_password_file.asc
Odwoływanie klucza
- Każdy, kto ma dostęp do Twojego certyfikatu unieważnienia, może odwołać klucz, czyniąc go bezużytecznym.
- Odwołanie klucza powinno być wykonywane tylko w przypadku złamania lub zgubienia klucza, lub zapomnienia hasła.
Certyfikaty unieważnienia są generowane automatycznie dla nowo wygenerowanych kluczy, chociaż jeden z nich może zostać wygenerowany ręcznie przez użytkownika później. Są one zlokalizowane w ~/.gnupg/openpgp-revocs.d/
. Nazwa pliku certyfikatu to odcisk palca klucza, który zostanie odwołany.
Aby unieważnić klucz, wystarczy zaimportować certyfikat unieważnienia:
$ gpg --import <fingerprint>.rev
Teraz zaktualizuj serwer kluczy:
$ gpg --keyserver subkeys.pgp.net --send-keys <userid>
Change trust model
By default GnuPG uses the Web of Trust as the trust model. You can change this to Trust on first use by adding --trust-model=tofu
when adding a key or adding this option to your GnuPG configuration file. More details are in this email to the GnuPG list.
Ukryj wszystkie identyfikatory odbiorców
Domyślnie identyfikator klucza odbiorcy znajduje się w zaszyfrowanej wiadomości. Można go usunąć w czasie szyfrowania dla odbiorcy za pomocą ukrytego odbiorcy hidden-recipient <user-id>
. Aby usunąć go dla wszystkich odbiorców, dodaj throw-keyids
do pliku konfiguracyjnego. Pomaga to ukryć odbiorców wiadomości i stanowi ograniczony środek zaradczy przeciwko analizie ruchu. (Korzystając z małej inżynierii społecznej, każdy, kto potrafi odszyfrować wiadomość, może sprawdzić, czy jeden z pozostałych odbiorców jest tym, kogo podejrzewa.) Po stronie odbierającej może spowolnić proces deszyfrowania, ponieważ wszystkie dostępne klucze tajne muszą zostać wypróbowane ( np. z --try-secret-key <user-id>
).
Używanie caff do wysyłania kluczy partiami
Aby umożliwić użytkownikom sprawdzanie poprawności kluczy w serwerach kluczy iw ich plikach kluczy (to znaczy upewnić się, że pochodzą od kogo się podają), PGP/GPG korzysta z Web of Trust. Strony z kluczami pozwalają użytkownikom zebrać się w fizycznej lokalizacji, aby sprawdzić klucze. Protokół podpisywania kluczy Zimmermann-Sassaman jest sposobem na uczynienie ich bardzo skutecznymi. Tutaj znajdziesz artykuł z instrukcjami.
Aby ułatwić proces podpisywania kluczy i wysyłania podpisów do właścicieli po keysigning party możesz użyć narzędzia caff. Można go zainstalować z AUR z pakietem caff-gitAUR.
Aby wysłać podpisy do ich właścicieli, potrzebujesz działającego MTA. Jeśli jeszcze go nie masz, zainstaluj msmtp.
Zawsze pokazuj długie identyfikatory i odciski palca
Aby zawsze wyświetlać długie identyfikatory klucza, dodaj plik keyid-format 0xlong
do pliku konfiguracyjnego. Aby zawsze wyświetlać pełne with-fingerprint
do pliku konfiguracyjnego.
Niestandardowe funkcje
W celu dalszego dostosowania można również ustawić niestandardowe możliwości do kluczy. Dostępne są następujące możliwości:
- Certify (tylko dla kluczy głównych) - pozwala kluczowi tworzyć podklucze, obowiązkowe dla kluczy głównych.
- Sign - pozwala kluczowi tworzyć podpisy kryptograficzne, które inni mogą zweryfikować za pomocą klucza publicznego.
- Encrypt - umożliwia każdemu szyfrowanie danych za pomocą klucza publicznego, który tylko klucz prywatny może odszyfrować.
- Authenticate - umożliwia uwierzytelnianie klucza za pomocą różnych programów innych niż GnuPG. Klucz może być użyty jako np. klucz SSH.
Możliwe jest określenie możliwości klucza głównego, uruchamiając:
$ gpg --full-generate-key --expert
Wybierz opcję, która pozwala ustawić własne możliwości.
Comparably, to specify custom capabilities for subkeys, add the --expert
flag to gpg --edit-key
, see #Edytuj swój klucz for more information.
Porównywalnie, aby określić niestandardowe możliwości dla podkluczy, dodaj --expert
flag to gpg --edit-key
zobacz #Edytuj swój klucz, aby uzyskać więcej informacji.
Cache passwords
Aby otrzymać hasło do GnuPG tylko raz na sesję, ustaw max-cache-ttl
i default-cache-ttl
na coś bardzo wysokiego, na przykład:
gpg-agent.conf
max-cache-ttl 60480000 default-cache-ttl 60480000
Zobacz #gpg-agent.
Rozwiązywanie problemów:
Nie ma wystarczającej liczby losowych bajtów
Podczas generowania klucza, gpg można napotkać ten błąd:
Not enough random bytes available. Please do some other work to give the OS a chance to collect more entropy!
Aby sprawdzić dostępną entropię, sprawdź parametry jądra:
cat /proc/sys/kernel/random/entropy_avail
Zdrowy system linuksowy z dużą dostępną entropią powróci do pełnej liczby 4096 bitów entropii. Jeśli wartość zwracana jest mniejsza niż 200, systemu zaczyna brakować entropii.
Aby go rozwiązać, pamiętaj, że często nie trzeba tworzyć kluczy, a najlepiej robić to, co sugeruje komunikat (np. Tworzyć aktywność na dysku, poruszać myszą, edytować wiki - wszystko stworzy entropię). Jeśli to nie pomoże, sprawdź, która usługa wykorzystuje entropię i zastanów się, czy nie zatrzymać jej na czas. Jeśli to nie jest alternatywa, zobacz Random number generation#Alternatives.
su
Podczas używania pinentry
musisz mieć odpowiednie uprawnienia urządzenia końcowego (np. /dev/tty1
) w użyciu. Jednak w przypadku su (lub sudo) własność pozostaje z oryginalnym użytkownikiem, a nie nowym. Oznacza to, że pinentry zawiedzie, nawet jako root. Poprawka polega na zmianie uprawnień urządzenia w pewnym momencie przed użyciem pinentry (tj. Za pomocą gpg z agentem). Jeśli robisz gpg jako root, po prostu zmień właściciela na root przed użyciem gpg:
# chown root /dev/ttyN # where N is the current tty
a następnie zmienić go po użyciu gpg po raz pierwszy. Odpowiednik ten prawdopodobnie będzie true w /dev/pts/
.
tty
nie wystarczy.script
, użyje on nowego tty z poprawną wartością:
# script -q -c "gpg --gen-key" /dev/null
Agent complains end of file
Domyślnym programem pinentry jest pinentry-gtk-2, który do prawidłowego działania potrzebuje magistrali sesji DBus. Zobacz General troubleshooting#Session permissions szczegółowe informacje.
Alternatywnie możesz użyć pinentry-qt
. Zobacz #pinentry.
KGpg configuration permissions
Pojawiły się problemy z kgpg możliwością uzyskania dostępu do pliku ~/.gnupg/
options. Jeden problem może być wynikiem przestarzałego pliku opcji, zobacz raport o błędzie bug report.
GNOME na Wayland zastępuje gniazdo agenta SSH
W przypadku sesji Wayland, gnome-session
ustawia SSH_AUTH_SOCK na standardowe gniazdo gnome-keyring, $ $XDG_RUNTIME_DIR/keyring/ssh
. To przesłoni wszelkie wartości ustawione w ~/.pam_environmment
lub systemd jednostek jednostkowych.
Aby wyłączyć to zachowanie, ustaw zmienną GSM_SKIP_AGENT_WORKAROUND
:
~/.pam_environment
SSH_AGENT_PID DEFAULT= SSH_AUTH_SOCK DEFAULT="${XDG_RUNTIME_DIR}/gnupg/S.gpg-agent.ssh" GSM_SKIP_SSH_AGENT_WORKAROUND DEFAULT="true"
mutt
Mutt może nie używać poprawnie gpg-agent, musisz ustawić zmienną środowiskową GPG_AGENT_INFO
(treść nie ma znaczenia) podczas uruchamiania mutt. Upewnij się także, czy poprawnie buforujesz hasła, patrz #Cache passwords.
Zobacz this forum thread
"Utracone" klucze, aktualizacja do wersji 2.1 Gnupg
Kiedy gpg gpg --list-keys
nie pokazuje kluczy, które były tam wcześniej, a aplikacje narzekają na brakujące lub nieprawidłowe klucze, niektóre klucze mogły nie zostać zmigrowane do nowego formatu.
Przeczytaj GnuPG invalid packet workaround Zasadniczo jest napisane, że istnieje błąd związany z kluczami w starych plikach pubring.gpg
i secring.gpg
, które zostały zastąpione nowym plikiem pubring.kbx
oraz podkatalogiem private-keys-v1.d/
i plikami. Twoje brakujące klucze można odzyskać za pomocą następujących komend:
$ cd $ cp -r .gnupg gnupgOLD $ gpg --export-ownertrust > otrust.txt $ gpg --import .gnupg/pubring.gpg $ gpg --import-ownertrust otrust.txt $ gpg --list-keys
gpg zawiesza się dla wszystkich serwerów kluczy (podczas próby odebrania kluczy)
Jeśli gpg zawieszi się z określonym serwerem kluczy podczas próby odebrania kluczy, być może trzeba zabić dirmngr, aby uzyskać dostęp do innych serwerów kluczy, które faktycznie działają, w przeciwnym razie może zachowywać zawieszenie dla nich wszystkich.
Nie wykryto SmartCard
Twój użytkownik może nie mieć uprawnień dostępu do karty elektronicznej, co powoduje card error
, mimo że karta jest poprawnie skonfigurowana i włożona.
Jednym z możliwych rozwiązań jest dodanie nowego scard
grupy, w tym użytkowników, którzy potrzebują dostępu do smartcard.
Następnie użyj reguły udev , podobnej do następującej:
/etc/udev/rules.d/71-gnupg-ccid.rules
ACTION=="add", SUBSYSTEM=="usb", ENV{ID_VENDOR_ID}=="1050", ENV{ID_MODEL_ID}=="0116|0111", MODE="660", GROUP="scard"
Trzeba dostosować VENDOR i MODEL zgodnie z wyjściem lsusb
, powyższy przykład dotyczy YubikeyNEO.
gpg: WARNING: server 'gpg-agent' is older than us (x < y)
To ostrzeżenie pojawia się, gdy gnupg
jest uaktualniony, a stary gpg-agent nadal działa. Zrestartuj gpg-agent.socket
użytkownika (tj. Użyj flagi --user
podczas ponownego uruchamiania).
gpg: ..., IPC connect call failed
Upewnij się, że gpg-agent
i dirmngr
nie działają z killall gpg-agent dirmngr
, a folder $GNUPGHOME/crls.d/
ma uprawnienia ustawione na 700
.
Jeśli twoj keyring jest przechowywana na systemie plików vFat (np. Dysku USB), gpg-agent
nie będzie w stanie utworzyć wymaganych gniazd (vFat nie obsługuje gniazd), możesz utworzyć przekierowania do lokalizacji, która obsługuje gniazda, np. /dev/shm
:
# export GNUPGHOME=/custom/gpg/home # printf '%%Assuan%%\nsocket=/dev/shm/S.gpg-agent\n' > $GNUPGHOME/S.gpg-agent # printf '%%Assuan%%\nsocket=/dev/shm/S.gpg-agent.browser\n' > $GNUPGHOME/S.gpg-agent.browser # printf '%%Assuan%%\nsocket=/dev/shm/S.gpg-agent.extra\n' > $GNUPGHOME/S.gpg-agent.extra # printf '%%Assuan%%\nsocket=/dev/shm/S.gpg-agent.ssh\n' > $GNUPGHOME/S.gpg-agent.ssh
Sprawdź, czy gpg-agent uruchamia się pomyślnie z gpg-agent --daemon
.