Šifrování pomocí GPG: Porovnání verzí

Z Milan Kerslager
Přejít na: navigace, hledání
m (Důvěryhodnost klíče: fix)
m (Nastavení důvěryhodnosti klíče: fix)
Řádka 390: Řádka 390:
  
 
=== Nastavení důvěryhodnosti klíče ===
 
=== Nastavení důvěryhodnosti klíče ===
Důvěryhodnost klíče je možné nastavit při editaci klíče pomocí <code>trust></code>:
+
Důvěryhodnost klíče je možné nastavit při editaci klíče pomocí <code>trust</code>:
  
 
  gpg --edit-key 76C0B465FE7BEE98
 
  gpg --edit-key 76C0B465FE7BEE98

Verze z 16. 12. 2023, 09:19

GnuPG je program umožňující používat asymetrickou kryptografii založenou na využívání dvou klíčů: privátního a veřejného i symetrickou, která využívá jednoho klíče (heslo). U asymetrické šifry je privátní klíč uchováván v tajnosti, zatímco veřejný klíč je volně dostupný. Přestože jsou oba klíče vytvářeny společně, nelze z jednoho odvodit druhý (proto je možné dávat veřejný klíč volně k dispozici). U symetrické šifry je nutné zabezpečit klíč při přenosu tak, aby nedošlo k jeho kompromitaci (např. zasláním hesla jiným kanálem). Program gpg je opensource nástupce komerčního programu PGP.

Úvod

Program gpg má pouze textové rozhraní. Pro grafické uživatelské rozhraní existují nadstavby, například Kleopatra (pro Linux i Windows), Seahorse pro GNOME, KGPG pro KDE. Klienti pro elektronickou poštu používají GPG pomocí pluginů (v Outlooku lze používat plugin Enigmail) nebo ji mají vestavěnou (Mozilla Thunderbird od roku 2019). Dále se budeme věnovat pouze nástroji gpg pro příkazový řádek.

Generování klíčů

Při generování klíčů je využit generátor náhodných čísel, který těží entropii z vnějšího prostředí (při nedostatku entropie trvá generování dlouho, doporučuji generovat síťový provoz, hýbat myší, psát na klávesnici). Pokud by nebylo náhodné číslo dostatečně náhodné, kvalita klíčů by byla nízká (šly by například uhádnout). Klíče jsou jednoznačně identifikovány svým hashem (otisk, fingerprint). Spojení s osobou je pomocí jména, příjmení a e-mailové adresy (v pokročilém režimu lze vyplnit komentář, který může upřesnit účel klíče). Klíč lze nahrát na server s klíči, čímž vznikne vaše digitální identita. Tuto identitu obvykle postupně potvrzují ostatní uživatelé pomocí sítí důvěry tím, že váš klíč podepisují (viz Setkání s podepisováním klíčů).

Klíčenka

Klíče se ukládají na vaši vlastní klíčenku (v Linuxu do vašeho domácího adresáře do ~/.gnupg). Smazáním tohoto adresáře kompletně odstraníte celou klíčenku. Při přenášení klíčů je vhodnější klíče exportovat než kopírovat celý adresář klíčenky, protože při importu dochází ke slučování do klíčenky, nikoliv přepsání jejího obsahu.

YubiKey

Klíče mohou být místo na klíčence v počítači uloženy bezpečněji na smartcard, která podporuje OpenPGP standard, např. některé modely YubiKey. Starší modely (YubiKey 4) umí používat pouze šifru RSA, novější (YubiKey 5) podporují i kryptografii nad eliptickými křivkami (EDDSA, ed25519).

Hlavní klíč a podklíče

GPG generuje standardně tzv. hlavní klíč (masterkey) a k němu jeden podklíč (subkey). Hlavní klíč tvoří vaši identitu a slouží i k podepisování hlavních klíčů ostatních uživatelů využívajících sítě důvěry. Proto je privátní klíč od hlavního klíče potřeba velmi pečlivě chránit heslovou frází (dlouhým heslem) a nejlépe uložením mimo počítače připojené k internetu. V případě kompromitace privátního klíče od hlavního klíče by se za vás mohl kdokoliv vydávat (kompromitace znamená, že klíč někdo zkopíruje). Kompromitace hlavního klíče znamená, že vaše identita a důvěra v ní skončila a musíte si vybudovat novou (od nuly). Hlavní klíč i podklíče sdílí stejnou heslovou frázi.

Kompromitace klíče

