}w!"#$%&'()+,-./012345<ya



Podobné dokumenty
Programové vybavení OKsmart pro využití čipových karet

NFC komunikace ve Windows Phone

2015 GEOVAP, spol. s r. o. Všechna práva vyhrazena.

NÁVOD K POUŽÍVÁNÍ DIGITÁLNÍ PENĚŽENKY MASTERCARD MOBILE

eidas odstartuje Německo Jaromír Talíř

Instalace a od-instalace aplikace Google / Android

NFC Marketing. Nejmodernější způsob On-Demand poskytování obsahu do mobilních telefonů.

Nastavení telefonu Nokia Lumia 925

Connection Manager - Uživatelská příručka

T-Mobile Internet. Manager. pro Mac OS X NÁVOD PRO UŽIVATELE

Mobilní skener Eye-Fi Stručná uživatelská příručka

1. Úvod. 2. CryptoPlus jak začít. 2.1 HW a SW předpoklady. 2.2 Licenční ujednání a omezení. 2.3 Jazyková podpora. Požadavky na HW.

TELEFONNí LiNKA PREMiUM PRŮVODCE APLIKACí T UC-ONE - PC

Nadpis. Nadpis 2. Božetěchova 2, Brno

2015 GEOVAP, spol. s r. o. Všechna práva vyhrazena.

1. DATOVÉ SCHRÁNKY OBECNÝ PŘÍSTUP K DATOVÉ SCHRÁNCE DATOVÉ ZPRÁVY... 3

Motorola Phone Tools. Začínáme

Kontakty Upravení kontaktu - změna údájů Přidání fotky ke kontaktu Založení nového kontaktu Kopírování ze SIM karty do telefonu Základní nastavení

Mobilní komunikace a bezpečnost. Edward Plch, System4u

Uživatelská příručka T UC-One pro windows

Nastavení telefonu Samsung Galaxy Nexus

Tabletová aplikace. Uživatelský manuál

Nastavení telefonu Windows Phone 8S by HTC

CASE MOBILE MOBIL JAKO AUTENTIZAČNÍ TOKEN

Maturitní projekt do IVT Pavel Doleček

Národní elektronický nástroj. Import profilu zadavatele do NEN

Nastavení telefonu Huawei Ascend Y300

Nastavení tabletu Prestigio MultiTab 4 ULTRA QUAD 8.0 3G

Služby a nastavení Reset přístroje do továrního nastavení Seznam pevné volby Identifikace volajícího (CLIP/CLIR) Pevná volba Aplikace Vyhledání a

Nastavení telefonu Samsung S5570 Galaxy Mini

Nastavení telefonu Samsung I9300 Galaxy S III

Mobilní skladová evidence v QI

Trendy v mobilním placení

Příručka pro uživatele ČSOB CEB s čipovou kartou v operačním systému Mac OS X

RFID + mobilní technologie = NFC. Ing. Tomáš Dulík, Ph.D., FAI UTB ve Zlíně dulik@fai.utb.cz

Nastavení telefonu Sony Xperia L

Základní nastavení telefonu Vložení paměťové karty Zapnutí telefonu a PIN Vložení SIM karty SMS a MMS Nastavení střediska zpráv Nastavení MMS

Manuál PVU zadavatel Platnost pro elektronický nástroj X-EN verze 4 a novější

Volání Hlasitý hovor Zobrazení kontaktů při volání Nastavení hlasitosti hovoru Zobrazení klávesnice při volání Přidržení hovoru Číslo hlasové

OKsmart a správa karet v systému OKbase

MANUÁL PRO PLATEBNÍ KARTU V MOBILU

Terminál mypos. Obecné informace o terminálu. Aktivace zařízení KASA FIK mypos

Nastavení tabletu Samsung P5100 Galaxy Tab

Nastavení telefonu HTC One S

1. Základní nastavení tabletu Vložení SIM a paměťové karty Zapnutí tabletu a PIN. 2. Kontakty. 3. Volání

Dispatcher PDA Dokumentace

ZÁKLADNÍ POKYNY PRO INSTALACI PROID+ Z INSTALAČNÍHO MÉDIA

Nastavení telefonu Nokia 113

Nastavení telefonu Sony Ericsson Xperia Arc S

TÉMATICKÝ OKRUH Softwarové inženýrství

TELEFONNí LiNKA PREMiUM PRŮVODCE NASTAVENíM SLuŽBY MEET-ME KONFERENCE

Nastavení telefonu Alcatel One Touch IDOL

Nastavení telefonu Nokia N9

Nastavení tabletu Huawei MediaPad 7 Lite

MANUÁL MOBILNÍ APLIKACE GOLEM PRO OPERAČNÍ SYSTÉM ANDROID 4.X A VYŠŠÍ

Návod pro uživatele DS150E. Dangerfield May 2009 V3.0 Delphi PSS

Specifikace požadavků. POHODA Web Interface. Verze 1.0. Datum: Autor: Ondřej Šrámek

2015 GEOVAP, spol. s r. o. Všechna práva vyhrazena.

Nastavení tabletu Samsung P605 Galaxy Note 10.1 (2014 edition)

Manuál Multitag čtečka

3. Vložíte baterku. 4.

1. Podmínky chodu aplikace

Základní nastavení telefonu Vložení paměťové karty Zapnutí telefonu a PIN Vložení SIM karty SMS a MMS Nastavení střediska zpráv Nastavení MMS

Nastavení telefonu Sony Xperia E

Nejlepší zabezpečení chytrých telefonů

Extrémně silné zabezpečení mobilního přístupu do sítě.

Relační vrstva SMB-Síťový komunikační protokol aplikační vrstvy, který slouží ke sdílenému přístupu k souborům, tiskárnám, sériovým portům.

Nastavení telefonu Nokia Asha 300

Návod pro Samsung Galaxy Tab S2 9.7 LTE (T815)

Konfigurace pracovní stanice pro ISOP-Centrum verze

Instalace programu ProGEO

Plzeňská karta v praxi

Nastavení telefonu LG E400 Optimus L3

Manuál pro majitele Korporátní karty. Manuál pro majitele Korporátní karty

1 Princip fungování Aplikace Šimon. 2 Instalace programu do telefonu

EXTRAKT z české technické normy

Aplikace Založení účtu Microsoft a stažení aplikace Internet Nastavení u Připojení/odpojení Wi-Fi sítě Nastavení internetu v zahraničí

T-Mobile Internet. Manager. pro Windows NÁVOD PRO UŽIVATELE

ČSOB Business Connector

1. Základní nastavení telefonu Vložení SIM a paměťové karty Zapnutí telefonu a PIN. 2. Kontakty. 3. Volání

Internetové služby isenzor

Nastavení telefonu Samsung N9005 Galaxy Note 3

Nastavení telefonu T-Mobile MDA Compact III

BRICSCAD V15. Licencování

Příručka pro uživatele ČSOB InternetBanking 24 a ČSOB BusinessBanking 24 Online s čipovou kartou

Aplikace Vyhledání a stažení aplikace Založení účtu v Google Play Internet Nastavení u Zap./Vyp. přístupového bodu Připojení a odpojení wi-fi

Bezdrátové sítě Wi-Fi Původním cíl: Dnes

Příručka pro uživatele ČSOB InternetBanking 24 a ČSOB BusinessBanking 24 Online s čipovou kartou

Příručka pro uživatele ČSOB InternetBanking 24 a ČSOB BusinessBanking 24 Online s čipovou kartou v operačním systému Mac OS X

Návod ke službě IPTV

Aplikace Vyhledání a stažení aplikace Založení BlackBerry ID Internet Nastavení u Zap./Vyp. přístupového bodu Přihlášení do Wi-Fi sítě

CS OTE. Dokumentace pro externí uživatele

Nastavení telefonu HTC Desire HD

Nastavení telefonu Samsung S5220 Star 3

SEMESTRÁLNÍ PROJEKT Y38PRO

Transkript:

