Hlavní navigace

Vlastnosti verzí tokenu Yubikey

5. 8. 2013
Doba čtení: 6 minut

Sdílet

Poslení díl našeho seriálu o smartkartách bude věnován dvěma tokenům Yubikey. Starší Yubikey Standard umí rozšiřovat existující autentizační protokoly založené na heslech pro dvoufaktorovou autentizaci. Novější Yubikey Neo obsahuje navíc bezkontaktní NFC interface a programovatelnou javacard část.

Odshora Yubikey Standard, Yubikey Neo

Yubikey Standard

Yubikey je token generující one-time-pad (OTP). Yubikey tokeny jsou navrženy tak, aby byly uživatelsky co nejpříjemnější. Ve výchozím módu nejsou potřeba ovladače, na klientské straně fungují jako USB HID klávesnice, tudíže není nutné řešit platformní kompatibilita. OTP kód se jednoduše vypíše stisknutím tlačítka na tokenu a operačnímu systému se to jeví, jako by byl zadán ze skutečné klávesnice.

Velká většina software k Yubikey je open source s dobrou dokumentací. Je to znát v porovnání s bizarními chybami, vyskytujícími se u proprietárních smartkaret. Předpřipravené balíčky můžeme docela často nalézt v různých linuxových distribucích. Např. podpora v Debianu wheezy je docela bohatá:

libapache2-mod-authn-yubikey - Yubikey authentication provider for Apache
libauth-yubikey-decrypter-perl - yubikey token output decryptor
libauth-yubikey-webclient-perl - Perl module to authenticate Yubikey against the Yubico Web API
libyubikey-dev - Yubikey OTP library development files
libyubikey0 - Yubikey OTP handling library runtime
python-pyhsm - Python code for talking to a Yubico YubiHSM hardware
yhsm-tools - Common files for YubiHSM applications
yhsm-validation-server - Validation server using YubiHSM
yhsm-yubikey-ksm - Yubikey Key Storage Module using YubiHSM
python-yubico - Python code for talking to Yubico YubiKeys
python-yubico-tools - Tools for Yubico YubiKeys
libykclient-dev - Yubikey client library development files
libykclient3 - Yubikey client library runtime
libpam-yubico - two-factor password and YubiKey OTP PAM module
libykpers-1-1 - Personalization tool for Yubikey OTP tokens
libykpers-1-dev - Personalization tool for Yubikey OTP tokens
yubikey-personalization - Personalization tool for Yubikey OTP tokens
yubikey-personalization-gui - Graphical personalization tool for YubiKey tokens
yubikey-server-c - Yubikey validation server
yubiserver - Yubikey OTP and HOTP/OATH Validation Server

Dvoufaktorová autentizace

Typický příklad použití je dvoufaktorová autentizace – jako druhý faktor k heslu. Pokud nechcete z nějakého důvodu používat SSH klíč, ale zároveň se bránit proti jednoduchému odposlechu keyloggerem nebo útoku hrubou sílou, je Yubikey ideální. Návod k použití se SSH a PAM naleznete ve fóru.

PAM modul k Yubikey je verzatilní a díky konfigurovatelnosti PAM stacku ho lze použít třeba na sudo. Další výskyty jsme „v divočině“ viděli u fór Yubico a přihlášení na MtGox.

Yubikey funguje tak, že má uvnitř uložen neextrahovatelný AES klíč, který se využívá ke generování OTP. Algoritmus je popsán v manuálu k Yubikey, sekce 6. AES klíč je předpogramován z výroby a lze si ho přepsat vlastním AES klíčem. Ověřování OTP je vykonáváno na serveru, buď si lze spustit vlastní yubiradius server nebo použít oveřovací server od Yubico (pokud jste si nepřeprogramovali AES klíč).

Předpogramovaný AES klíč je pro osobní použití v pořádku, ale v principu by mohlo Yubico generovat stejný OTP řetězec. Pro vysokoprofilové služby se tedy hodí klíč přeprogramovat.

Zajímavou perličkou je způsob mapování binárního výstupu OTP na znaky klávesnice. Protože scankódy z klávesnice se mění na znaky až operačním systémem, některé znaky se kvůli rozložení qwerty/qwertz/azerty vynechávají (dost starý historický artefakt). Pro rozložení dvorak tím pádem token nebude v režimu HID klávesnice fungovat.

Personalizace a módy operace

Yubikey má dva „sloty“, což znamená, že je možné v tokenu mít dva klíče, respektive dvě konfigurace. Druhá konfigurace se aktivuje delším podržením tlačítka na tokenu.

Kromě defaultního OTP módu lze token nakonfigurovat na generování OATH-HOTP a HMAC-SHA1 challenge-response módu. HMAC-SHA1 se neaktivuje tlačítkem, ale zápisem „challenge“ do tokenu přes USB HID protokol, na který token odpoví.

Posledním módem je zápis statického hesla – při každém stisku tokenu se jednoduše zopakuje jakoby napsání hesla na klávesnici. Ze zřejmých důvodů není mód statického hesla příliš bezpečný.

Detaily a další konfigurační možnosti viz dokumentace. K Yubikey existuje kromě command-line konfiguračních utilit i přehledný klikací nástroj:


Yubikey konfigurační GUI

Yubikey Neo

