Yubikey Neo po dvou letech

19. 11. 2015
Doba čtení: 4 minuty

Sdílet

Hardwarový token Yubikey Neo byl představen před dvěma lety, ale vývoj naštěstí neustal a od té doby přibyla řada zajímavých novinek. Token je nyní chráněn proti doinstalování či modifikaci appletů. Nabízí také podporu U2F autentizace a PIV, který je díky PKCS#11 použitelný v SSH nebo Firefoxu.

Před dvěma lety jsem psal článek o schopnostech tehdy nového hardwarového tokenu Yubikey Neo. Yubico s vývojem nepřestalo a novinky na čerstvě doručeném Neo tokenu jsou příjemné.

První rozdíl je, že Neo je zamčen proti doinstalování dalších javacard appletů nebo modifikaci existujících. Pro běžného uživatele to není až taková změna, je to spíše pozitivní bezpečnostní vlastnost. Pro potenciálního vývojáře javacard appletů je už ale velmi těžké sehnat odemknutý Yubikey, musí to řešit rovnou s NXP Semiconductors, kteří jsou dodavateli samotného čipu.

Druhý a hlavní rozdíl jsou nové aplikace nainstalované na Yubikey: U2F (Universal 2-Factor) a PIV (Personal Identity Verification) applet.


Universal 2-Factor (U2F)

U2F je relativně nový standard uskupení FIDO, který má pravděpodobně nejlepší šanci stát se nejrozšířenějším standardem na hardwarovou dvoufaktorovou autentizaci. Před ním jsou už jen mobilní aplikace typu Google Authenticator, které ale ukládají klíč do obyčejného filesystému – malware ho může zkopírovat.

Z uživatelského pohledu Neo U2F funguje tak, že zadáte heslo, vložíte Neo do USB slotu a zmáčknete tlačítko (kapacitní senzor), až vás aplikace vyzve. Důležitá vlastnost je, že fyzický dotek malware vyvolat nemůže.

Neo U2F autentizace je realizována eliptickou křivkou secp256r1 (neboli NIST-P256). Standard U2F specifikuje ještě vícero možností, takovou perličkou je biometrické U2F zařízení.

Z největších hráčů nabízí zatím možnost použít U2F pro autentizaci Google a GitHub, vyčerpávající seznam je potom zde. Samozřejmě můžete použít U2F ve vlastních aplikacích, webových i newebových – Yubico nabízí knihovny a klienty na Githubu. Dočasná nevýhoda je, že nativně U2F podporuje Chrome od verze 41, Firefox jen s doplňkem, i když U2F se už dostalo do Firefoxu Nightly.

Neo U2F interně komunikuje přes USB hidraw protokol, který je sice jednoduchý, ale z hlediska browserů dost nestandardní. To je zároveň důvod, proč implementace v browseru vyžaduje nativní kód. Přes NFC by U2F mělo být možné používat také na telefonu s NFC čtečkou, ale neměl jsem to možnost vyzkoušet.

Autentizace s Neo U2F funguje téměř „out-of-the-box“, jediný extra krok je instalace udev pravidel, aby běžný uživatel systému mohl přistupovat k tokenu přes hidraw protokol.

Trochu škoda je, že U2F nespecifikuje šifrování, ale jen autentizaci, takže například nepůjde použít na šifrování celého disku (třeba s LUKS).

Personal Identity Verification (PIV)

PIV standard má už 10 let, jeho autorem je NIST. Vzhledem k jeho stáří nepřekvapí, že jeho použití je spojeno s PKCS#11 rozhraní. Má to tu výhodu, že aplikace podporující PKCS#11 podporují také PIV applet – třeba SSH nebo Firefox. Na druhou stranu má některá historická omezení.

PIV applet umí uložit čtyři klíče, podporuje algoritmy RSA-2048 a eliptickou křivku secp256r1. Klíče lze použít na autentizaci, podepisování nebo šifrování. Z praktických důvodů je asi RSA užitečnější, protože ho bude podporovat více serverových protistran. V následujícím výpisu je jeden slot ze čtyř obsazen klíčem:

Slot 9a:
    Algorithm:    RSA2048
    Subject DN:   CN=SSH key
    Issuer DN:    CN=SSH key
    Fingerprint:  d113880b642fded57193a0e3dd29790bd19df0cff9c611ab9af52ca4408df252
    Not Before:   Nov 15 13:21:44 2015 GMT
    Not After:    Nov 14 13:21:44 2016 GMT
Slot 9c:    No data available.
Slot 9d:    No data available.
Slot 9e:    No data available.
PIN tries left:    8

Sloty mají přiřazený význam:

  • 9a – PIV autentizace
  • 9c – digitální podpis (vždy se kontroluje PIN)
  • 9d – správa klíčů
  • 9e – autentizace kartou (PIN se nikdy nekontroluje)

Díky podpoře standardu PIV lze přes PKCS#11 použít knihovnu OpenSC k autentizaci přes SSH. Zkoušel jsem také použití PIV appletu ve Firefoxu pro autentizaci klientským TLS certifikátem.

Výhoda použití PIV appletu pro SSH oproti použití OpenPGP appletu pro SSH je ta, že nemusíte nahrazovat ssh-agent gpg-agentem. Program gpg-agent sice funguje ve většině případů jako náhrada správně, ale má několik bugů – když ještě používáte klasické klíče ze souboru spolu s ssh-add, tak ten klíč ze souboru nelze z agenta odebrat.

Z historických omezení je patrné jedno – délka PIN a PUK je 4–8 ASCII znaků (přesněji bajtů). Vzhledem k omezení počtu pokusů na PIN a PUK nejdou všechny možnosti vyzkoušet hrubou silou. Stejně z toho má ale člověk takový divný pocit.

Druhý historický artefakt je spíše kosmetický – k SSH klíči si musíte vygenerovat certifikát, i když SSH potřebuje jen ten klíč a už ne certifikát. Ten ale jednou při inicializaci PIV klíče vygenerujete a pak se o to už nemusíte starat. Proto ve výpisu nahoře se uvádí not before a not after, i když to SSH vůbec nekontroluje.

Kromě PIN a PUK má PIV applet ještě třetí management key, ten je něčím jako hlavním klíčem, vždy je to 3DES klíč. Pokud se vyčerpají pokusy na PIN, lze jej odblokovat přes PUK. Pokud se vyčerpají pokusy na PUK, musí se PIV applet úplně resetovat, nebo použít právě management key na znovunastavení PIN a PUK. Je možné použít PIV applet i v módu, kde se používá jenom PIN, pokud vám to vyhovuje více. Na první pohled je to trocha komplikované, ale je to spíše otázka zvyku.

ict ve školství 24

Asi největší námahu představuje nastavení. Naštěstí Yubico se s nástroji dost snaží, a tak je k dispozici jak grafický yubikey-piv-manager, tak yubico-piv-tool pro příkazovou řádku.

Článek byl původně napsán pro blog sdružení CZ.NIC.

Autor článku

Autor textu pracuje jako programátor pro výzkum a vývoj v Laboratořích CZ.NIC, výzkumném a vývojovém centru správce české národní domény.