Masarykova univerzita Fakulta informatiky }w!"#$%&'()+,-./012345<ya Možnosti využití technologie NFC na mobilních platformách založených na OS Android Bakalářská práce Andrej Šmigala Brno, jaro 2013

Prohlášení Prohlašuji, že tato bakalářská práce je mým původním autorským dílem, které jsem vypracoval samostatně. Všechny zdroje, prameny a literaturu, které jsem při vypracování používal nebo z nich čerpal, v práci řádně cituji s uvedením úplného odkazu na příslušný zdroj. Andrej Šmigala Vedoucí práce: Ing. Mgr. Zdeněk Říha, Ph.D. ii

Poděkování Chtěl bych zde poděkovat svému vedoucímu Ing. Mgr. Zdeňku Říhovi, Ph.D. za podporu při vedení této práce. iii

Shrnutí Cílem práce bylo seznámit se s možnostmi využití technologie Near Field Communication v mobilním operačním systému Android a diskutovat podporu pro jednotlivé části NFC standardu. Na základě těchto poznatků byla v praktické části implementována aplikace, využívající prostředky pro použití NFC poskytované touto platformou. iv

Klíčová slova NFC, Android, Near Field Communication, NFC tag, Secure Element, Smart Card, čipová karta v

Obsah 1 Úvod................................ 2 2 Technologie NFC......................... 4 2.1 Komunikace v režimu čtení a zápisu............. 5 2.2 Komunikace v režimu peer-to-peer.............. 5 2.3 Režim emulace čipových karet................ 6 2.4 Formát NDEF......................... 6 2.5 Shrnutí............................ 7 3 Podpora NFC technologií na platformě Android...... 8 3.1 Komunikace s NFC tagy................... 8 3.1.1 Mechanismus zpracování tagu systémem (tag dispatch)....................... 9 3.1.2 Komunikace s tagy................. 10 3.1.3 Zpracování tagů nesoucích NDEF zprávy.... 13 3.1.3.1 Převod NDEF zpráv na Intenty.... 13 3.1.3.2 Určení aplikace pro zpracování tagu. 14 3.1.4 Zpracování tagu běžící aplikací.......... 14 3.2 Komunikace mezi dvěma zařízeními............. 15 3.2.1 Android Beam................... 15 3.3 Emulace karet......................... 17 3.3.1 Emulace pomocí Secure Elementu........ 17 3.3.2 Softwarová emulace................ 19 3.3.3 Použití v aplikaci Google Wallet......... 20 3.4 Shrnutí............................ 21 4 Praktická část........................... 22 4.1 TagInfoReader......................... 22 4.2 BeamAnything........................ 24 4.3 Instalace............................ 25 5 Závěr................................ 26 1

1 Úvod S rostoucím rozšířením mobilních zařízení vznikají nové potřeby pro bezdrátovou komunikaci. Současné technologie, jako například Wi-Fi či Bluetooth, umožňují připojení k počítačovým sítím či k jiným zařízením na poměrně velkou vzdálenost v řádu jednotek až stovek metrů. S tím, jak se mobilní zařízení vyvíjejí z prostředků pro uskutečňování telefonních hovorů v nedílnou součást osobního života, vzniká potřeba zajištění komunikace těchto zařízení na mnohem osobnější úrovni. Technologie NFC umožňuje zařízením komunikovat spolu na velmi krátkou vzdálenost, v řádu jednotek centimetrů. Aktivování komunikace mezi dvěma zařízeními tedy po uživatelích vyžaduje, aby tato zařízení přiblížili k sobě. Tato vazba na fyzickou akci přináší uživateli jasnou představu, kdy jsou a kdy nejsou jeho data přenášena, přičemž ale odpadá nutnost skutečného fyzického kontaktu a nepříjemnosti s tím spojené. Motivací pro zavedení NFC je několik. Pravděpodobně nejsilnější je využití NFC pro bezkontaktní platby, kdy uživatel při placení pouze přiloží kartu k terminálu. S tím také souvisí emulace karet, kdy informace o platebních kartách jsou bezpečně uloženy v mobilním zařízení, které je pak použito při platbách místo karty. Dalším příklady využití je zajištění přístupu do budov pomocí bezdrátových identifikačních karet, jednoduchý přenos dat mezi dvěma zařízeními nebo také vkládání informací (například elektronických vizitek či odkazů na webové stránky) do malých čipů, tzv. NFC tagů, které pak mohou být umístěny na fyzické objekty, jako například papírové vizitky či reklamní plakáty. Systém Android je v současné době nejrozšířenějším mobilním operačním systémem. Díky jeho otevřenosti existuje na trhu mnoho zařízení různých výrobců a cenových kategorií. Vzhledem ke vzrůstající oblíbenosti NFC do něj byla přidána i podpora pro tyto technologie a mnoho výrobců již uvedlo zařízení s hardwarem potřebným pro komunikaci skrz NFC. V práci si kladu za cíl seznámit čtenáře s možnostmi použití technologie NFC na platformě Android, a to nad rámec informací uvedených v oficiální dokumentaci. Cílem praktické části je potom vytvořit 2

1. Úvod aplikaci, která využívá API poskytované platformou Android pro komunikaci s NFC tagy a také komunikaci v režimu peer-to-peer. V kapitole Technologie NFC uvádím čtenáře do problematiky NFC, popisuji základní principy fungování a definované operační módy. V následující kapitole Podpora NFC technologií na platformě Android poté detailně rozebírám implementaci standardu NFC na platformě Android. V kapitole Praktická část shrnuji svou práci při implementaci praktické části. 3

2 Technologie NFC Near Field Communication (NFC) je technologie pro komunikaci mezi dvěma zařízeními na velmi krátkou vzdálenost. Jedná se o rozšíření a kombinaci několika existujících standardů pro bezdrátovou komunikaci[29]. Technologie NFC byly původně vyvinuty společnostmi Philips a Sony, později byly přijaty organizacemi ISO/IEC jako standardy. V roce 2004 bylo společnostmi Sony, Philips a Nokia založeno NFC Forum které zajišťuje standardizaci souvisejících technologií a stará se o propagaci NFC[4]. Fyzické charakteristiky komunikace jsou specifikovány ve standardech ISO/IEC 18092 (NFCIP-1) a ISO/IEC 21481 / ECMA-352 (NFCIP-2). Komunikace probíhá pomocí elektromagnetických vln na frekvenci 13.56 MHz[4], tedy na jedné z frekvencí využívaných technologií RFID. Data jsou přenášena na maximální vzdálenost přibližně 10 cm, při maximální rychlosti přenosu 424 kb/s. Jednou ze základních charakteristik NFC je implicitní párování, kdy vzhledem k nízké vzdálenosti přenosu, a tedy nutnosti komunikující zařízení přiblížit fyzicky k sobě, odpadá nutnost ručního nastavování a potvrzování spojení. Ze stejného důvodu je také zajištěna implicitní bezpečnost komunikace, protože odposlouchávání přenosu je vzhledem k nízkému dosahu velmi obtížné[4]. NFC zařízení jsou rozdělena na dva druhy: aktivní a pasivní. Aktivní zařízení jsou vybavena anténou a vlastním zdrojem energie a generují elektromagnetické pole. Mezi aktivní zařízení patří NFC čtečky a mobilní NFC zařízení. Pasivní zařízení také obsahuje anténu, nemá však vlastní zdroj energie, tu získává pomocí elektromagnetické indukce v poli generovaném aktivním zařízením. Pasivní NFC zařízení se nazývají NFC tagy. NFC definuje tři režimy komunikace: režim čtení a zápisu pro komunikaci mezi aktivní čtečkou a pasivním tagem, režim peer-to-peer pro komunikaci mezi dvěma aktivními zařízeními a režim emulace karet pro emulaci pasivního tagu aktivním zařízením. 4