Kvůli riziku kompromitace klíče a postupnému stárnutí šifer (už nejsou považovány za bezpečné) je velmi vhodné omezit platnost klíče. Platnost klíče se dá v případě potřeby prodlužovat. V případě kompromitace je možné klíč zneplatnit (odvolat klíč) vytvořením certifikátu (pomocí hlavního klíče) a jeho nahráním na server s klíči. Certifikát pro zneplatnění klíče je proto vhodné vytvořit hned po vygenerování klíčů a pečlivě uložit mimo počítač (vypálit na CD, USB flash, vytisknout a podobně), protože v případě ztráty privátního klíče už nejde certifikát vytvořit a tím ani zneplatnit klíče.

Hlavní klíč umožňuje libovolné vytváření a zneplatňování podklíčů, které pod něj patří a umožňuje i prodlužování jeho platnosti. Je možné do něj přidávat další e-mailové adresy, případně je zneplatňovat.

Základy

Základní informace zjistíme pomocí gpg --version:

$ gpg --version
gpg (GnuPG) 2.2.27
libgcrypt 1.9.4
Copyright (C) 2021 Free Software Foundation, Inc.
License GNU GPL-3.0-or-later <https://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Home: /home/<váš_login>/.gnupg
Supported algorithms:
Pubkey: RSA, ELG, DSA, ECDH, ECDSA, EDDSA
Cipher: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH,
        CAMELLIA128, CAMELLIA192, CAMELLIA256
Hash: SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
Compression: Uncompressed, ZIP, ZLIB, BZIP2

Výpis klíčů na klíčence

Seznam všech veřejných klíčů na vaší klíčence:

gpg --list-keys
gpg --list-public-keys

Seznam veřejných klíčů včetně hashů (otisků) u subklíčů:

gpg --list-keys --with-subkey-fingerprint

Seznam všech privátních klíčů na vaší klíčence:

gpg --list-secret-keys

Seznam všech podpisů pod všemi veřejnými klíči vytvořenými v rámci sítí důvěry:

gpg --with-sig-list --list-keys

Význam výstupu

V následujícím příkladu vypíši svůj vlastní klíč. Protože jich mám v klíčence více, uvedu jeho identifikátor. Identifikátorem může být celý hash (otisk, fingerprint), ale i jeho část (používá se posledních 16 nebo 8 cifer, tj. posledních 8 nebo 4 bajty). Lze použít celky nebo části e-mailové adresy či jména.

$ gpg --list-keys A58D24F9DC29F4B153FF85D576C0B465FE7BEE98
pub   ed25519 2023-12-08 [SC] [expires: 2033-12-05]
      A58D24F9DC29F4B153FF85D576C0B465FE7BEE98
uid           [ultimate] Milan Kerslager <milan.kerslager@seznam.cz>
uid           [ultimate] Milan Kerslager <milan.kerslager@pslib.cz>
uid           [ultimate] Milan Kerslager <milan.kerslager@gmail.com>
sub   cv25519 2023-12-08 [E] [expires: 2026-12-07]

Ve výpisu je postupně uvedeno:

  • pub – veřejný hlavní klíč
  • ed25519 – použitý algoritmus
  • datum vzniku klíče
  • [SC] – co klíč umí (příznaky), u master klíče musí být vždy alespoň tyto dva
    • C (Certify) – podepisování jiných klíčů
    • S (Sign) – vytváření elektronického podpisu
    • E (Encrypt) – šifrování
    • A (Auth) – autentizace (tj. přihlašování pro SSH klíče)
  • expirace klíče (lze prodloužit)
  • část hashe klíče (otisk, fingerprint), tj. jednoznačného identifikátoru klíče
  • uid – uživatelovy identifikátory
  • [ultimate] – důvěryhodnost identifikátoru v klíčence (pro naše potřeby)
    • unknown = Zatím nenastaveno (0?)
    • undefined = Nevím nebo neřeknu (1)
    • never = Klíči NEVĚŘÍM (2)
    • marginal = Věřím klíči částečně (3)
    • full = Klíč jsem ověřil (4)
    • ultimate = Moje vlastní klíče (5)
  • sub – subklíče (klíče podřazené hlavnímu klíči, lze je přidávat/zneplatňovat)
  • význam dalších položek u subklíčů je jako u řádku pub

Generování klíčů

Při generování páru klíčů lze využít jednoduchou metodu:

gpg --gen-key

