Portál AbcLinuxu, 26. dubna 2024 15:40

Yubikey. Co to je a co to umí (3)

10. 5. 2016 | Bystroushaak
Články - Yubikey. Co to je a co to umí (3)  

Koupil jsem si Yubikey 4. Po popisu, jak ho zprovoznit na Linuxu, pokračujeme tím, co všechno Yubikey umí, co mě k jeho pořízení vedlo a kolik to stálo.

Instalace v distribuci Linux Mint (pokračování)

Předchozí kroky najdete v závěru minulého dílu a v dílu druhém.

Nahrání klíče do Yubikey

Nakonec už zbývá jen nahrát klíč do Yubikey. Než se do toho pustíme, je potřeba opět umravnit GPG:

$ killall gpg-agent
$ eval $(gpg-agent --daemon --enable-ssh-support > /tmp/gpg-agent.env);
$ . /tmp/gpg-agent.env

Použijeme k tomu opět parametr „--edit-key“. Nezapomeňte použít gpg2, jinak to nebude fungovat:

$ gpg2 --edit-key 3F6F3D1B
gpg (GnuPG) 2.0.22; Copyright (C) 2013 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Tajný klíč je dostupný.

pub  2048R/3F6F3D1B  vytvořen: 2016-01-11  platnost skončí: nikdy       použití: SC  
                     důvěra: absolutní    platnost: absolutní
sub  2048R/EF4ADF82  vytvořen: 2016-01-11  platnost skončí: nikdy       použití: E   
sub  2048R/8F8041DC  vytvořen: 2016-01-11  platnost skončí: nikdy       použití: A   
[  absolutní ] (1). Bystroushaak <bystrousak@kitakitsune.org>

gpg>

Přehled můžeme zkrátit pomocí příkazu „toggle“:

gpg> toggle

sec  2048R/3F6F3D1B  vytvořen: 2016-01-11  platnost skončí: nikdy     
ssb  2048R/EF4ADF82  vytvořen: 2016-01-11  platnost skončí: nikdy     
ssb  2048R/8F8041DC  vytvořen: 2016-01-11  platnost skončí: nikdy     
(1)  Bystroushaak <bystrousak@kitakitsune.org>

Klíč poté nahrajeme do Yubikey příkazem „keytocard“:

gpg> keytocard
Opravdu přesunout primární klíč? (a/N) a
Signature key ....: [none]
Encryption key....: [none]
Authentication key: [none]

Prosím vyberte místo pro uchování klíče:
   (1) Podepisovací klíč
   (3) Autentizační klíč
Váš výběr?

Program se nás zeptá, zda klíč chceme používat pro podepisování, či autentizaci. Chceme podepisování, proto vybereme 1:

Váš výběr? 1

Musíte znát heslo, abyste odemkl(a) tajný klíč pro
uživatele: „Bystroushaak <bystrousak@kitakitsune.org>“
délka 2048 bitů, typ RSA, klíč 3F6F3D1B, vytvořený 2016-01-11

GPG nyní bude chtít dvě hesla:

  1. Heslo od vašeho klíče.
  2. Administrátorský PIN. Pokud jste ho neměnili, je to „12345678“.

Poté již klíč nahraje do karty.

sec  2048R/3F6F3D1B  vytvořen: 2016-01-11  platnost skončí: nikdy     
                     číslo karty: 0006 04131447
ssb  2048R/EF4ADF82  vytvořen: 2016-01-11  platnost skončí: nikdy     
ssb  2048R/8F8041DC  vytvořen: 2016-01-11  platnost skončí: nikdy     
(1)  Bystroushaak <bystrousak@kitakitsune.org>

gpg>

To samé pak chceme zopakovat s podklíčem používaným pro šifrování, který vybereme příkazem „key 1“:

gpg> key 1

sec  2048R/3F6F3D1B  vytvořen: 2016-01-11  platnost skončí: nikdy     
                     číslo karty: 0006 04131447
ssb* 2048R/EF4ADF82  vytvořen: 2016-01-11  platnost skončí: nikdy     
ssb  2048R/8F8041DC  vytvořen: 2016-01-11  platnost skončí: nikdy     
(1)  Bystroushaak <bystrousak@kitakitsune.org>