2.1 Komunikace v režimu čtení a zápisu 2. Technologie NFC Komunikace v režimu čtení a zápisu probíhá mezi aktivním čtečkou a pasivním tagem. Při komunikaci v tomto módu čte aktivní zařízení data uložená na pasivním tagu, případně do něj data zapisuje. NFC Forum definuje čtyři technologie pro NFC tagy, Type 1-4[18]. Při čtení a zápisu těchto tagů se využívá formát NDEF specifikovaný NFC Forem[11]. Tabulka 2.1 obsahuje přehled typů tagů, standard na kterém jsou založeny, maximální velikost paměti a zda je možné paměť zamknout proti zápisu. Type 1 Type 2 Type 3 Type 4 Standard ISO 14443 A ISO 14443 A JIS X6319-4 ISO 14443 A/B Paměť až 2 kb až 2 kb až 1 MB až 32 kb Zamknutí Ano Ano Při výrobě Při výrobě Příklad Topaz Ultralight FeliCa DESFire Tabulka 2.1: Typy tagů definované NFC Forem Vzhledem k oblíbenosti jiných RFID technologií podporují některá NFC zařízení i další typy tagů, nespecifikovaných NFC Forem, například populární Mifare Classic společnosti NXP. Při čtení a zápisu takových tagů není využíván formát NDEF, ale komunikační protokol podle použité technologie[4]. 2.2 Komunikace v režimu peer-to-peer Při komunikaci v režimu peer-to-peer spolu komunikují dvě aktivní zařízení. Elektromagnetické pole generuje to zařízení, které v danou chvíli posílá data. Pro komunikaci v režimu peer-to-peer definuje NFC Forum protokol LLCP (Logical Link Control Protocol), který přibližně odpovídá spojové vrstvě modelu OSI[17]. Služby poskytované LLCP zahrnují aktivaci, sledování a deaktivaci spojení, asynchronní komunikace a multiplexování[4]. LLCP také poskytuje jak spojově tak nespojově orientovaný přenos[17]. 5

2.3 Režim emulace čipových karet 2. Technologie NFC V režimu emulace tagů vystupuje aktivní zařízení v roli pasivního a emuluje činnost čipové karty podle specifikace ISO/IEC 14443. S touto emulovanou kartou pak komunikuje jiné NFC zařízení jako při režimu čtení a zápisu. Při emulaci karet je využíván takzvaný Secure Element (SE). SE je bezpečné výpočetní prostředí pro běh aplikací[19] a má obvykle formu čipu s integrovanou pamětí, procesorem, rozhraním pro komunikaci a dalšími komponenty, jako například šifrovacím koprocesorem[6]. SE bývá zabezpečeny proti získání dat analýzou čipu či jeho rozebráním. Pro využití v mobilních zařízeních mohou být použity SE integrované v UICC (čipová karta známá spíše pod názvem SIM), SE na paměťových kartách (například microsd) a SE integrované přímo v mobilním zařízení[4]. Pro emulaci karty je nejprve do SE přenesena aplikace pro danou kartu. Při samotné emulaci je pak SE propojen přímo s NFC kontrolérem v mobilním zařízení a externí NFC zařízení tedy komunikuje přímo s SE, jako by se jednalo o běžnou bezkontaktní čipovou kartu. 2.4 Formát NDEF NDEF (NFC Data Exchange Format) je formát specifikovaný NFC fórem pro přenos dat mezi NFC zařízeními. NDEF zpráva (NDEF Message) sestává z posloupnosti jednoho či více NDEF záznamů (NDEF Record). NDEF záznam nese informaci o typu dat, jejich délce a data samotná. Struktura záznamu je znázorněna v tabulce 2.2. První byte záznamu obsahuje hlavičku, která sestává z položek Message Begin a Message End označujících, zda se jedná o první či poslední záznam zprávy, Chunk Flag označující, že se jedná o fragment záznamu, Short Record označující, že data mají délku menší než 255 bytů, ID Length Present označující, zda záznam obsahuje nepovinný identifikátor, a Type Name Format, specifikující formát typu dat. Položky Type length, Data length a ID length určují délku příslušných položek v bytech. Položka ID obsahuje nepovinný identifikátor dat, který mohou aplikace použít při zpracování dat z NDEF zpráv. Položka Type určuje typ dat v záznamu. Formát položky Type je určen hodnotou TNF v hlavičce. Hodnoty TNF jsou specifikovány 6

2. Technologie NFC MB ME CF SR IL TNF Type length (1 byte) Data length (4 byty) ID length (1 byte) Type (proměnná délka) ID (proměnná délka) Data (proměnná délka) Tabulka 2.2: Formát NDEF záznamu[11] v [11]. Nejpoužívanějšími hodnotami jsou Well-Know-Type, kdy je typ dat specifikován ve zkrácené podobě[12] a Media-type, kdy je typ dat specifikován jako MIME Content-Type a další. 2.5 Shrnutí Technologie NFC umožňuje dvěma zařízením bezdrátově komunikovat na krátkou vzdálenost s poměrně malou rychlostí přenosu. Výhodou NFC oproti jiným bezdrátovým technologiím je jednoduché párování a relativně vysoká implicitní bezpečnost. NFC zařízení mohou být buď aktivní nebo pasivní. Komunikace pomocí NFC může probíhat ve třech módech, čtení a zápis, peer-to-peer a emulace tagů. V současné době jsou NFC technologie standardizovány sdružením NFC Forum, které mimo jiné specifikuje komunikační protokoly, formáty dat a typy tagů. 7

3 Podpora NFC technologií na platformě Android Platforma Android získala podporu pro NFC poprvé ve verzi 2.3 z konce roku 2010. Tato podpora však byla omezena pouze na čtení NDEF zpráv z pasivních tagů. Ve verzi 2.3.4 z poloviny roku 2011 byla přidána podpora pro režim čtení a zápisu a také pro jednosměrné zasílání NDEF zpráv v režimu peer-to-peer. Ve verzi 4.0 byla zavedena technologie Android Beam pro snadnou výměnu dat mezi dvěma zařízeními. NFC zařízení se systémem Android obsahují NFC čip (obvykle s integrovaným Secure Elementem) a anténu, která bývá většinou součástí zadního krytu či je integrována do vyměnitelné baterie. NFC čip je aktivní pouze v případě, že je zařízení probuzeno ze spánku, tedy má zapnutou obrazovku, a není zamčeno, tedy uživatel zadal po probuzení svůj PIN, heslo nebo jiným způsobem zařízení odemkl[27]. To zabraňuje nechtěnému navázání spojení s NFC zařízeními v dosahu (ať již náhodou uživatelem, či záměrně útočníkem) a také snižuje spotřebu energie. 3.1 Komunikace s NFC tagy Komunikace s NFC tagem nastává, když uživatel přiblíží své zařízení k pasivním NFC tagu. Systém tento tag detekuje a provede iniciální připojení v závislosti na použité technologii tagu. Tato situace se nazývá objevení tagu (tag discovery). Pro každý objevený tag vytvoří systém objekt typu Tag, pokusí se nalézt vhodnou aplikaci pro jeho zpracování, a tento objekt jí předá. V Objektu typu Tag jsou uloženy informace o objeveném tagu, zejména seznam technologií které tento tag podporuje, uložený jako seznam kvalifikovaných názvů tříd jež implementují podporu těchto technologií. 8