Nebo využít možnosti změny parametrů (např. komentář ke klíči):

gpg --full-generate-key

Pokud nemáte staré zařízení (např. YubiKey 4, které podporuje jen šifru RSA), doporučuji používat šifry nad eliptickými křivkami (EdDSA – ed25519):

gpg --expert --full-generate-key

- zvolit ECC and ECC => 9 a Curve 25519 => 1
- zvolte vhodnou platnost (dá se dodatečně prodloužit, např. 3 roky) => 3y
- jméno a příjmení, nedoporučuji používat čárky a háčky (nelze dodatečně změnit, jen přidat/zneplatnit)
- e-mailová adresa identifikuje vaši osobu (jeden e-mail může být v různých klíčích)
- komentář je například upřesnění účelu klíče (nelze dodatečně změnit, jen přidat/zneplatnit)
- heslová fráze chrání váš privátní klíč

Podepisování dokumentu

K vytvoření elektronického podpisu je potřeba privátní klíč. Pokud neuvedete jaký, prohledá program GPG klíčenku a použije buď první klíč nebo klíč určený volbou --default-key. Pokud chcete použít nějaký konkrétní klíč, použijte přepínač -u, resp. --local-user. Příklad předpokládá, že existuje soubor dopis.txt s nějakým obsahem:

gpg --sign dopis.txt

Příkaz vytvoří soubor dopis.txt.gpg s odpojeným elektronickým podpisem (binární soubor). Tento postup se využívá v případech, že nelze elektronický podpis k datům přímo připojit (např. k obrázku, ISO souboru a podobně).

Pokud byste chtěli vytvořit čitelný (resp. tisknutelný) podpis, použijte volbu --clearsign, která vytvoří soubor dopis.txt.asc obsahující jak text dopisu, tak vložení podpis, který je zakódovaný pomocí Base64 (Base64 je veřejně známý postup, jak binární obsah zakódovat do ASCII znaků a zpět, používá se v e-mailech společně se standardem MIME).

gpg --clearsign dopis.txt

Data i podpis jsou odděleny značkami, které je nutné zachovat, aby byla umožněna následná kontrola podpisu:

$ cat dopis.txt.asc
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

Ahoj babi,
prachy došly, nové pošli.
Tvůj René
-----BEGIN PGP SIGNATURE-----

iHUEARYIAB0WIQROwSBCbBUoDbgPcYky5PJM52HEVQUCZXV/VwAKCRAy5PJM52HE
VTqUAQClBWCQ6E/u3thV7n6y3LACa2GBCWwDMI6q6TEY7MZZPwEAu4dyRPbGZEsd
nkfoAC0gj7E2KfOx6wTbAczd1NHqQA4=
=U7WQ
-----END PGP SIGNATURE-----

Kontrola podpisu

Kontrola podpisu z prvního výše uvedeného příkladu se provádí pomocí volby --verify, kterému předložíme soubor s odpojeným podpisem. GPG se pokusí najít soubor s podepsanými daty tak, že odebere příponu, ale tento postup není doporučen. Správně by se měl soubor s daty dodat jako druhý parametr.

gpg --verify dopis.txt.gpg
gpg --verify dopis.txt.gpg dopis.txt

V následujícím příkladu je vše v jednom souboru, není tedy potřeba dodávat druhý parametr:

$ gpg --verify dopis.txt.asc
gpg: Signature made Sun Dec 10 10:05:27 2023 CET
gpg:                using EDDSA key 4EC120426C15280DB80F718932E4F24CE761C455
gpg: Good signature from "Milan Kerslager <milan.kerslager@seznam.cz>" [ultimate]

Výše uvedený výstup obsahuje popis elektronického podpisu (kdy a jakým klíčem byl vytvořen). Slovní spojení Good signature značí, že došlo k úspěšnému matematickému ověření podpisu. Dále je uvedena identifikace uživatele použitého klíče a vámi nastavená úroveň důvěry v to, že je skutečně majitelem klíče.

Šifrování dokumentu

Dokument lze zašifrovat pomocí volby --encrypt. Takovéto jednoduché šifrování však není vhodné v případě, že příjemce potřebuje vědět, kdo mu data poslal (viz dále Podepsání a zašifrování dokumentu). Pokud není příjemce určen pomocí --recipient (resp. -r) nebo --default-recipient, GPG se zeptá na jeho identifikaci (lze použít jméno, e-mail i hash klíče):