gpg> keytocard
Signature key ....: 9F87 EECF CDAA 263C AC00  A5A0 3F92 841C 3F6F 3D1B
Encryption key....: [none]
Authentication key: [none]

Prosím vyberte místo pro uchování klíče:
   (2) Šifrovací klíč
Váš výběr? 2

Musíte znát heslo, abyste odemkl(a) tajný klíč pro
uživatele: „Bystroushaak <bystrousak@kitakitsune.org>“
délka 2048 bitů, typ RSA, klíč EF4ADF82, vytvořený 2016-01-11


sec  2048R/3F6F3D1B  vytvořen: 2016-01-11  platnost skončí: nikdy     
                     číslo karty: 0006 04131447
ssb* 2048R/EF4ADF82  vytvořen: 2016-01-11  platnost skončí: nikdy     
                     číslo karty: 0006 04131447
ssb  2048R/8F8041DC  vytvořen: 2016-01-11  platnost skončí: nikdy     
(1)  Bystroushaak <bystrousak@kitakitsune.org>

gpg>

A pak ještě jednou pro třetí klíč s příkazem „key 2“ (počítáno od nuly):

gpg> key 2

sec  2048R/3F6F3D1B  vytvořen: 2016-01-11  platnost skončí: nikdy     
                     číslo karty: 0006 04131447
ssb  2048R/EF4ADF82  vytvořen: 2016-01-11  platnost skončí: nikdy     
                     číslo karty: 0006 04131447
ssb  2048R/8F8041DC  vytvořen: 2016-01-11  platnost skončí: nikdy     
(1)  Bystroushaak <bystrousak@kitakitsune.org>

gpg> keytocard
Opravdu přesunout primární klíč? (a/N) a
Signature key ....: 9F87 EECF CDAA 263C AC00  A5A0 3F92 841C 3F6F 3D1B
Encryption key....: DA79 B9A1 F403 2515 D167  12DC 64D4 BDA4 EF4A DF82
Authentication key: [none]

Prosím vyberte místo pro uchování klíče:
   (1) Podepisovací klíč
   (3) Autentizační klíč
Váš výběr?

První klíč byl Podepisovací, druhý Šifrovací. Teď nám zbývá už jen Autentizační, proto vybereme „3“:

Váš výběr? 3

Musíte znát heslo, abyste odemkl(a) tajný klíč pro
uživatele: „Bystroushaak <bystrousak@kitakitsune.org>“
délka 2048 bitů, typ RSA, klíč 8F8041DC, vytvořený 2016-01-11


sec  2048R/3F6F3D1B  vytvořen: 2016-01-11  platnost skončí: nikdy     
                     číslo karty: 0006 04131447
ssb  2048R/EF4ADF82  vytvořen: 2016-01-11  platnost skončí: nikdy     
                     číslo karty: 0006 04131447
ssb* 2048R/8F8041DC  vytvořen: 2016-01-11  platnost skončí: nikdy     
                     číslo karty: 0006 04131447
(1)  Bystroushaak <bystrousak@kitakitsune.org>

gpg>

GPG poté ukončíme příkazem „quit“ s uložením změn:

gpg> quit
Uložit změny? (a/N) a

Nově už v klíčence GPG v počítači nejsou uloženy privátní klíče, pouze ukazatele na kartu. To ovšem nestačí, protože v základní módu požaduje Yubikey pouze PIN, nikoliv ověření dotykem.

Aktivace dotekové plochy

Nyní to chce přesvědčit Yubikey, aby vyžadoval dotek na ploše před uvolněním klíče. K tomu slouží skript na adrese https://gist.github.com/a-dma/797e4fa2ac4b5c9024cc (webarchive) (to jsem si nevymyslel, je to z oficiální dokumentace (webarchive) :(). Stáhnout se dá kliknutím na tlačítko RAW vpravo v rohu.

Postupně je možné zapnout PIN pro…

Dotek při dešifrování

$ bash yubitouch.sh dec on 12345678
All done!

Dotek při autentizaci

$ bash yubitouch.sh aut on 12345678
All done!

Dotek při podepisování

$ bash yubitouch.sh sig on 12345678
All done!

PIN zde zadáváte jako potvrzení, ne k nastavení jeho hodnoty. Skript má docela problém s nenumerickými administrátorskými hesly (tzn. použijte jen čísla), proto doporučuji tento krok před posledním, což je…