3. Podpora NFC technologií na platformě Android 3.1.1 Mechanismus zpracování tagu systémem (tag dispatch) Objevení tagu systém oznámí aplikacím standardním způsobem platformy Android, tedy vytvořením tzv. Intentu[26]. Intenty jsou systémové zprávy které Android používá pro komunikaci mezi různými částmi systému, včetně aplikací třetích stran. Intent sestává z akce, dat, kategorie a dalších parametrů. Aplikace se mohou přihlásit ke zpracování Intentu s určitými parametry pomocí tzv. Intent Filteru. Po vytvoření Intentu systém nalezne aplikaci, jejíž Intent Filter odpovídá parametrům daného Intentu, spustí ji, a Intent jí doručí. V případě, že má uživatel nainstalováno více aplikací, které mohou daný Intent zpracovat, systém zobrazí dialog pro výběr požadované aplikace. Pro Intent informující o nově objeveném tagu definuje Android tři akce: ACTION_NDEF_DISCOVERED, ACTION_TECH_DISCOVERED a ACTION_ TAG_DISCOVERED. Akce ACTION_NDEF_DISCOVERED Intent s touto akcí Android vyvolá v případě, že objevený tag nese NDEF zprávu. Systém je schopen přečíst NDEF zprávy z tagů, definovaných NFC Forem (Tag Type 1-4), a v závislosti na použitém NFC čipu i z jiných typů tagů, například Mifare Classic.Před vytvořením Intentu Android přečte NDEF zprávu z tagu, zpracuje NDEF záznamy v ní obsažené a nastaví parametry Intentu na vhodné hodnoty. Detaily jsou diskutovány v části Zpracování tagů nesoucích NDEF zprávy. Pokud žádná aplikace nedefinuje Intent Filter odpovídající akci ACTION_NDEF_DISCOVERED nebo pokud systém nedokáže zpracovat data v tagu obsažená, přejde k vytvoření Intentu s akcí ACTION_TECH_ DISCOVERED. Akce ACTION_TECH_DISCOVERED Intent s touto akcí Android vyvolá v případě, kdy objevený tag nenese NDEF zprávu, nebo pokud předchozí vyvolání Intentu s akcí ACTION_NDEF_DISCOVERED nezachytila žádná aplikace. Tato akce umožňuje aplikacím reagovat na objevení NFC tagu specifické technologie. Pro tyto účely aplikace definuje jeden či více takzvaný Tech Listů. Tech List je seznam technologií, které musí tag podporovat, aby byl Intent zachycen Intent Filterem. Tech List tedy rozšiřuje Intent Filter v tom smyslu, že při doručování Intentu systém porovná každý definovaný Tech List se seznamem 9

3. Podpora NFC technologií na platformě Android podporovaných technologií objeveného tagu, a pokud je první striktní podmnožinou druhého, považuje Intent Filter za vyhovující. Vytvořením více tech-listů mohou aplikace přesně určit technologie tagů, na jejichž objevení budou reagovat. Pokud žádná aplikace nedefinuje Intent Filter odpovídající této akci, případně žádná aplikace nedefinuje Tech List odpovídající technologiím objeveného tagu, přejde systém k vytvoření Intentu s akcí ACTION_TAG_DISCOVERED. Akce ACTION_TAG_DISCOVERED Intent s touto akcí systém vyvolá v případě, že neexistuje žádná aplikace která by zpracovala Intent s předchozími dvěma konkrétnějšími akcemi. Vzhledem k povaze uživatelovy interakce s NFC tagy, tedy přiložení zařízení k danému tagu, není žádoucí aby byl uživateli zobrazen dialog pro výběr aplikace pro zpracování Intentu. Doporučuje se proto vytvářet Intent Filtery (případně Tech Listy) s co nejkonkrétnější specifikací tagů na které aplikace reaguje. Tímto se může částečně (ovšem ne úplně) předejít situaci, kdy by stejný tag byly schopny zpracovat dvě různé aplikace, což by narušilo uživatelův komfort při používání tagů. 3.1.2 Komunikace s tagy Princip komunikace s tagem, tedy výměny dat mezi tagem a zařízením, závisí na technologii daného tagu. Systém Android poskytuje API pro jednoduchou práci s tagy obsahujícími NDEF zprávy, API pro komunikaci s ostatními tagy je však dosti omezené. Tato část se zabývá komunikací s obecnými tagy, zpracování tagů nesoucích NDEF zprávy je objasněno v části Zpracování tagů nesoucích NDEF zprávy. Pro komunikaci s tagem musí aplikace oznámit záměr reagovat na nově objevené tagy. Toho docílí deklarováním Intent Filteru který odpovídá Intentu s akcí ACTION_TECH_DISCOVERED nebo ACTION_TAG_ DISCOVERED. Po obdržení jednoho z těchto Intentů z něj aplikace standardní cestou získá objekt třídy Tag. Z tohoto objektu pomocí metody gettechlist() získá seznam technologií, které jsou tagem podporovány. Každá technologie je reprezentována plně kvalifikovaným 10

3. Podpora NFC technologií na platformě Android názvem třídy, která tuto technologie implementuje[25].tyto třídy jsou součástí balíku android.nfc.tech a každá z nich implementuje rozhraní TagTechnology a zároveň definuje statickou metodu get(tag), která vrací instanci dané třídy. Většina tříd poskytuje metodu transceve(byte[]) : byte[]. Tato metoda pošle tagu pole bytů a vrátí pole bytů jako odpověď. Pro většinu technologií není v Android API obsažena implementace komunikačního protokolu, aplikace, které chtějí z tagu číst data nebo s ním jiným způsobem komunikovat, musejí protokol implementovat samy. NFC-A Podpora pro tagy NFC-A standardu ISO 14443-3A je implementována ve třídě NfcA. Kromě metody transceive tato třída definuje metody getatqa() : byte[] a getsak() : short, které vracejí hodnoty získané z tagu při jeho objevení. Tyto dvě metody neprovádí vstupně-výstupní operace a proto neblokují. NFC-B Podpora pro tagy NFC-B standardu ISO 14443-3B je implementována ve třídě NfcB. Kromě metody transceive tato třída definuje metody getprotocolinfo() : byte[] a getapplicationdata() : byte[] které vracejí hodnoty získané z tagu při jeho objevení. Tyto dvě metody neprovádí vstupně-výstupní operace a proto neblokují. NFC-F Podpora pro tagy NFC-F standardu JIS 6319-4 je implementována ve třídě NfcF. Kromě metody transceive tato třída definuje metody getmanufacturer() : byte[] a getsystemcode() : byte[] které vracejí hodnoty získané z tagu při jeho objevení. Tyto dvě metody neprovádí vstupně-výstupní operace a proto neblokují. NFC-V Podpora pro tagy NFC-V standardu ISO 15693 je implementována ve třídě NfcV. Kromě metody transceive tato třída definuje metody getresponseflags() : byte a getdsfid() : byte které vracejí hodnoty získané z tagu při jeho objevení. Tyto dvě metody neprovádí vstupně-výstupní operace a proto neblokují. IsoDep Třída IsoDep sdružuje implementaci obou typů tagů standardu ISO 14443. Při přenášení APDU zpráv pomocí metody transceive 11

3. Podpora NFC technologií na platformě Android jsou data automaticky fragmentována podle potřeby. Dále třída implementuje metody gethilayerresponse() : byte[], která vrací data získaná při objevení tagu typu NFC-B, a gethistoricalbytes() : byte[], která vrací data získaná při objevení tagu typu NFC-A. Mifare Classic Podpora pro tagy typu Mifare Classic je implementována ve třídě MifareClassic. Volání metody transceive na této objektech této třídy je ekvivalentní s voláním na objektech třídy NfcA (tagy Mifare Classic splňují specifikaci NFC-A). Kromě metody transceive však tato třída obsahuje i několik metod pro snadné čtení a zápis dat po blocích a sektorech. Zároveň definuje nejčastější klíče používané pro přístup ke kartám Mifare Classic. Implementace této třídy není na zařízení se systémem Android povinná. Zařízení s NFC čipy od firmy NXP (například Nexus 7, Galaxy Nexus, Nexus S, Samsung Galaxy S3) tuto třídu obsahují, některá novější zařízení s čipy od jiných firem (například Nexus 4 a Nexus 10 s čipy od firmy Broadcomm) tagy Mifare Classic nepodporují[1] a tedy ani neobsahují implementaci této třídy. Mifare Ultralight Podpora pro tagy typu Mifare Ultralight je implementována ve třídě MifareUltralight. Pro metodu transceive platí totéž co u třídy MifareClassic. Třída MifareUltralight dále definuje metody pro snadné čtení a zápis dat po stránkách. Implementace této třídy není na zařízení se systémem Android povinná, v praxi se však zdá že všechna zařízení v současné době implementaci této třídy obsahují. NFC čárový kód Třída NfcBarcode implementuje podporu pro tagy obsahující čárový kód. Tato třída nedefinuje metodu transceive, data o čárovém kódu lze získat pomocí metody getbarcode() : byte[]. Data o čárovém kódu jsou získána během objevení tagu a proto tato metoda neblokuje. Podpora pro NFC čárové kódy byla přidána ve verzi systému 4.2 NdefFormattable Třída NdefFormattable implementuje podporu pro tagy které lze naformátovat pro uložení NDEF zpráv. Nenabízí metodu transceive, ale definuje metody pro formátování a zápis 12