gpg --recipient Milan --encrypt dopis.txt
file dopis.txt.pgp
dopis.txt.gpg: data

Pokud je potřeba čitelný výstup zakódovaný do Base64, je možné použít volbu --armor:

$ gpg --recipient Milan --armor --encrypt dopis.txt
$ cat dopis.txt.asc
-----BEGIN PGP MESSAGE-----

hF4DZYWc6bUgGf0SAQdATY+ts6PzIaxJDANFt8Ej4C5SywAfgv+tZyWITxwIzn4w
cOODrGKQtAZLjOq7Dd3tiuXm4e7nki1sCbvvthpPnzB/zzg+qdDFdqPalv5kgAiL
0ncBWS+hWO3nwZmRsCmCupu75TzATk+Omoz00oITDMhEKu6Qa5SwXOuTfxG7kErF
gkk1tl70250boWpCGWCIn+t64MvKQZJBIWguai9W+siJbbRuyO6ha5ApdQT2vU0m
TL+eCWDzeN631Xk2o63dpGJ4P4k6/iCvNw==
=xEHK
-----END PGP MESSAGE-----

Uvnitř zakódované zprávy je uveden klíč příjemce potřebný pro dešifrování. Pokud bychom chtěli omezit možnost zjištění příjemce pomocí odposlechnutí síťového provozu, lze identifikátor potřebného klíče potlačit pomocí --hidden-recipient (resp. -R):

$ gpg --hidden-recipient Milan --armor --encrypt dopis.txt
$ cat dopis.txt.asc
-----BEGIN PGP MESSAGE-----

hF4DAAAAAAAAAAASAQdA3U/oBR17qB43fextvrP020MPg3Mbf9rfP2fEHG5VogYw
C9KBUOkDEx4NyF3Q2F3KvX2nZRh/Sg8MPS+Vd+sjBRBokv/o1MbI4s0ym3ESHbQs
0ncB3x/lvZNVySjM4FaZagBRRd2DFyFtRdjRez8u3trttYhMO64ZCy7TOsZQ+RUb
h17GvLwnYzNuI9oGg6W0dUVWCvc08iS/gXia9oIRQShAy70GmamS/ZI3ENWVByzO
57wt3I6Cbg5AYuKnWobQyJ6Kbs1Nxi8xMw==
=NS62
-----END PGP MESSAGE-----

Dešifrování dokumentu

Dešifrování provádíme pomocí volby --decrypt (resp. -d), přičemž je výstup směrován na obrazovku.

$ gpg --decrypt dopis.txt.asc
gpg: encrypted with 255-bit ECDH key, ID 65859CE9B52019FD, created 2023-12-08
      "Milan Kerslager <milan.kerslager@seznam.cz>"
Ahoj babi,
prachy došly, nové pošli.
Tvůj René

Chceme-li výstup uložit, lze použít volbu --output (resp. -o), která musí být uvedena před volbou dešifrovat, nebo můžeme použít přesměrování výstupu (znakem >):

 gpg --output new.asc --decrypt dopis.txt.asc
 gpg --decrypt dopis.txt.asc > new.asc

Podepsání a zašifrování dokumentu

Pokud potřebujeme, aby příjemce věděl, kdo dokument poslal, je nutného ho před zašifrováním podepsat. GPG nepoužívá pro přenos mezi dvěma uživateli dvojité šifrování (tj. křížové použití čtveřice klíčů), jak je popsáno v Asymetrické kryptografii, aby obě strany komunikace mohli ověřit pomocí veřejných klíčů identitu protistrany. Místo toho požívá elektronický podpis (odesílatele) a následně zašifrování veřejným klíčem příjemce. Podepsání a zašifrování lze provést v jednom kroku:

$ gpg --sign --recipient Milan --encrypt dopis.txt
$ file dopis.txt.gpg
dopis.txt.gpg: data

Pokud je potřeba výsledek vložit do textu (např. do těla e-mailu), použijeme volbu --armor, která v příkladu uloží výstup do souboru dopis.txt.asc:

$ gpg --armor --sign --recipient Milan --encrypt dopis.txt
$ cat dopis.txt.asc
-----BEGIN PGP MESSAGE-----