Změna PIN

Ke změně PIN použijeme příkaz „gpg2 --card-edit“. Pokud vám nebude chtít navázat komunikaci opět proveďte „. /tmp/gpg-agent.env“ (tečka je na začátku schválně).

$ gpg2 --card-edit 

Application ID ...: D2760001240102010006041314470000
Version ..........: 2.1
Manufacturer .....: unknown
Serial number ....: 04131447
Name of cardholder: [není nastaven]
Language prefs ...: [není nastaven]
Sex ..............: neuvedeno
URL of public key : [není nastaven]
Login data .......: [není nastaven]
Signature PIN ....: není vyžadováno
Key attributes ...: 2048R 2048R 2048R
Max. PIN lengths .: 127 127 127
PIN retry counter : 3 0 3
Signature counter : 0
Signature key ....: 9F87 EECF CDAA 263C AC00  A5A0 3F92 841C 3F6F 3D1B
      created ....: 2016-01-11 10:04:02
Encryption key....: DA79 B9A1 F403 2515 D167  12DC 64D4 BDA4 EF4A DF82
      created ....: 2016-01-11 10:04:02
Authentication key: 13D3 290C 3FFE EC20 ED3B  4AD2 72A8 96C0 8F80 41DC
      created ....: 2016-01-11 10:11:32
General key info..: 
pub  2048R/3F6F3D1B 2016-01-11 Bystroushaak <bystrousak@kitakitsune.org>
sec>  2048R/3F6F3D1B  vytvořen: 2016-01-11  platnost skončí: nikdy     
                      číslo karty: 0006 04131447
ssb>  2048R/EF4ADF82  vytvořen: 2016-01-11  platnost skončí: nikdy     
                      číslo karty: 0006 04131447
ssb>  2048R/8F8041DC  vytvořen: 2016-01-11  platnost skončí: nikdy     
                      číslo karty: 0006 04131447

gpg/karta>

V GPG shellu se do správné konfigurace dostaneme sekvencí příkazů „admin“ a „passwd“:

gpg/karta> admin
administrátorské příkazy jsou povoleny

gpg/karta> passwd
gpg: Nalezena OpenPGP karta číslo D2760001240102010006041314470000

1 - change PIN
2 - unblock PIN
3 - change Admin PIN
4 - set the Reset Code
Q - quit

Váš výběr?

Zde je možné jednoduše změnit jak PIN (menu „1“), tak Admin PIN (menu „3“). GPG zde slovo PIN používá poněkud zavádějícím způsobem, protože se rozhodně nejedná o číselné sekvence, ale můžete s klidem v duši použít poměrně komplikovaná a dlouhá hesla.

Váš výběr? 1
PIN changed.

1 - change PIN
2 - unblock PIN
3 - change Admin PIN
4 - set the Reset Code
Q - quit

Váš výběr? 3
PIN changed.

1 - change PIN
2 - unblock PIN
3 - change Admin PIN
4 - set the Reset Code
Q - quit

Váš výběr? q

gpg/karta> quit

Ověření

Zbývá ještě ověřit, jestli vše funguje, jak má. Zkusíme třeba něco podepsat. Vytvoříme testovací soubor obsahující jen řetězec „test“:

$ echo test > test.txt

Tento soubor podepíšeme:

$ gpg --clearsign test.txt

GPG se přitom zasekne a Yubikey by měl začít problikávat, čímž indikuje, že očekává dotek. Jakmile se ho dotkneme, je vytvořen soubor „test.txt.asc“ s následujícím obsahem:

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

test
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1

iQEcBAEBAgAGBQJWk5ElAAoJED+ShBw/bz0b6Z0IALz/6H2pge00EuvWsy/3TjG/
dubGRJjJGstyi1G/AdkumHoqp11ON89PgVGuL6d4B2losFtlhlu4lO8NBMWfGdPv
w4uD2BckvRxsIclJxUiIkPgTuXirIjr0EdHZIHFy2KlcGNKKhD9CXkxYNgwPUhEJ
H/i9getLo3G2evtZ6aG1tsCMar4tA/ETaehQwIZ6Hge48nzC3t1DW+S2krQ9WrIE
jkXUw+gQFgim3iTccIBab5gnXqISVcZA30rigKauN+yKs069r6hwodMIaMK7bby1
Ihh8NHcub+oP+tqiFliccpuvJ9AupoOtObdJ5fpaFcw2zcxkEXhVP6BmKC9E9IA=
=kDpk
-----END PGP SIGNATURE-----