3. Podpora NFC technologií na platformě Android NDEF zpráv. V praxi je však třída NdefFormattable součástí seznamu technologií i pro tagy, do nichž není možno NDEF zprávy zapsat (ať již proto, že jsou zamknuté, nebo proto že zápis do nich není v Androidu implementován). 3.1.3 Zpracování tagů nesoucích NDEF zprávy Tagy nesoucí NDEF zprávy mají v systému Android nejrozsáhlejší podporu a jsou zpracovávány specifickým způsobem. Po objevení takového tagu z něj systém přečte NDEF zprávu a na základě dat z ní získaných provede specifické akce před vyvoláním Intentu. Systém Android je na některých zařízeních schopen číst NDEF zprávy i z tagů Mifare Classic, které nejsou součástí specifikace NFC Fora. 3.1.3.1 Převod NDEF zpráv na Intenty Pro určení typu zprávy přečte systém první NDEF záznam a získá z něj hodnotu TNF (Type Name Format) a typ záznamu, a na jejich základě interpretuje obsah záznamu (payload). Systém v současné době řeší specifickým způsobem dvě situace: pokud je obsah interpretován jako URI, je tato URI nastavena jako parametr data vytvářeného Intentu 1, pokud je obsah interpretován jako data se specifikovaným MIME typem, je daný MIME type nastaven jako parametr type vytvářeného Intentu. Obsah je interpretován jako URI v případě že TNF odpovídá jedné z hodnot Absolute URI, NFC Forum external type, specifikovaným v [11]. Pokud TNF odpovídá hodnotě Well Known [11], je typ záznamu interpretován jako Record Type Definition (RTD), a pokud tento odpovídá hodnotě pro URI[15] nebo pro Smart Poster[13], je obsah také interpretován jako URI. Obsah je interpretován jako data určitého MIME typu pokud TNF odpovídá hodnotě Media-type [11]. Pokud TNF odpovídá hodnotě Well Known [11] a RTD odpovídá hodnotě pro text[14], je typ Intentu nastaven na MIME typ text/plain. Pokud nenastane žádný z výše uvedených případů, obsah NDEF zprávy nelze zpracovat, Intent s akcí ACTION_NDEF_DISCOVERED není 1. Toto je standardní mechanismus systému Android. Parametr data Intentu obsahuje URI, která ukazuje na data, jež mají být zpracována[26]. 13

3. Podpora NFC technologií na platformě Android vyvolán a zpracování tagu pokračuje způsobem popsaným v Mechanismus zpracování tagu systémem (tag dispatch). TNF RTD Interpretace Abolute URI URI NFC Forum external type URI Well Known URI URI Well Known Smart Poster URI Media-type MIME type záznamu Well Known Text MIME type: text/plain Jiné Nelze zpracovat Tabulka 3.1: Interpretace TNF a RTD Převod NDEF zpráv na Intenty uvedeným způsobem pomáhá přesněji doručovat Intenty aplikacím. Aplikace například může v Intent Filteru určit, že ji zajímají pouze NDEF zprávy s určitým MIME typem, nebo pouze URI se specifickým schématem či odkazující specifického hostitele[26]. 3.1.3.2 Určení aplikace pro zpracování tagu Systém Android podporuje od verze 4.0 takzvaný Android Application Record (AAR), což je specifický typ NDEF záznamu obsahující unikátní identifikátor aplikace (název jejího balíčku). Pokud je při objevení tagu a přečtení NDEF zprávy zjištěna přítomnost AAR, pokusí se systém tuto aplikaci spustit. Pokud aplikace není nainstalována, otevře globální repozitář aplikací Google Play a nabídne aplikaci ke stažení. Příkladem využití této technologie je aplikace NFC Task Launcher, která umožňuje do tagů zapsat akce jako například zapnutí či vypnutí Bluetooth a Wi-Fi, spuštění aplikací a podobně. Pokud uživatel přiloží své zařízení k takovémuto tagu, systém aplikaci NFC Task Launcher spustí a ta provede akce v tagu uložené. 3.1.4 Zpracování tagu běžící aplikací V některých případech chtějí aplikace obejít standardní způsob vyvolávání Intentů po objevení tagu a jejich doručování jiným aplikacím. 14

3. Podpora NFC technologií na platformě Android Pokud chce aplikace zamezit spuštění jiné aplikace při objevení nového tagu, využije metody enableforegrounddispatch(), definované v systémové službě NfcAdapter. Systém poté Intenty o nově objeveném tagu posílá přímo této aplikaci (za předpokladu že je v popředí). 3.2 Komunikace mezi dvěma zařízeními Pro komunikaci mezi dvěma zařízeními v režimu peer-to-peer specifikuje NFC fórum protokol LLCP (Logical Link Control Protocol), který představuje spojovou vrstvu architektury OSI. LLCP umožňuje obousměrnou komunikaci mezi zařízeními a zajišťuje vytváření a rušení spojení mezi zařízeními, multiplexování a další[17]. Podpora pro obousměrnou komunikaci mezi uživatelskými aplikacemi pomocí protokolu LLCP v současné verzi systému Android neexistuje, a pro výměnu dat je tedy nutno použít vysokoúrovňové API. Do verze 3.2 byla výměna dat prováděna pomocí vlastního protokolu NPP (NDEF Push Protocol) nad LLCP. NPP je jednosměrný protokol v režimu klient-server[28]. Každé zařízení podporující NPP má spuštěný NPP server a v případě, že chce přenášet data, i NPP klient. Přenos dat potom probíhá od klienta na server. Ve verzi 4.0 byla zavedena podpora pro protokol SNEP (Simple NDEF Exchange Protocol) specifikovaný NFC Forem, a také byl pro výměnu dat zaveden marketingový název Android Beam[27]. 3.2.1 Android Beam Android Beam je technologie pro výměnu dat mezi dvěma zařízeními se systémem Android. Z pohledu uživatele se jedná o velice jednoduchou technologii; uživatel zobrazí na displeji svého zařízení obsah, který chce přenést, a přiloží druhé zařízení, což vyvolá na jeho obrazovce animaci, zároveň s pokynem klepněte pro odeslání ( Touch to Beam ). Po klepnutí na obrazovku je obsah okamžitě přenesen na druhé zařízení. Technologii Android Beam je možné použít jednak pro přenos NDEF zpráv (například URL, krátké texty, kontakty apod.), nebo pro přenos libovolně velkých souborů. V obou případech jsou aplikacím 15