hF4DZYWc6bUgGf0SAQdA+/QiaBfaUbaofhSd1bUgmvvhGmqIy5kaWth3SGKx+DEw
erEMWIB1FKfAFLEXcxTeWWZUDNyVInFm5IQD912pLQCvX1btdQQyVwchzm+UBnP/
0sAzAflSCQwfk9pFNydn5AJqRrz0zT6pXNuU/OQvzJPlJ04ePJL0Jn3RGklqpXlq
IFraLbHG69PRqJYRzkoOaHtU2qT8VIascXQ83tF3OafbMn63JkXBSLBy4N/cCGkc
rAzOpLa3AXGsPDy9Trvmh4oSJ8tWxwt+kmjF8+izgjsoZuax3gOQr4owU4QPVdj8
T3vgkfpKqLlaCaihXLyZ3HAn6p3IPd5ebXINgMz+MjruapOHdoDWCkuNs7woEuIq
PPSuib0oegVwS49cJv6x4jsATPzUAgmOBBdYLUoSWBcuzQUeoZjd2Fa33XYk4Rk0
k4I6ehJe
=/Gwg
-----END PGP MESSAGE-----

Dešifrování a kontrola podpisu

Při dešifrování je automaticky zkontrolován i vložený podpis (význam položek a způsob kontroly je popsán výše v kapitole Kontrola podpisu):

$ gpg --decrypt dopis.txt.gpg
gpg: encrypted with 255-bit ECDH key, ID 65859CE9B52019FD, created 2023-12-08
      "Milan Kerslager <milan.kerslager@seznam.cz>"
Ahoj babi,
prachy došly, nové pošli.
Tvůj René
gpg: Signature made Sun Dec 10 11:03:40 2023 CET
gpg:                using EDDSA key 4EC120426C15280DB80F718932E4F24CE761C455
gpg: Good signature from "Milan Kerslager <milan.kerslager@seznam.cz>" [ultimate]

Dešifrování lze provést s uložením nebo přesměrováním výstupu (zde do souboru decrypted.asc):

 gpg --output decrypted.asc --decrypt dopis.txt.gpg
 gpg --decrypt dopis.txt.gpg > decrypted.asc

Správa klíčů v klíčence

Veřejné klíče jsou ukládány na PKI servery (Public Keys Infrastructure, tj. servery s veřejnými klíči), kterých je na světě hodně a navzájem si mezi sebou klíče automaticky vyměňují. Za jedním doménovým jménem může být kvůli rozložení zátěže více fyzických severů, mezi kterými se přepíná pomocí techniky DNS round robin (pokaždé se použije jiná IP adresa), ale může docházet i k rozložení zátěže pomocí frontendu.

Pro potřeby programu GPG jsou klíče umisťovány na klíčenku. Klíčenka je adresář v počítači, kde jsou všechna potřebná data. V Linuxu je to adresář ~/.gnupg/gpg.conf. Každý uživatel má svoji klíčenku (správa je decentralizovaná). Do klíčenky si uživatel kromě klíčů zapisuje i jejich důvěryhodnost, která se pak používá při výpočtu přenosu důvěry z klíčů na podepsaný či zašifrovaný dokument.

Stahování klíčů ze serveru

Pro stahování klíčů do klíčenky se používá určení klíče podle identifikace uživatele (jméno, e-mail) nebo jeho hashe (otisk, fingerprint), kdy se používá celý hash nebo jeho posledních 8 či 16 cifer (tj. poslední 4 nebo 8 bajtů hashe). Hash je hexadecimální číslo, a proto je ho nutné v některých případech uvozovat znaky 0x (nula a písmeno iks), jak je tomu zvykem v programovacích jazycích pro uvození hexadecimálního čísla:

gpg --recv-keys A58D24F9DC29F4B153FF85D576C0B465FE7BEE98
gpg --recv-keys 76C0B465FE7BEE98
gpg --recv-keys FE7BEE98

GPG stahuje z implicitního serveru s klíči, ale uživatel může určit vlastní buď parametrem --keyserver nebo do konfiguračního souboru (viz níže):

gpg --keyserver keys.openpgp.org --recv-keys FE7BEE98
gpg --keyserver keyserver.ubuntu.com --recv-keys FE7BEE98
gpg --keyserver pgp.mit.edu --recv-keys FE7BEE98

Pro vyhledávání podle identity uživatele použijte parametrem --search (lze kombinovat s parametrem --keyserver). GPG nabídne všechny klíče vyhovující zadání a označí je čísly, aby bylo možné vybrat klíče ke stažení:

gpg --search milan.kerslager@seznam.cz
gpg --search "Milan Kerslager"

Aktualizace klíčů v klíčence