Oprava GPG

Několikrát jsme byli nuceni použít hack GPG, který sestřelil běžící proces gpg-agent a nastavil pár proměnných.

Nejjednodušší způsob, jak zabránit opakování před každým použitím Yubikey, pochází z blogu Derka Kozla (webarchive) a spočívá v přidání následujících řádek do „.bashrc“:

if [ ! -f /tmp/.gpg-agent.env ]; then
        killall gpg-agent;
        eval $(gpg-agent --daemon --enable-ssh-support > /tmp/.gpg-agent.env);
fi
. /tmp/.gpg-agent.env

Přenos na jiný počítač

Co dělat, pokud přijdete k jinému počítači a chcete Yubikey používat i tam?

Většinou je nutné nainstalovat všechny závislosti, udev pravidlo a resetovat GPG agent, jak už bylo ukázáno na začátku této kapitoly. Časem možná budou distribuce doplněny natolik, že to již nutné nebude.

K tomu, aby Yubikey začal s GPG fungovat, stačí už jen importovat předtím exportovaný veřejný klíč:

$ gpg2 --import < yubikey.pub

Použití s SSH

Poslední možností je použití Yubikey pro SSH autorizaci. Toho je docíleno spoluprací s GPG, které k tomuto má standardní mechanismy výměny informace s SSH klientem.

K čemu to? Například tím získáte odolnost proti chybám vývojářů SSH a možnosti, že by vám někdo exploitací chyby ukradl klíč. Pokud si myslíte, že je to nepravděpodobné, doporučuji k přečtení: OpenSSH obsahuje chybu umožňující ukrást klientské klíče (webarchive).

Ze všeho nejdřív si najdeme Autentizační klíč:

$ gpg --card-status
can't connect to `/tmp/gpg-oTFIub/S.gpg-agent': Adresář nebo soubor neexistuje
gpg: detected reader `Yubico Yubikey 4 OTP+CCID 00 00'
Application ID ...: D2760001240102010006041314470000
Version ..........: 2.1
Manufacturer .....: unknown
Serial number ....: 04131447
Name of cardholder: [není nastaven]
Language prefs ...: [není nastaven]
Sex ..............: neuvedeno
URL of public key : [není nastaven]
Login data .......: [není nastaven]
Private DO 1 .....: [není nastaven]
Private DO 2 .....: [není nastaven]
Signature PIN ....: není vyžadováno
Key attributes ...: 2048R 2048R 2048R
Max. PIN lengths .: 127 127 127
PIN retry counter : 3 0 3
Signature counter : 7
Signature key ....: 9F87 EECF CDAA 263C AC00  A5A0 3F92 841C 3F6F 3D1B
      created ....: 2016-01-11 10:04:02
Encryption key....: DA79 B9A1 F403 2515 D167  12DC 64D4 BDA4 EF4A DF82
      created ....: 2016-01-11 10:04:02
Authentication key: 13D3 290C 3FFE EC20 ED3B  4AD2 72A8 96C0 8F80 41DC
      created ....: 2016-01-11 10:11:32
General key info..: pub  2048R/3F6F3D1B 2016-01-11 Bystroushaak <bystrousak@kitakitsune.org>
sec>  2048R/3F6F3D1B  vytvořen: 2016-01-11  platnost skončí: nikdy     
                      číslo karty: 0006 04131447
ssb>  2048R/EF4ADF82  vytvořen: 2016-01-11  platnost skončí: nikdy     
                      číslo karty: 0006 04131447
ssb>  2048R/8F8041DC  vytvořen: 2016-01-11  platnost skončí: nikdy     
                      číslo karty: 0006 04131447

Autentizační klíč je v tomto případě ten poslední:

Authentication key: 13D3 290C 3FFE EC20 ED3B  4AD2 72A8 96C0 8F80 41DC
      created ....: 2016-01-11 10:11:32

Jeho krátké ID získáme z přehledu klíčů příkazem:

$ gpg --fingerprint --fingerprint 
/home/bystrousak/.gnupg/pubring.gpg
-----------------------------------
pub   2048R/3F6F3D1B 2016-01-11
      Fingerprint klíče = 9F87 EECF CDAA 263C AC00  A5A0 3F92 841C 3F6F 3D1B
uid                  Bystroushaak <bystrousak@kitakitsune.org>
sub   2048R/EF4ADF82 2016-01-11
      Fingerprint klíče = DA79 B9A1 F403 2515 D167  12DC 64D4 BDA4 EF4A DF82
sub   2048R/8F8041DC 2016-01-11
      Fingerprint klíče = 13D3 290C 3FFE EC20 ED3B  4AD2 72A8 96C0 8F80 41DC

Zde je možné vidět, že k fingerprintu 13D3 290C 3FFE EC20 ED3B 4AD2 72A8 96C0 8F80 41DC náleží ID 2048R/8F8041DC. Použít je také možné příkaz:

$ gpg --fingerprint --fingerprint | grep -B 1 "`gpg --card-status | grep Authentication | cut -d ":" -f 2`"

Jakmile máte ID klíče pro autentizaci, je možné postoupit k generování veřejného klíče:

$ gpgkey2ssh 8F8041DC
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCXM63qLDM/AxUdotf46xQ5lkWiNnztgQEAPXu3maXt
Z4U+ZYEarPLG9sF/5Vc7pMH5TuBV/6+l3835hGOYcelYw1l8VMYGWIUjzALo8zxEpyfUf50m8C2lfJKJ
Q9o/AeU3GmWrA2zkkUnqLHJih0Rj1lCcS5CGYZ6yAhsCFB5SC/I7bTByP7KOhISTLQkb3kRz7zTxOw4+
lOOlmTcbd5vHfuZvoYkU8I9o4GmbC1ofZ/dr0WxVVm0ZcBZ7R56sh53d/hDJoB0AMJH7MRrVgkGZqPdr
d2uGKTqn1aaP5fbr53mZLLotbWbx40VmUi9O2FnytACQIOYSJlurOx/sORjF COMMENT

Což vygeneruje nový veřejný klíč, který je možné přidat na serveru do souboru .ssh/authorized_keys. Jakmile se na server přihlásíte, SSH vás prostřednictvím GPG požádá o PIN (pokud jste si ho nastavili) a autorizaci dotekem kapacitního snímače Yubikey. Pokud není Yubikey vložen, je zobrazena žádost o heslo (pokud je k přihlášení heslo povoleno).

Cena

Yubikey mě vyšel přesně na 1699,85 Kč, což je kapku víc než uváděných $40 (~958 Kč).

Důvodů je několik…

  1. Neobjednal jsem ho ze stránek výrobce, ale z německého Amazonu. Tím jsem se vyhnul placení cla a šaškárny s celníky, ale zase jsem zaplatil marži prodejce.
  2. Použil jsem expresní doručení, které skutečně proběhlo do druhého dne.

Pokud ho budete objednávat, počítejte že v praxi vás to vyjde na podobnou částku, ± 200kč.

Použití

Zbývá ještě odpovědět jednu otázku: Opravdu je to užitečné, nebo se jedná o bazmek?

Jak si možná někteří všimli z data u generování klíčů, tento článek jsem začal psát v lednu a v době vydání je přelom dubna a května. Měl jsem tedy více než tři měsíce na otestování praktické použitelnosti Yubikey.

Musím říct, že jsem s ním docela spokojený. Ideální by asi bylo, kdyby se místo PIN používal otisk prstu, ale člověk nemůže mít všechno. Pokud chcete zlepšit zabezpečení ať již ve firmě, či v rámci zdravé „domácí paranoie“, určitě je to dobrá volba.

Zdroje informací

Další zdroje informací a články, ze kterých jsem vycházel při psaní:

Další články z této rubriky

Týden na ITBiz: Svět IT a burzy, umělá inteligence, Nvidia a outsourcing
Linuxové foto novinky: pozvolná evoluce
PCLinuxOS 2017.2 MATE - tak trochu zvláštní linuxová distribuce
Krátký pohled na Fedoru 25, Wayland a GNOME 3.22
Naprosto ničím nezajímavé Lubuntu 16.10

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.