3. Podpora NFC technologií na platformě Android skryta nízkoúrovňová specifika přenosu (výběr protokolu, navázání a ukončení spojení apod.). Přenos NDEF zpráv Základní metodou výměny dat mezi zařízeními je zasílání NDEF zpráv. Ty jsou posílány buď pomocí protokolu SNEP, nebo pokud jedno ze zařízení SNEP nepodporuje, pomocí protokolu NPP. Výběr protokolu zajišťuje systém, aplikace do něj nijak nezasahují. V obou případech dojde na přijímajícím zařízení k vyvolání Intentu s akcí ACTION_NDEF_DISCOVERED. API pro posílání NDEF zpráv je velice jednoduché, sestává ze dvou metod definovaných v systémové službě NfcAdapter. Při použití metody setndefpushmessage aplikace (obvykle při svém startu) vytvoří NDEF zprávu, kterou chce poslat, a tu předá systému. Po aktivaci Android Beam pak systém automaticky odesílá tuto NDEF zprávu druhému zařízení. Při použití metody setndefpushmessagecallback aplikace předá systému objekt implementující rozhraní CreateNdef MessageCallback. Při aktivaci Android Beam pak systém zavolá na tomto objektu metodu createndefmessage, ve které je zkonstruována a předána NDEF zpráva. Díky tomu může aplikace posílat různé NDEF zprávy na základě stavu, ve kterém se nachází. Přenos souborů Od verze systému 4.1 je podporována také specifikace NFC Fóra Connection Handover[16]. Při použití této technologie se zařízení nejprve dohodnou (výměnou NDEF zpráv přes LLCP) na alternativním přenosovém médiu a vlastní přenos dat poté probíhá přes toto médium. Toho lze využít například pro přenos velkého objemu dat, který by vzhledem k nízké přenosové rychlosti NFC trval příliš dlouho. Jako alternativní médium Android v současné době podporuje Bluetooth, přičemž se očekává přidání podpory i pro Wi-Fi Direct[21] 2. V případě přenosu přes alternativní médium není na přijímajícím zařízení vyvolán Intent s akcí ACTION_NDEF_DISCOVERED, ale přijatá data jsou uložena do úložiště zařízení a uživateli je zobrazena nabídka k otevření daného souboru či souborů. API pro posílání souborů je prakticky totožné s API pro posílání NDEF zpráv, sestává z metod setbeampushuris a setbeampushuris 2. Podobná technologie S-Beam, kterou jsou vybavena některá zařízení společnosti Samsung s OS Android, podporuje přenos přes Wi-Fi Direct už nyní. 16

3. Podpora NFC technologií na platformě Android Callback. Ty fungují podobně jako výše zmíněné metody pro posílání NDEF zpráv, s tím rozdílem že místo NDEF zpráv se předává seznam URI souborů určených k přenesení. Implicitní nastavení Android Beam V případě že aplikace nevyužije ani jednu z výše uvedených možností pro posílání dat, je při uživatelově pokusu o použití Android Beam systémem přenesena implicitní zpráva, která na cílovém zařízení buď spustí danou aplikaci, nebo pokud tato není nainstalována, otevře globální repozitář aplikací Google Play a nabídne aplikaci ke stažení. Podpora komunikace s jinými platformami Jelikož je přenášení NDEF zpráv i přenášení souborů implementováno podle specifikací NFC Fóra (SNEP a Connection Handover), není použití Android Beam limitováno jen pro přenos dat mezi dvěma zařízeními s OS Android, ale je možno jej využít i pro přenos na zařízení jiných platforem které tyto specifikace implementují[21]. 3.3 Emulace karet Emulace tagů, zejména čipových karet se zdá být nejzajímavější oblastí použití NFC v mobilních zařízeních. Dva základní případy použití jsou emulace platebních karet, která uživatelům umožňuje platit na bezkontaktních terminálech pomocí svého mobilního zařízení, a emulace přístupových karet, která uživatelům umožní například přístup do budov bez nutnosti mít u sebe přístupovou kartu. Standardním způsobem emulace karet je emulace pomocí Secure Elementu, nově se však objevuje i tzv. softwarová emulace. 3.3.1 Emulace pomocí Secure Elementu Emulace pomocí SE vyžaduje nahrání appletu (informací o emulovaném tagu) do SE. Externí čtečky poté komunikují se Secure Elementem pomocí NFC, jako by se jednalo o běžný NFC tag[4]. Pro možnost emulace pomocí SE je tedy potřeba, aby zařízení obsahovalo SE a aby bylo možno k němu přistupovat a měnit jeho stav. 17

3. Podpora NFC technologií na platformě Android Většina Android zařízení s NFC čipem má SE integrováno právě do NFC čipu[6]. Přístup k SE je v současných verzích systému Android (od verze 4.0) řízen na základě informací v souboru /etc/nfcee_ access.xml[23]. Tento XML soubor obsahuje jeden či více XML tagů signer. V každém tagu signer je uveden certifikát a případně seznam názvů Java balíků. Pokud signer neobsahuje seznam balíků, je přístup k SE povolen všem aplikacím, které jsou podepsány daným certifikátem. Pokud seznam balíků obsahuje, je přístup povolen těm aplikacím, které jsou podepsány daným certifikátem, a zároveň je balík, ve kterém jsou implementovány, obsažen na seznamu. Jediným certifikátem uvedeným v soubor /etc/nfcee_access.xml na oficiálních zařízeních s OS Android (například Galaxy Nexus nebo Nexus 7) je certifikát pro aplikaci Google Wallet. Systémová oblast úložiště včetně adresáře /etc/ je na produkčních zařízeních připojena pouze pro čtení, a tedy není možno do souboru nfcee_access.xml zapisovat. Pro umožnění přístupu k SE by tedy aplikace musela být schopna připojit systémovou oblast s právy pro zápis. K tomu by však potřebovala získat práva superuživatele (root), ta jsou ovšem na produkčních zařízeních přístupná pouze systémovým aplikacím. Pro mnoho zařízení existuje možnost získat práva superuživatele i pro uživatelské aplikace pomocí procesu tzv. rootování, jedná se ovšem o neoficiální postup, který často způsobuje ztrátu záruky zařízení. Druhou možností, jak upravit obsah souboru na systémové oblasti, je pomocí nahrání systémového obrazu podobným způsobem, jakým se aktualiazuje samotný Android OS. Produkční zařízení však umožňují nahrání pouze obrazu vydaného výrobcem zařízení (potažmo mobilním operátorem, u kterého bylo zařízení zakoupeno). Neoficiální způsoby nahrání systémového obrazu opět existují, ovšem se stejným omezením jako rootování. Je tedy zřejmé, že uživatelské aplikace nemohou spoléhat na možnost přístupu k Secure Elementu. Hlavní bariérou pro emulaci je však Card Manager. Card Manager je applet v SE, který řídí správu ostatních appletů. Přístup ke Card Manageru je možný pouze se znalostí klíčů, které jsou však pro produkční zařízení držena v tajnosti[7]. Jediným způsobem jak do SE přidat další applety je tedy možná pouze ve spolupráci s držiteli těchto klíčů, což jsou obvykle výrobci daného zařízení. Důvodů pro omezení přístupu k SE je několik; SE obvykle obsa- 18

3. Podpora NFC technologií na platformě Android huje pouze omezené množství paměti, a proto v případě, že by bylo uživatelským aplikacím povoleno instalovat do něj applety, mohlo by rychle dojít k jejímu vyčerpání[3]. Dalším důvodem je vlastnost většiny SE, kdy po několika neúspěšných pokusech o jeho odemčení je SE navždy uzamčen pro zápis. Umožnění přístupu k SE by tedy znamenalo, že uživatelské aplikace mohou (ať již omylem či záměrně) způsobit znefunkčnění hardware zařízení. Hlavním důvodem omezení přístupu k SE se však zdá být jeho využití pro aplikaci Google Wallet. 3.3.2 Softwarová emulace Dalším způsobem emulace tagů je tzv. softwarová emulace. V tomto případě není nahrán applet do Secure Elementu, ale činnost karty je emulována uživatelskou aplikací na aplikačním procesoru zařízení. Softwarová emulace se poprvé objevila v systému BlackBerry společnosti RIM[30]. Tento způsob není vhodný například pro emulaci platebních karet, jelikož běh aplikací na aplikačním procesoru zařízení nedosahuje stejné míry bezpečnosti jako běh appletů v SE[30]. Softwarová emulace není v oficiální verzi OS Android nijak podporována. Jelikož je však systém Android open source, existuje mnoho neoficiálních verzí s různými úpravami (mezi uživateli jsou tyto verze nazývány ROM). Jednou z nejoblíbenější alternativních verzí je CyanogenMod (CM). Tato ROM od verze verze 9 (založené na Android OS verze 4.0) softwarovou emulaci podporuje[8]. Technicky je tato emulace provedena rozšířením funkcionality komunikace s tagy. V systému CyanogenMod jsou přidány dvě třídy, IsoPcdA a IsoPcdB, odpovídající emulaci tagu technologie ISO 14443-3A, potažmo ISO 14443-3B. Pokud NFC čip detekuje přítomnost NFC čtečky, doručí Intent obdobným způsobem jako při objevení tagu (viz část 3.1.1), daný objekt typu Tag má potom v seznamu technologií jednu ze tříd IsoPcdA, nebo IsoPcdB (podle technologie čtečky). Komunikace se čtečkou probíhá standardně výměnou APDU zpráv pomocí metody transceive(). Emulace technologií na nižších úrovních není možná, zejména potom ID takto emulovaného tagu je náhodně zvoleno při každém kontaktu se čtečkou, proto není možno softwarovou emulaci využít například pro nahrazení karet pro vstup do budov v systémech, které karty ověřují podle ID[30]. 19