Při aktualizaci dojde pouze ke stažení nových identit, subklíčů a expirace klíče. Kvůli zamezení podvržení klíčů (rep. jejich důveryhodnosti) jsou při aktualizaci (či stažení) ponechány ve veřejném klíči pouze vlastní signatury. Parametrem lze určit konkrétní klíč, který se má aktualizovat (parametrem je hash klíče či identifikátor uživatele). Lze samozřejmě určit i server s klíči:

gpg --refresh-keys
gpg --refresh-keys FE7BEE98
gpg --keyserver keyserver.ubuntu.com --refresh-keys milan.kerslager@seznam.cz

Stahování klíčů včetně signatur

Standardně GPG do klíčenky uloží klíč pouze s vlastními podpisy a ostatní jsou zahozeny, což je bezpečnostní opatření (abychom slepě nedůvěřovali cizím podpisům). Pokud chceme do klíčenky nahrát klíč i se všemi aktuálními podpisy, je potřeba použít přepínač no-self-sigs-only:

gpg --verbose --keyserver-options no-self-sigs-only --keyserver keyserver.ubuntu.com --recv-keys FE7BEE98
gpg --verbose --keyserver-options no-self-sigs-only --keyserver keyserver.ubuntu.com --search FE7BEE98

Stejný přepínač je potřeba i pro aktualizaci klíčů:

gpg --verbose --keyserver-options no-self-sigs-only --keyserver keyserver.ubuntu.com --refresh-keys

Poznámka: Server keys.openpgp.org přepínač ignoruje.

Webové rozhraní

Klíče lze prohlížet i přes webové rozhraní:

Mazání klíčů

TODO

Export klíčů

Klíče lze z klíčenky exportovat pro potřeby zálohování nebo přesunu do jiné klíčenky pomocí volby --export. Touto volbou jsou standardně exportovány všechny veřejné klíče, ale pomocí identifikátoru (hash, jméno či jeho část, e-mailu) lze klíč pro export vybrat. Výstup do souboru pomocí volby --output je nutné zadat dříve než volbu pro export:

gpg --export
gpg --export Milan
gpg --export FE7BEE98
gpg --output pubkey.pgp --export FE7BEE98

Výstup je v binárním tvaru, ale pomocí volby --armor lze výstup zakódovat pomocí kódování Base64, aby ho bylo možné například poslat e-mailem (jako součást textu) nebo vytisknout (archivace mimo digitální média). Okolo zakódovaného klíče jsou textové značky začátku a konce, které je nutné zachovat.

gpg --armor --export FE7BEE98
gpg --output pubkey.asc --armor --export FE7BEE98

Export soukromých klíčů

Soukromé klíče se standardně neexportují, aby nedošlo omylem k jejich vyzrazení. Při jejich exportu jsou zahrnuty i odpovídající veřejné klíče (exportuje se tedy celý pár klíčů). Pro export soukromých klíčů je potřeba použít volbu --export-secret-keys (vyexportuje všechny vyhovující soukromé klíče i pro subklíče), případně --export-secret-subkeys (pouze soukromé klíče u subklíčů). Při exportu bude vyžadováno vložení heslové fráze chránící soukromý klíč a exportovaný klíč bude touto frází také chráněn. Export lze stejně jako u veřejných klíčů zakódovat do ASCII znaků pomocí kódování Base64 volbou --armor.

gpg --armor --export-secret-keys FE7BEE98
gpg --armor --export-secret-keys FE7BEE98 > seckeys.asc
gpg --output seckeys.asc --armor --export-secret-keys FE7BEE98
gpg --output seckeys.pgp --export-secret-keys FE7BEE98
gpg --output seckeys.pgp --export-secret-subkeys FE7BEE98

Import klíčů

Klíče jsou při importu ze souboru do klíčenky slučovány, což brání podvržení klíčů (resp. podpisů pod klíči). Ve výpisu po importu je možné si zkontrolovat důvěryhodnost klíče s ohledem na obsah ve vlastní klíčence (vysvětlení viz kapitola Nastavení důvěryhodnosti klíčů):

$ gpg --import soubor-s-klicem.asc
gpg: key 76C0B465FE7BEE98: "Milan Kerslager <milan.kerslager@seznam.cz>" 3 new signatures
gpg: Total number processed: 1
gpg:         new signatures: 3
gpg: marginals needed: 3  completes needed: 1  trust model: pgp
gpg: depth: 0  valid:   1  signed:   5  trust: 0-, 0q, 0n, 0m, 0f, 1u
gpg: depth: 1  valid:   5  signed:   0  trust: 5-, 0q, 0n, 0m, 0f, 0u
gpg: next trustdb check due at 2024-12-05