Yubikey Neo má všechny vymoženosti předchůdce Yubikey Standard a navíc:

  • bezkontaktní NFC Type 4 tag interface
  • předinstalována OpenPGP aplikace (beta)
  • je to javacard s možností doinstalace vlastních aplikací

Primárním účelem NFC interface je možnost použít OTP jako dvoufaktorovou autentizaci s mobilním NFC-podporujícím zařízením. Výmluvnější příklad než video na Yubico stránkách zobrazuje přihlašování k službě LastPass.

NDEF zpráva, generovaná tokenem, má tvar URL prefix + vygenerované OTP. URL prefix lze nakonfigurovat libovolně personalizačními utilitami. Sérii APDU na přečtení NDEF zprávy jsme si ukázali na začátku v sekci o APDU.

V případě Androidu bývá výchozí reakce na NDEF intent obsahující URL otevřít dané URL v prohlížeči (pokud vím, nevyžaduje se potvrzení).

Yubikey Neo umí kromě módu USB HID i CCID mód, tj. lze ho překonfigurovat, aby se choval jako smartkarta. V CCID módu je možné přistupovat k dalším aplikacím jako je předinstalované OpenPGPcard, instalovat javacard aplikace nebo přistupovat přímo k funkcem nakonfigurovaných na slotech (OTP, HMAC…).

Důležitá poznámka: APDU příkazy, které lze tokenu poslat přes USB CCID interface, mu lze stejně poslat i přes NFC interface.

OpenPGPcard aplikace

Rozběhání podle návodu je celkem rychlé, spočívá v povolení CCID interface a vygenerování PGP klíčů na kartě. Celkově se podle OpenPGPcard specifikace vygenerují 3 (pod)klíče – šifrovací, podpisovací a autentizační. Existující PGP/GPG klíče importovat nelze.

Aplikace je zatím v beta fázi, tokeny vyrobené před určitým datem mají bug, že nelze správně odblokovat PIN, pokud překročíte počet možných zadání nesprávného PINu. PIN je alfanumerický a může být celkem dlouhý – 127 znaků.

Opravit zmíněný bug lze nahráním nové verze OpenPGPcard aplikace, ale postup je netriviální. K OpenPGPcard aplikaci existují zdrojáky, jako k většině Yubico software. Je tedy teoreticky možné si aplikaci upravit tak, aby bylo možné importovat existující klíče.

GnuPG má mimochodem zvláštní vlastnost, gpg-agent –enable-ssh-support dokáže emulovat SSH agenta a mělo by tak jít použít token na přihlašování k SSH.

OpenPGP interface funguje také přes NFC, dokonce lze přes NFC i generovat klíče. Trochu „magická“ je možná skutečnost, že na to dostane přes NFC dost energie. Ovšem prakticky používat OpenPGP via NFC není nejlepší nápad – i když klíče neopustí token, zadaný PIN v APDU letí vzduchem nešifrovaně.

GlobalPlatform „balíčkovač“

GlobalPlatform je další smartcard specifikace rozsahu větší bichle. Její užitečnost spočívá ve standardizaci způsobu instalace a manipulace s aplikacemi na javacard smartkartách.

Přes GlobalPlatform jsme v předchozí sekci nahráli opravenou verzi OpenPGPcard aplikace. Podobně lze kupříkladu odinstalovat NFC NDEF aplikaci nebo přidat úplně vlastní aplikaci. Pro ostré používání se hodí možnost přeprogramování zamknout (aby vám někdo přes NFC nevyměnil aplikace u tokenu v kapse).

Samotné OTP jádro (to, co bylo i v původním Yubikey standard), pokud vím, přeprogramovat nelze.

Přístup HMAC/OTP k funkcím tokenu přes APDU

Předinstalovaná aplikace s AID A0000005272001 slouží k „lowlevel“ přístupu k funkcím tokenu. Například, pokud se nastaví slot 2 na funkci HMAC-SHA1 a s klíčem 30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f 40 41 42 43, můžeme zkusit testovací vektor pro HMAC-SHA posláním challenge „Sample #2“ (hexa 53 61 6D 70 6C 65 20 23 32):


% opensc-tool -s "00 A4 04 00 07 A0 00 00 05 27 20 01" -s "00 01 38 00 09 53 61 6D 70 6C 65 20 23 32"
Using reader with a card: OMNIKEY CardMan 5x21 (OKCM0071311121109097785172570995) 00 01
Sending: 00 A4 04 00 07 A0 00 00 05 27 20 01
Received (SW1=0x90, SW2=0x00):
03 01 00 03 87 07 02 00 00 00 ..........
Sending: 00 01 38 00 09 53 61 6D 70 6C 65 20 23 32
Received (SW1=0x90, SW2=0x00):
09 22 D3 40 5F AA 3D 19 4F 82 A4 58 30 73 7D 5C .".@_.=.O..X0s}\
C6 C7 5D 24                                     ..]$

První APDU s INS 0×A4 vybere aplikaci, druhé APDU s INS 0×01 už volá interní funkci tokenu. Výběr funkce se provede parametrem P1, zde 0×38 značí HMAC-SHA1 ze slotu 2, 0×30 by byl HMAC-SHA1 ze slotu 1. Tyto „magické konstanty“ pochází z hlavičkového souboru ykdef.h, kde se nacházejí i další funkce.

Tato část ještě není oficiálně zdokumentována, dokumentace se postupně ještě dopisuje.

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.