3. Podpora NFC technologií na platformě Android Použití pro uživatelské aplikace je opět velmi omezené, jelikož je potřeba mít na zařízení nainstalovánu alternativní verzi systému, což s sebou přináší různé problémy (zejména ztrátu záruky). 3.3.3 Použití v aplikaci Google Wallet Google Wallet je služba společnosti Google umožňující mimo jiné platby v obchodech vybavených bezkontaktními terminály. Součástí služby je aplikace pro systém Android, která funguje jako virtuální peněženka sdružující platební a jiné bezkontaktní karty. Uživatel má možnost do aplikace přidat informace o svých kartách a ty jsou poté emulovány na jeho zařízení. Bezkontaktní platba pomocí Google Wallet je zajištěna jedním ze dvou způsobů; emulací skutečné karty nebo pomocí virtuální karty. Při emulaci skutečné karty poskytne vydavatel platební karty společnosti Google applet, nainstalovaný na uživatelově kartě, a ten je poté službou Wallet bezpečným způsobem přenesen do SE na uživatelově zařízení přes síť Internet[9]. Takovýmto způsobem lze přidat i více platebních karet, přičemž uživatel si může vybrat kartu pro danou platbu v aplikaci Wallet. Emulace skutečné platební karty vyžaduje kooperaci mezi společností Google a vydavatelem karty, což může být vzhledem k počtu vydavatelů problematické[22]. Druhým způsobem je emulace pomocí virtuální karty, která je zavedena do SE při aktivaci aplikace Google Wallet. Uživatel uloží do systému údaje o své fyzické platební kartě potřebné pro on-line platby (typicky číslo karty, datum expirace a kód CVC/CVV) a platby virtuální kartou jsou poté společností Google staženy z této karty jako běžné on-line platby. Platba oběma způsoby je možná na všech terminálech podporujících bezkontaktní platbu, jelikož emulované karty musejí splňovat standard EMV[10]. Z hlediska bezpečnosti může být Google Wallet lepší alternativou k bezkontaktním kartám. Bezkontaktní karty jsou aktivní neustále a je možno je tedy přečíst bez uživatelova vědomí[31]. Naproti tomu komunikace s karty uloženými v aplikaci Wallet je možná pouze pokud je zařízení odemčeno. Aplikaci Wallet lze také samostatně uzamknout, čímž dojde ke smazání appletů z SE a pro jejich opětovné nahrání je potřeba zadat PIN[9]. Při ztrátě zařízení je také možno aplikaci vzdáleně deaktivovat[24]. Google Wallet umožňuje také emulaci karet typu Mifare Classic, 20

3. Podpora NFC technologií na platformě Android čehož je využíváno například pro emulaci slevových karet. Pro tyto potřeby je emulována karta Mifare Classic 4K. Společnost Google poskytuje API nazývané Save-To-Wallet, které mohou prodejci využít pro umístění stejnojmenného tlačítka na své webové stránky[2]. Po uživatelově kliknutí na toto tlačítko jsou informace o dané slevě přeneseny do jeho zařízení a uloženy na emulované kartě. Po příchodu do kamenného obchodu uživatel přiloží své zařízení k bezkontaktní čtečce, ta přečte informace o slevě z emulované karty a obchodníkův systém umožní čerpání slevy. Save-To-Wallet API je v současné době ve fázi uzavřené beta verze a jeho použití je možné pouze po schválení registrace společností Google[20]. 3.4 Shrnutí Zařízení s OS Android podporují všechny tři módy NFC komunikace: čtení/zápis, peer-to-peer i emulaci tagů. Implementace podpory pro čtení a zápis tagů je soustředěna na práci s tagy splňující specifikace NFC Fora a nesoucími NDEF zprávy, komunikace s dalšími tagy je také možná, aplikace však musejí implementovat komunikační protokol dané technologie. Komunikace v režimu peer-to-peer je řízena systémem a uživatelským aplikacím je přístupné pouze vysokoúrovňové API, které komunikaci v zájmu jednoduchosti použití degraduje na jednosměrnou výměnu zpráv či souborů. Emulace tagů pomocí Secure Elementu v NFC čipu je v současné době využívána aplikací Google Wallet, použití emulace poskytované touto aplikací je však podmíněno úzkou spoluprací se společností Google v konkrétních oblastech. Uživatelským aplikacím není emulace pomocí SE z několika důvodů přístupná. Softwarová emulace není oficiální verzí OS Android podporována, existují však alternativní verze systému, které podporu pro softwarovou emulaci obsahují. 21

4 Praktická část V praktické části práce jsem implementoval aplikaci pro systém Android, která ilustruje komunikaci s různými druhy NFC tagů a také s jinými zařízeními v režimu peer-to-peer. Pro implementaci jsem zvolil platformu Android 4.0, vzhledem k omezeným možnostem API pro NFC komunikaci ve dřívějších verzích. Aplikace sestává ze dvou nezávislých částí (tzv Aktivit): první je aktivita pro čtení tagů TagInfoReader a druhou aktivita pro odesílání NDEF zpráv BeamAnything. 4.1 TagInfoReader Aktivita TagInfoReader čte informace z podporovaných NFC tagů. Aktivita dokáže zobrazit typ a podporované technologie tagu, informace získané z tagu systémem při jeho objevení a u vybraných typů i obsah paměti a další informace. Vstupním bodem aplikace je třída NfcTagActivity. Ta se u systému zaregistruje pro doručování Intentů o objevení tagu (viz Zpracování tagu běžící aplikací) a také zajišťuje hostování Fragmentů (specifických kusů uživatelského rozhraní s vlastní logikou) pro čtení tagu, zobrazení základních informací a zobrazení obsahu paměti tagu. Vzhledem k množství podporovaných typů tagů jsem pro potřeby čtení tagů a uchovávání informací o nich navrhl jednoduchý objektový model. Definoval jsem rozhraní TagReader a TagInfo. Pro každou technologii tagu podporovanou systémem Android jsem vytvořil implementace těchto dvou rozhraní. Třídy implementující TagReader definují metodu pro přečtení co nejvíce informací z tagu daného typu. Přečtené informace jsou zapouzdřeny v objektu třídy implementující rozhraní TagInfo. Třídy implementující rozhraní TagInfo poskytují minimálně metody pro získání identifikátoru tagu, jeho typu a podporovaných technologiích. Vzhledem k tomu, že konkrétní tag obvykle podporuje více technologií (například Mifare Classic nesoucí NDEF zprávu podporuje zároveň technologie Ndef, MifareClassic a NfcA), obsahují objekty typu TagInfo rekurzivně další objekty tohoto typu (potažmo podtypů definovaných implementujícími třídami), reprezentující technologie nižší úrovně. Při zpracování tagu je tedy iterováno 22