Po importu si můžeme prohlédnout signatury importovaného klíče:

gpg --list-sigs 76C0B465FE7BEE98

Nahrávání klíče na server

Nahrávání klíče na server provádí vždy jeho majitel. Neměl by to dělat kdokoliv, protože chybí kontrola autenticity klíče. Na severu dojde z důvody ochrany proti podvržení klíče pouze ke sloučení, nikdy k přepsání klíče:

gpg --send-keys FE7BEE98
gpg --keyserver keys.openpgp.org --send-keys FE7BEE98
gpg --keyserver keyserver.ubuntu.com --send-keys FE7BEE98
gpg --keyserver pgp.mit.edu --send-keys FE7BEE98

Důvěryhodnost klíčů

Důvěryhodnost umožňuje věřit klíčům, jejichž důvěryhodnost je ověřena jinými klíči. Podpisy pod klíči je možné poslat na servery s klíči, ale standardně se z nich nestahují (aby nemohla být narušena důvěra v klíče na klíčence podvrženými podpisy, resp. změněna bez vědomí majitele klíčenky). Důvěryhodnost se nastavuje vždy na klíčence uživatele a jde tedy o lokální záležitost, která se mimo klíčenku nepřenáší.

Důvěryhodnost klíče

Nastavená úroveň důvěryhodnosti klíče v naší klíčence se vypisuje před identitou:

$ gpg --list-keys
/home/kerslage/.gnupg/pubring.kbx
---------------------------------
pub   ed25519 2023-12-08 [SC] [expires: 2033-12-05]
      A58D24F9DC29F4B153FF85D576C0B465FE7BEE98
uid           [ultimate] Milan Kerslager <milan.kerslager@seznam.cz>
sub   cv25519 2023-12-08 [E] [expires: 2026-12-07]

pub   ed25519 2023-12-06 [SC] [expires: 2024-12-05]
      BCE9A5D4B4E3AE22CB01458CA8D03A3F2ABD881D
uid           [  full  ] Frantisek Silhan <frantisek@slhn.cz>
sub   ed25519 2023-12-06 [S] [expires: 2024-12-05]

Seznam úrovní důvěryhodnosti klíče:

  • unknown = Zatím nenastaveno (0?)
  • undefined = Nevím nebo neřeknu (1)
  • never = Klíči NEVĚŘÍM (2)
  • marginal = Věřím klíči částečně (3)
  • full = Klíč jsem ověřil (4)
  • ultimate = Moje vlastní klíče (5)

Důvěryhodnost ultimate mají jen vlastní podepsané klíče, plně důvěryhodný cizí klíč je full.

Nastavení důvěryhodnosti klíče

Důvěryhodnost klíče je možné nastavit při editaci klíče pomocí trust:

gpg --edit-key 76C0B465FE7BEE98

- zvolit trust
- nastavit úroveň, např. 3
- opustit editační režim: quit

Import klíče

Při výpisu nebo při importu klíče jsou ve výpisu zobrazeny různé úrovně důvěryhodnosti, například:zdrojzdroj

$ gpg --check-trustdb 0123456789ABCDEF
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0  valid:   1  signed:  16  trust: 0-, 0q, 0n, 0m, 0f, 1u
gpg: depth: 1  valid:  16  signed: 115  trust: 1-, 1q, 1n, 1m, 12f, 0u
gpg: depth: 2  valid: 105  signed: 189  trust: 81-, 11q, 0n, 4m, 9f, 0u
gpg: depth: 3  valid:  29  signed: 120  trust: 19-, 9q, 0n, 0m, 1f, 0u
  • - Nepřiřazená důvěra nebo dosud nespočtená
  • e Výpočet důvěry selhal; často kvůli vypršelé platnosti klíče
  • q Nedostatek informací pro výpočet důvěry
  • n Klíči nikdy nevěřit
  • m Částečně důvěryhodný
  • f Plně důvěryhodný
  • u Naprosto důvěryhodný

Podepisování klíčů

