3.7. Různé¶
Tato část obsahuje rozšiřující témata. Začneme modelem důvěry nazvaným
TOFU, ukážeme si jak pomocí gpg šifrovat hesla pro jiné aplikace,
popíšeme fungování programů gpg-agent
. A též si ukážeme použíti gpg
klíčů pro autentizaci pomocí ssh.
3.7.1. Důvěřuj při prvním styku (TOFU)¶
V kapitole TODO byl popsán klasický model důvěry obsažený v OpenPGP – platné jsou klíče podepsané Vámi nebo důvěryhodnými osobami (pavučina důvěry). V roce 2015 byl program gpg rozšířen o model Trust On First Use (TOFU) – důvěřuj při prvním užití 17.
Princip je jednoduchý – když přijde první podepsaná zpráva z nějaké e-mailové adresy, tak se z veřejného klíčového serveru stáhne klíč a označí jako částečně platný – je přidána nová úroveň platnosti. U několika následných použití uvedeného klíče (ověření podpisu či zašifrování pro dotyčného) se zobrazuje upozornění There is limited assurance this key belongs to the named user. Poté se stane plně platným.
U všech dalších zpráv se kontroluje, zda se pro danou e-mailovou adresu klíč nezměnil – pokud ano, tak se zobrazí upozornění na možné podvržení klíče.
Je též možný MitM útok při prvním použití klíče. Útočník ale potom musí podvrhávat klíč i při následující komunikaci, jinak je velmi pravděpodobné odhalení útoku.
Model TOFU se používá při ověřování důvěryhodnost serveru v SSH. U OpenPGP chybí dotaz na ověření otisku serveru při prvním výskytu 18. TOFU je méně bezpečný než klasický model – ověřuje se pouze přiřazení stejného klíče k e-mailové adrese, neověřuje se identita držitele privátního klíče.
Model TOFU vyžaduje minimální aktivitu uživatelů, což paradoxně může vést k lepšímu zabezpečení než klasický model, ve kterém uživatelé neověřují uživatele a podepisují cizí klíče automaticky. Bezpečnost TOFU se zvyšuje se zvětšujícím se počtem vyměněných podepsaných zpráv. Výhodou je i prodlužování platnosti klíčů vlastníky – pokud někdo stejným klíčem podepisuje většinu zpráv více let, tak zpráva podepsaná jiným klíčem pro stejnou identitu je automaticky podezřelá a gpg na ni upozorní.
3.7.2. Šifrování hesel pro další aplikace¶
Gpg umožňuje bezpečné uložení hesel pro další aplikace a jejich
zpřístupnění pomocí hesla k privátnímu klíči. Příkladem může být
poštovní program mutt, který umí číst zprávy na IMAP serveru a odesílat
je přes autentizované spojení vůči SMTP serveru. Hesla jsou uloženy
v souboru .mutt/passwords
:
set imap_pass="heslo_k_imap_serveru"
set smtp_pass="heslo_k_smtp_serveru"
a v souboru .mutt/muttrc
bude řádek:
source ~/.mutt/passwords
Toto není bezpečné uložení hesel. Může si je přečíst administrátor, budou uloženy na zálohách systému. Pokud není zašifrován disk, tak si je může přečíst i případný zloděj počítače.
Řešením je soubor s hesly zašifrovat pro sebe pomocí gpg a původní soubor následně smazat:
gpg --recipient vaše_keyid --encrypt ~/.mutt/passwordsrm ~/.mutt/passwords
V souboru .mutt/muttrc
se konfigurace upraví následovně:
source "gpg --no-tty -qd ~/.mutt/passwords.gpg \|"
Při spuštění programu mutt se program gpg zeptá na heslo k privátnímu klíči (pokud není v gpg-agent), dešifruje soubor s hesly a přes rouru předá obsah programu mutt. Z gpg se tak stává správce ostatních hesel.
Podrobnější popis včetně dalších bezpečnostních doporučení najdete v článku https://wiki.xmission.com/Hosted_Email:Mutt. Ne všechny programy popisované řešení umožňují.
3.7.3. gpg-agent – správa privátních klíčů a hesel pro aplikace¶
Program gpg-agent běží na pozadí (daemon) a spravuje privátní klíče a hesla pro aplikace. Od verze 2.0 se tento uživatelský daemon spouští automaticky.
Pokud program gpg
potřebuje privátní klíč, tak kontaktuje proces gpg-agent
.
Pokud je klíč již v paměti, tak ho poskytne žádající aplikaci. Pokud
v paměti není, tak se ho pokusí načíst z klíčenky. Přitom se zeptá na
heslo k privátnímu klíči. Pro dotazy na heslo se používá některá
z aplikací pinentry. Existují verze pro textové i pro grafické rozhraní.
Gpg-agent při spuštění čte konfigurační souboru ~/.gnupg/gpg-agent.conf
.
Můžete nastavit např. následující parametry (další možnosti jsou popsány
v manuálových stránkách):
default-cache-ttl 1800
max-cache-ttl 43200
Parametr default-cache-ttl
udává čas neaktivity ve vteřinách.
Přednastaveno je 600 vteřin – pokud se 600 vteřin konkrétní klíč či
konkrétní heslo nepoužije, tak se vymaže z paměti. Druhý parametr
max-cache-ttl
má přednastaveno 7200 vteřin (2 hodiny) – klíč se smaže
z paměti po dvou hodinách od nahrání i když se průběžně používá.
Uživatel poté musí znovu zadat heslo ke klíči.
3.7.4. Klíče pro autentizaci¶
Napadla Vás někdy otázka, zda by nebylo možné použít RSA klíče z OpenSSH též v OpenPGP či obráceně?
Nejdříve je potřeba si uvědomit, že v SSH je jedna dvojice klíčů, kdežto v OpenPGP je hierarchie klíčů – hlavní dvojice je pro podepisování klíčů a případně dokumentů. Pro další užití jsou podklíče. Je definováno i užití Authentication – pro autentizaci uživatele. A SSH klíče se používají pro autentizaci.
gpg-agent
umí simulovat chování programu ssh-agent
. Tj. nahraje
autentizační klíče do paměti a programu ssh je poskytuje stejným
způsobem, jako to dělá ssh-agent. V tomto případě ale nesmí být spuštěn
program ssh-agent. gpg-agent nabídne k autentizaci podklíče s užitím pro
autentizaci, je schopen nabídnou i ssh klíče vygenerované mimo gpg.
Klíče pro autentizaci můžete vytvořit při expertní úrovní editace klíče:
gpg --expert --edit-key keyId
Další klíč přidáte pomocí povelu addkey – na expertní úrovni se Vám nabídnou volby s možností nastavení užití vytvářeného klíče (set your own capabilities). V dalším kroku nastavíte vytvářené dvojici klíčů užití na autentizaci.
Do konfiguračního souboru ~/.gnupg/gpg-agent.conf
je potřeba doplnit řádek:
enable-ssh-support
Otisk (tzv. keygrip) konkrétního klíče pro SSH autentizaci je potřeba zapsat do souboru ~/.gnupg/sshcontrol
:
gpg -k --with-keygrip
/home/pavlicek/.gnupg/pubring.kbx
---------------------------------
pub rsa2048 2018-03-14 [SC] [expires: 2020-03-13]
AB96794BC38AC89538F5DB0DDEAF94B63E7B49C5
Keygrip = 7C9D19B7815151B91E7DAD85BABC003CBFA8E581
uid [ultimate] Lubos Pavlicek <pavlicek@bis.vse.cz>
sub rsa2048 2018-03-14 [E] [expires: 2020-03-13]
Keygrip = A8BE3E60570B41FE19E3101AB2EE0A5174F99CAB
sub ed25519 2018-03-14 [A]
Keygrip = 541E8E50D76897CB55227B66CF237194498661E0
echo 541E8E50D76897CB55227B66CF237194498661E0 > ~/.gnupg/sshcontrol
Dále je potřeba
export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket)
Poslední krok je zjistit veřejný klíč ve formátu použitelném do
souboru .ssh/authorized_keys
pomocí programu ssh-add -l
.
V následující ukázce se vypíše klíče vygenerovaný algoritmem ed25519 (Curver 25519).
ssh-add -l
256 SHA256:fHPpI2b21jsBlV14X7i6zP4/3fPntday3laXiLO9OsY (none) (ED25519)
Podrobný popis nastavení najdete v článku Using a GPG key for SSH Authentication Ve Windows může program gpg-agent nahradit aplikaci pagent z PuTTY. Výhodou je řádově bezpečnější uložení klíčů i možnost nastavení dotazu na heslo ke klíči při delší době nepoužití klíče.
V článku How to use a GPG key for SSH authentication je popsáno využití hardarového tokenu pro uložení privátního klíče.
Neexistuje snadný způsob, jak do klíčenky naimportovat dvojici klíčů vytvořenou pro ssh. Problematický je i export soukromého klíče pro autentizaci z klíčenky do formátu, který používá ssh.