4. Praktická část přes podporované technologie, pro každou technologii je vytvořen TagReader a pomocí něj jsou z tagu získány informace. Pro vybrané technologie tagů jsem také implementoval komunikační protokol. Při implementaci jsem dodržoval konvence zavedené v systémových třídách pro komunikaci s tagy, přestože neexistuje jednoduchý způsob jak umožnit jiným aplikacím či systému využívat mé implementace ke komunikaci s tagy. Jednou z technologií pro niž jsem implementoval komunikační protokol je technologie elektronických pasů specifikace ICAO 9303[5]. Elektronické pasy jsou cestovní dokumenty obsahující strojově čitelnou oblast a bezkontaktní čip odpovídající specifikaci ISO 14443 A nebo B. V bezkontaktním čipu mohou být uloženy informace o uživateli, jako například jméno, datum narození nebo státní příslušnost, ale také biometrické údaje jako například fotografie nebo nasnímané otisky prstů. Data uložená v elektronickém pasu jsou šifrována a přístup k nim je možný pouze po ověření klíčem, vypočteným z informací získaných ze strojově čitelné oblasti pasu. TagInfoReader umožňuje uživateli vložit informace nutné pro výpočet klíče a poté přečíst většinu dostupných informací z pasu. Při implementaci této části jsem se potýkal s největšími problémy. Jedním z problémů bylo, že kryptografická knihovna obsažená v systému Android nepodporuje šifrovací protokol potřebný pro komunikaci s pasem, kvůli čemuž jsem musel použít knihovnu SpongyCastle. Dalším problémem byl nejasně specifikovaný formát zobrazené fotografie. Na různých místech jsem našel informaci že fotografie je uložena ve formátu JPEG či JPEG2000, což se ukázalo být částečně pravdivé. V souboru, který obsahuje podle specifikace fotografii jsou totiž obsažena ještě další data, která jsem musel před dekódováním fotografie odstranit. Při návrhu uživatelského rozhraní jsem se držel doporučení pro novější verze systému Android (tzv. Holo vzhled). Informace o tagu jsou uživateli prezentována v jednoduché formě rozklikávacího seznamu podporovaných technologií. Obsah paměti je pro elektronické pasy vypsán jako stromová struktura souborů, pro ostatní typy tagů jako lineární výpis bloků. 23

4. Praktická část 4.2 BeamAnything BeamAnything je aktivita která umožňuje uživateli přenášet data z různých aplikací na jiné zařízení. Uživatelé systému Android mají možnost sdílet data z různých aplikací a zpracovávat je jinými aplikacemi. Technicky je toto zajištěno pomocí Intentů. Pokud se uživatel rozhodne sdílet data z určitě aplikace (například klepnutím na tlačítko Share), vytvoří tato aplikace Intent s akcí ACTION_SEND, vloží do něj sdílená data (případně odkaz na ně) a tento Intent předá systému. Systém na základě typu dat vyhledá aktivity, které jsou schopny sdílená data zpracovat a zobrazí uživateli jejich seznam. Uživatel poté zvolí aktivitu, do které chce data sdílet, ta je systémem spuštěna a Intent je jí předán. Příkladem může být situace, kdy si uživatel zobrazí webovou stránku v prohlížeči, rozhodne se ji sdílet a pro zpracování vybere e-mailový klient, který zobrazí dialog pro vytvoření nové zprávy a do těla zprávy vloží odkaz na danou stránku. BeamAnything funguje tak, že reaguje na Intenty s akcí ACTION_ SEND a libovolným typem dat. Pokud je mu takový Intent doručen, převede sdílená data na NDEF zprávu a zobrazí uživateli informaci o tom, že je připraven k přenosu. Pokud poté uživatel přiblíží své zařízení k jinému zařízení kompatibilnímu s technologií Android Beam, jsou sdílená data odeslána. BeamAnything využívá standardní API pro přenos NDEF zpráv, po přijetí Intentu a vytvoření NDEF zprávy tedy volá metodu setndefpushmessage třídy NfcAdapter, o samotný přenos se stará systém. Pokud uživatelovo zařízení podporuje NFC Connection Handover (viz 3.2.1), a sdílená data jsou typu binárního obsahu, využije BeamAnything API pro přenos souborů. I v tomto případě se o přenos stará systém. V současné době většina základních aplikací systému Android (webový prohlížeč, e-mailový klient, galerie obrázků, aplikace Google Maps, Youtube apod.) využívá technologii Android Beam a je tedy možné z nich sdílet data přímo. BeamAnything však umožňuje sdílet z téměř jakékoliv aplikace, i pokud tato Android Beam nepodporuje. Typicky se jedná například o souborové manažery nebo alternativní webové prohlížeče. 24

4. Praktická část 4.3 Instalace Aplikace je distribuována jako standardní aplikační balík systému Android, tedy soubor s příponou.apk. Instalace do zařízení probíhá standardním způsobem, například zvolením balíku v souborovém manažeru. Instalace je možná pouze na zařízeních se systémem Android 4.0 nebo vyšší, podporujících technologii NFC. 25

5 Závěr Hlavním cílem této bakalářské práce bylo zjištění a zhodnocení stavu podpory jednotlivých částí standardu NFC. K tomu jsem nastudoval a v druhé kapitole krátce objasnil možnosti technologie NFC. Vysvětlil jsem tři hlavní módy NFC a také objasnil význam některých souvisejících standardů. Ve třetí kapitole jsem potom detailně diskutoval podporu standardu NFC na platformě Android. Věnoval jsem se postupně všem třem módům komunikace. V první části vysvětluji podporu čtení tagů v systému Android, jednak podporu tagů specifikovaných NFC Forem a nesoucích NDEF zprávy, stejně jako podporu čtení dalších typů tagů. V další části jsem objasnil jednoduchost použití technologie Android Beam, včetně limitací takto jednoduchého přístupu. V závěru kapitoly jsem diskutoval emulaci tagů a důvody proč není uživatelským aplikacím na platformě Android přístupná. Přínosem této kapitoly je ucelený přehled o podporovaných technologiích, zejména v části o emulaci tagů nezatížený preferencemi k některé ze zúčastněných stran. Ve čtvrté kapitole krátce vysvětluji svou práci na praktické části, kdy jsem implementoval aplikaci ilustrující možnosti technologie NFC na platformě Android. Aplikace je rozdělena na dvě části, první část využívá API pro čtení tagů a je možno ji využít k získání informací o různých druzích tagů. Při návrhu aplikace jsem se snažil, aby bylo možno snadno přidat podporu pro čtení informací z případných nových druhů tagů. Druhá část demonstruje možnosti technologie Android Beam a může nalézt praktické využití pro sdílení dat z aplikací, které technologii Android Beam nevyužívají. Při tvorbě práce jsem získal dobrý přehled o této moderní technologii s velkým potenciálem do budoucna. Myslím, že NFC je zajímavou alternativou k jiným bezdrátovým komunikačním technologiím. Zároveň jsem si uvědomil náročnost problematiky emulace tagů a čipových karet. 26

Literatura [1] NFC Brief. Nexus 4 and 10 incompatible with mifare classic NFC tags. http://www.nfcbrief.com/2012/11/nexus-4-and- 10-incompatible-with-mifare.html. [2] Sarah Clark. Google adds Save to wallet APIs for payments cards and offers. http://www.nfcworld.com/2012/06/28/ 316562/google-adds-save-to-wallet-apis-for-paymentscards-and-offers/. [3] Sarah Clark. Google raises concerns over the viability of NFC card emulation mode for mobile payments. http://www.nfcworld.com/2011/05/11/37352/googleraises-concerns-over-the-viability-of-nfc-cardemulation-mode-for-mobile-payments/. [4] V. Coskun, K. Ok, and B. Ozdenizci. Near Field Communication (NFC): From Theory to Practice. Wiley, 2011. [5] ICAO Doc. 9303. Machine Readable Travel Documents-Part, 1, 2005. [6] Nikolay Elenkov. Accessing the embedded secure element in android 4.x. http://nelenkov.blogspot.cz/2012/08/accessingembedded-secure-element-in.html. [7] Nikolay Elenkov. Android secure element execution environment. http://nelenkov.blogspot.cz/2012/08/androidsecure-element-execution.html. [8] Nikolay Elenkov. Emulating a PKI smart card with Cyanogen- Mod 9.1. http://nelenkov.blogspot.cz/2012/10/emulatingpki-smart-card-with-cm91.html. [9] Nikolay Elenkov. Exploring google wallet using the secure element interface. http://nelenkov.blogspot.cz/2012/08/ exploring-google-wallet-using-secure.html. [10] EMVCo, LLC. EMVCo. http://www.emvco.com/ specifications.aspx?id=21. 27