Jump to content
From ArchWiki

This article or section needs to be translated.

Notes: No updates since 2019-01-24. (Discuss in Talk: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

Install the gnupg package.

This will also install pinentry, a collection of simple PIN or passphrase entry dialogs which GnuPG uses for passphrase entry. Which pinentry dialog is used is determined by the symbolic link `/usr/bin/pinentry`, which by default points to `/usr/bin/pinentry-gtk-2`.

If you want to use a graphical frontend or program that integrates with GnuPG, see 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

Note: Kiedy `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 terminal:

    $ gpg --full-gen-key

Tip: Użyj `--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.

Note: Nazwa i adres e-mail, który tu wpiszesz, będą widoczne dla każdego, kto importuje twój klucz.

### 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.

Tip: Dodaj `--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 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

Warning: Po przesłaniu klucza do serwera kluczy nie można go usunąć z serwera.[2]

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

Warning:

- 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]

Tip:

- Dodanie `keyserver-options auto-key-retrieve` do `gpg.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` w `dirmngr.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 środowiska `honor-http-proxy` w `dirmngr.conf`. Ewentualnie ustaw `http-proxy host[:port]` w `dirmngr.conf`, przesłonięte `http_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 prywatnym plik o nazwie doc .gpg za pomocą klucza publicznego, 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.

Tip:

- 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 zmapować hasło
- Obejmuje hasło dla 65536 iteracje

    $ 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.

Warning: Hasło jest zwykle najsłabszym ogniwem chroniącym twój tajny klucz. Umieść klucz prywatny w bezpiecznym miejscu w innym systemie / urządzeniu, takim jak zamknięty pojemnik lub zaszyfrowany dysk. Jest to jedyne bezpieczeństwo, które musisz odzyskać na swoim kluczyku w przypadku, na przykład, awarii napędu, kradzieży lub gorszych.

Aby zaimportować kopię zapasową klucza prywatnego:

    $ gpg --import privkey.asc

### Edytuj swój klucz

Uruchomienie `gpg --edit-key <user-id>` Polecenie 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ń.

Tip: Jeśli masz wiele kont e-mail, możesz dodać każdą z nich jako tożsamość, używając `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

Warning: Jeśli zapomnisz dodać!, Wszystkie twoje podklucze zostaną wyeksportowane.

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

Note: Otrzymasz ostrzeżenie, że klucz główny nie był dostępny, a hasło nie zostało zmienione, ale można je bezpiecznie zignorować, tak jak hasło podklucza.

W tym momencie możesz teraz użyć `/tmp/subkey.altpass.gpg` na innych urządzeniach.

### Rotating subkeys

Warning: Nigdy nie usuwaj podkluczów z wygasłymi lub cofniętymi, chyba że masz dobry powód. Spowoduje to utratę możliwości odszyfrowywania plików zaszyfrowanych przy użyciu starego podklucza. Usuwaj tylko klucze wygasłe lub unieważnione od innych użytkowników w celu wyczyszczenia kluczy.

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.

Tip: Nie musisz tworzyć nowego klucza tylko dlatego, że wygasł. Możesz przedłużyć datę wygaśnięcia.

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>

Tip: Odwołanie wygasłych podkluczy jest niepotrzebną i prawdopodobnie złą formą. Jeśli stale odnawiasz klucze, może to spowodować, że inni nie będą mieli do ciebie zaufania.

## Podpisy

Dokumenty poświadczające i sygnatury czasowe podpisów. 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 użytkownika. 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`.

This article or section needs expansion.

Reason: Add `gpg-agent-browser.socket` to the list. (Discuss in Talk:GnuPG (Polski))

- 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.

Note: Jeśli używasz innej niż domyślna lokalizacji GnuPG #Lokalizacja katalogu, będziesz musiał edytować wszystkie pliki gniazd, aby użyć wartości `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

Tip: Aby zapisać w pamięci podręcznej hasło dla całej sesji, uruchom następujące polecenie:

    $ /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

Tip: Aby użyć `/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

Note: The upstream author indicates setting `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"

Note: Jeśli ustawisz `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

Note: The test involving the `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`.

Note: GnuPG może nie dodać twojego klucza GnuPG do $ `$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

Note: Aby umożliwić scdaemonowi bezpośredni dostęp do czytników kart USB smar, musi być zainstalowana opcjonalna zależność libusb-compat.

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)

Note: Należy zainstalować pcsclite i ccid a zawarta usługa systemd `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`

Tip: pass automatyzuje ten proces.

### Odwoływanie klucza

Warning:

- 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/`.

Note: Właściciel tty musi być zgodny z użytkownikiem, dla którego działa pinentry. Bycie częścią grupy `tty` nie wystarczy.
Tip: Jeśli uruchomisz gpg ze `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

The factual accuracy of this article or section is disputed.

Reason: The `gpg-agent*.socket` systemd sockets provided by the gnupg package create the sockets in `/run/user/$UID/gnupg/` which is guaranteed to be an appropriate file system. (Discuss in Talk:GnuPG (Polski))

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`.

## Zobacz też

- GNU Privacy Guard Homepage
- RFC4880 "OpenPGP Message Format"
- Creating GPG Keys (Fedora)
- OpenPGP subkeys in Debian
- A more comprehensive gpg Tutorial
- gpg.conf recommendations and best practices
- Torbirdy gpg.conf
- /r/GPGpractice - a subreddit to practice using GnuPG.
- Protecting code integrity with PGP

Category:

- Encryption (Polski)

Hidden categories:

- Pages or sections flagged with Template:Translateme
- Pages or sections flagged with Template:Expansion
- Pages or sections flagged with Template:Accuracy