Podepisování klíčů za účelem vytvoření Sítě důvěry se dělá pomocí Setkání s podepisováním klíčů. Aby byla síť důvěry funkční, je potřeba zajistit, že nepodepíšeme podvržený klíč. Proto se postupuje takto:

  1. Vytvoříme si vlastní kvalitní klíče, které chceme využívat pro potvrzení naší identity (viz začátek textu)
  2. Požádáme majitele klíčů (René), které chceme podepsat, aby nám napsal na papírek hash (otisk, fingerprint) master klíče společně s jeho identitou (jméno a e-mail)
    • důkladně si ověříme, že identita majitele je shodná s tím, co je uvedeno na papírku (např. pomocí občanského průkazu nebo tím, že ho známe či ho zná někdo, komu velmi důvěřujeme).
  3. odneseme si papírek na místo, kde máme k dispozici dobře chráněné klíče své vlastní identity
    • nikdy nepodepisujeme cizí klíče přímo na místě, kde je více lidí
    • nikdy nenosíme privátní klíč svého masterklíče (své digitální identity) na místo, kde je více lidí
  4. stáhneme si klíč Reného (pomocí celého hashe nebo posledních 8 či 16 znaků jeho hexadecimálního otisku) ze serveru s klíči (buď implicitní nebo jiný):
    • gpg --recv-keys 01234567890ABCDEF
    • gpg --keyserver keyserver.ubuntu.com --recv-keys 01234567890ABCDEF
    • gpg --keyserver pgp.mit.edu --recv-keys 01234567890ABCDEF
  5. pečlivě zkontrolujeme přijatý klíč s obsahem papírku (hash, jméno, e-mail)
  6. pokud bylo při kontrole vše v pořádku, klíč podepíšeme:
    • gpg --sign-key 01234567890ABCDEF
  7. Není vhodné posílat klíč na server s klíči, protože není ověřena jeho autenticita majitelem, viz např. zde nebo zde (caff)
  8. podepsaný veřejný klíč Reného vyexportujeme, podepíšeme a zašifrujeme:
    • gpg --armor --export 01234567890ABCDEF | gpg --sign --encrypt --recipient 01234567890ABCDEF > 01234567890ABCDEF.asc.pgp
  9. pošleme klíč Renému na jeho e-mailovou adresu (nejlépe na tu uvedenou v jeho klíči jako hlavní) – tj. pošleme soubor 01234567890ABCDEF.asc.pgp
  10. René dešifruje svůj přijatý klíč a pečlivě ho zkontroluje včetně vloženého podpisu:
    • gpg --decrypt 01234567890ABCDEF.asc.pgp
  11. pokud je vše v pořádku, René naimportuje přijatý klíč do své klíčenky, čímž dojde ke spojení s již uloženým:
    • gpg --import 01234567890ABCDEF.asc
  12. je-li spokojen s výsledkem, může svůj masterklíč poslat na různé servery s klíči:
    • gpg --send-keys 01234567890ABCDEF
    • gpg --keyserver keys.openpgp.org --send-keys 01234567890ABCDEF
    • gpg --keyserver keyserver.ubuntu.com --send-keys 01234567890ABCDEF
    • gpg --keyserver pgp.mit.edu --send-keys 01234567890ABCDEF
  13. po nějaké chvíli (resp. druhý den) můžeme na serverech klíč zkontrolovat:
  14. ostatní mohou po nějaké době aktualizovat klíč ve svých klíčenkách, ale protože GPG standardně zahazuje všechny cizí signatury (aby nedošlo k nechtěnému podvržení klíče), je nutné použít přepínač no-self-sigs-only:
    • gpg --verbose --keyserver-options no-self-sigs-only --keyserver keyserver.ubuntu.com --refresh-keys FE7BEE98

Různé

Inline dialog pro hesla

GPG používá pro vstup hesla i v textovém režimu celoobrazovkový dialog (okno). Pokud jej nechcete používat, přidejte do své konfigurace volbu pinentry-mode. GPG nemá globální konfigurační soubor, každý uživatel si ho musí nastavit sám v souboru ~/.gnupg/gpg.conf. Volbu do konfiguračního souboru lze přidat příkazem:

echo pinentry-mode loopback >> ~/.gnupg/gpg.conf

Implicitní klíčový server

Uživatel si může stanovit svůj vlastní implicitní server s klíči pomocí volby keyserver. Volbu do konfiguračního souboru lze přidat příkazem:

echo keyserver hkps://keys.openpgp.org >> ~/.gnupg/gpg.conf

Mapa vztahů mezi klíči

Mapu vztahů vašeho klíče lze zobrazit dle návodu na stránce nástroje caff.

gpg --list-sigs | sig2dot | xdot