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. 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í. Š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/passwords** | **rm ~/.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í. 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. 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``: .. code-block:: bash :emphasize-lines: 1,13 :caption: Zjištění "keygrip" autentizačního klíče a zapsání 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 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 .. code-block:: bash 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). .. code-block:: bash :emphasize-lines: 1 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. .. [17] WALFIELD, Neal H.; KOCH, Werner. TOFU for OpenPGP. In: Proceedings of the 9th European Workshop on System Security. ACM, 2016. p. 2. .. [18] Pomocí přepínače či parametru konfiguračního souboru lze nastavit, že se program gpg bude při prvním výskytu ptát podobně jako ssh. .. |image0| image:: ./media/pgp_image1.png :width: 1.96806in :height: 2.63125in .. |image1| image:: ./media/pgp_image3.png :width: 6.3in :height: 4.38542in .. |image2| image:: ./media/pgp_image5.png :width: 6.3in :height: 4.04167in .. |image3| image:: ./media/pgp_image7.png :width: 6.3in :height: 4.95139in .. |image4| image:: ./media/pgp_image9.png :width: 5.36458in :height: 2.38542in .. |image5| image:: ./media/pgp_image11.png :width: 5.13542in :height: 2.9125in .. |image6| image:: ./media/pgp_image13.png .. |image7| image:: ./media/pgp_image14.png :width: 6.3in :height: 3.45139in .. |image8| image:: ./media/pgp_image16.png :width: 1.67708in :height: 1.63125in .. |image9| image:: ./media/pgp_image18.png :width: 3.72917in :height: 3.09375in .. |image10| image:: ./media/pgp_image20.png :width: 5.25in :height: 4.25in .. |image11| image:: ./media/pgp_image22.emf :width: 5.66944in :height: 3.14167in