DŮLEŽITÉ UPOZORNĚNÍ!
Policie České republiky a šéfcensor Ústavu pro studium totalitních režimů Jaroslav Čvančara varují: citovat jakékoli texty z tohoto blogu způsobuje vážné nebezpečí trestního stíhání! Četba na vlastní nebezpečí!

21. 10. 2010

Arduino v říši Velkého bratra

Kdyby neexistovaly, nejspíš by si je paranoici museli vymyslet. O čem mluvím? O čipech, přesněji řečeno radiofrekvenčních identifikačních transponderech, známých pod zkratkou RFID.

I když čipy nepředstavují oproti ostatním identifikačním technologiím nijak výrazně zvýšené nebezpečí, paranoikům je třeba dát zapravdu v tom, že některé vlastnosti RFID technologie jsou na pováženou: na rozdíl od většiny ostatních systémů nelze ověřit, co je v čipu zapsáno a kdo a kdy si informace v něm čte nebo je modifikuje. Vše se děje bezdrátově, bez možnosti uživatele, příp. nositele čipu, tento proces jakkoli kontrolovat nebo jen pasivně registrovat.

Jedinou účinnou obranou je nosit čipy a karty, kde by mohly být, v dostatečně masivním kovovém obalu – tedy minimálně ty, o kterých víme… A to není úplně příjemný pocit.

Protože jsem dosud o technologiích RFID měl pouze velmi povšechné informace, musel jsem několik prvních dnů místo experimentování věnovat studiu. Nešlo o nic komplikovaného, z hlediska theorie je to celkem běžná, jednoduchá technologie. Problém je jedině ve značné rozrůzněnosti provedení čipů a jen částečné normalisaci v této oblasti: musím se proto smířit s tím, že experimenty omezím jen na ty typy čipů a čteček, které budu mít fysicky v držení.

Pro začátek se pustíme do nejstaršího provedení RFID prvků, které je však stále velmi oblíbené pro svou nízkou cenu, do transponderů pracujících na frekvenci 125 kHz, tedy v pásmu dlouhých vln. U této vlnové délky přichází v úvahu pouze ryze magnetická – indukční – vazba mezi vysílací a přijímací antenou. Vysílací antena musí být relativně masivní, provedená jako cívka s min. 50–100 závity; na vychytávky typu varikapové ladění můžeme rovnou zapomenout, na druhé straně není ale nutné mít transponder naladěn přesně: i když LC obvod nebude s přijímačem v resonanci, lze to kompensovat dostatečnou indukčností vysílací cívky.

Vysílat se v tomto pásmu dá i miniaturní cívečkou na feritovém jádře, jaké se používají např. ve skleněných transponderech určených k implantaci do zvířecí tkáně, a zajdeme-li do extremu, ke konstrukci funkčního transponderu postačí běžná axiální tlumivka. To je ovšem spíš případ elektroniky coby adrenalinového sportu, tak daleko nepůjdeme, a i když budeme konstruovat minimalisticky, striktně se udržíme v katalogových mezích.

V České republice jsou v pásmu LF zdaleka nejčastěji provozovány systémy s pasivními transpondery, odpovídající provedení EM-4001, EM-4102 apod. Zkratka EM v názvu pochází od firmy EM Microlectronic Marin SA, která s těmito čipy kdysi jako jedna z prvních začínala.

Podobně jako u iButtonů bude užitečné postavit si dvouportový emulátor: jedním koncem čip načteme, druhým ho nabídneme čtečce. Protože transpondery lze snímat bezdotykově, při vhodně provedené anteně, např. cívce zabudované do obvodu kufříku, lze číst čipy do vzdálenosti několika desítek centimetrů, a klidně mohou být i zamčené třeba v zásuvce stolu (nehledě na to, že s takovým kufříkem, pokud zapomeneme antenu odstranit, si užijeme spoustu zábavy např. při kontrole na letišti: přesvědčit ochranku, že opravdu, ale opravdu nejsme teroristé, bude s takovým vybavením úkol z kategorie mission impossible).

Objednávám proto studijní materiál, nejlevnější dostupný čtecí modul, typ EM-18, a tři miniaturní, dvacetimilimetrové čipy (na snímku).

Řešení se bude od našeho emulátoru iButtonů, pokud jde o koncepci, lišit jen v jednotlivostech. Zařízení bude mít opět jednu indikační LED a jedno tlačítko na ovládání.

Podobné bude i uživatelské rozhraní:

Stisknutím tlačítka se přístroj aktivuje. Pokud je v jeho paměti EEPROM uložen platný kod čipu, blikne LED jednou a přístroj začne – blikaje periodicky LEDkou – tento čip emulovat. Emulaci lze ukončit stisknutím tlačítka; samovolně ustane po uplynutí pěti minut. Jestliže je paměť prázdná nebo tlačítko podržíme déle než sekundu, spustí se namísto emulace režim čtení. Ten indikuje trvale rozsvícená LED, která zhasne po úspěšném načtení čipu. Opět lze zařízení vypnout ručně tlačítkem anebo automaticky po pětiminutovém timeoutu.

Konstruovat budeme stejně jako minule z ATtiny85 a čtečky z upraveného modulu. Z něj si musíme vyvést výstup operačního zesilovače, jinak bychom byli odkázáni na data ze seriového výstupu, a ta jsou nedostatečná: ze 64 bitů uložených v transponderu (40 datových, 24 pomocných) tento modul přenese na výstup pouze 24.

Alternativně bychom si mohli čtečku postavit sami, ale to je asi zbytečné: konstrukce je zcela standardní, mnohokrát vyzkoušená a technicky nekomplikovaná. Samozřejmě, záleží na tom, co je naším cílem. Pokud budeme chtít z anteny vytáhnout maximální dosah, může být vlastní, perfektně vyladěná čtečka ku prospěchu (ale nečekejme zázraky, jestliže je vzdálenost magnetických anten větší než jejich velikost, klesá vzájemná indukčnost se třetí mocninou vzdálenosti: pohádky o transponderech rutinně čtených satelitem ponechme shora zmiňovaným paranoidním spoluobčanům).

Zbývá vyřešit vysílací antenu. Ta by mohla být theoreticky sdílená s přijímací, avšak to není příliš dobré řešení, protože v praxi bývají požadavky na tuto antenu odlišné: přijímací antena musí být co největší, aby měla maximální dosah, vysílací by měla být naopak co nejméně nápadná. Navineme si proto cívku z měděného drátu s isolací, s tím, že pro praktické provedení bychom použili jiné, kompaktnější řešení.

Čtečku, která má v našem případě odběr cca 30 mA, budeme k zařízení připojovat transistorem jen po nezbytně nutnou dobu. Procesoru by měla stačit hodinová frekvence 1 MHz. Tím bude pracovní odběr v době emulace méně než 0,5 mA a plochá (příp. šestivoltová) baterie tak může v zařízení vydržet prakticky neomezeně dlouho.

Ze schematu zapojení je zřejmé, že používáme opět ty nejjednodušší součástky, v celkové ceně – včetně čtečky, pokud si ji postavíme sami – kolem stokoruny.

V pásmu 125 kHz se přenos realisuje tak, že přijímač vytváří pomocí čtecí cívky-anteny střídavé magnetické pole, jež transpondery využívají jednak jako zdroj napájecího napětí, jednak k samotnému přenosu dat. Ten se děje tím, že se v závislosti na přenášených datech mění parametry vysílače – nejčastěji změnou impedance, paralelního odporu nebo, méně často, kapacity, ve vysílacím oscilátoru – což se projeví mírnou změnou impedance přijímací anteny (poněkud nepřesně se v této souvislosti psává, že transponder antenu čtecího zařízení rozlaďuje, ale to může a nemusí být pravda).

Změna se projeví jako slabá amplitudová modulace signálu z vysílacího oscilátoru, kterou lze na přijímací cívce relativně snadno detekovat.

V našem zapojení využíváme unipolární transistor, jímž k oscilátoru připojujeme paralelní resistor 100 Ω. Zenerova dioda D1 má toliko ochranou funkci: na vysílací anteně se v resonanci mohou indukovat stovky voltů. Pro zvýšení dosahu bychom mohli přidat ještě můstkový usměrňovač, aby obvod nebyl asymetrický, ale je to zbytečné: přijímače si díky své citlivosti s výstupem našeho transponderu spolehlivě poradí.

Data se kodují několika způsoby, standardní transpondery EM-4102 používají ASK s využitím 1/32 frekvence přijímače.

Tímto způsobem transponder opakovaně vysílá blok 64 bitů, jež koduje bifasově, v systému Machester/64: není to nic složitého, každý bit je tvořen dvěma stejně dlouhými bitovými sloty, přičemž nula je zakodována jako 01, jednička jako 10 (popřípadě naopak).

Aby bylo možno identifikovat v uniformním datovém proudu začátek bloku, data mají pevnou strukturu: každý blok začíná devíti jedničkami, následuje 10 pětibitových datových slov (čtyři bity jsou datové, pátý je sudá parita), potom čtyři bity podélné parity, rovněž sudé, a nakonec jeden nulový stop-bit. Parita způsobuje, že devět po sobě následujících jedniček se nemůže vyskytovat nikde jinde než na začátku bloku.

Připojíme tedy k zařízení náš jednoduchý logický analysator, do magnetického pole vkládáme transponder a po chvíli pátrání a konversí se dostáváme k řadě:
111111111 00101 10100 00000 00000 00110 01111 11011 00011 00101 00110 0001 0
Ano, formát i všechny paritní bity souhlasí, to nemůže být nic jiného než data z transponderu.

Nyní je potřeba dekodování signálu naprogramovat do atmelu. Musíme dát pozor, abychom postupovali korektně: např. abychom správně rozpoznali, který slot v Manchestru je první a který druhý. Pokud bychom se zmýlili, mohli bychom číst v chybné synchronisaci neomezeně dlouho.

Ačkoli data dekodovaná na výstupu operačního zesilovače jsou značně odlišná od theoretického průběhu, algorithmus nakonec není ani tak složitý. S překvapením zjišťuji, že můj jednoduchý program detekuje transpondery na větší vzdálenost a spolehlivěji, než program v mikrořadiči čtecího modulu – no, zřejmě programátoři na baterky…

Až budeme mít vše hotovo, ještě si pohrajeme s časovými konstantami, které je potřeba optimalisovat empiricky: protože máme co do činění s analogovými daty, nelze vycházet ze žádných theoretických předpokladů a nejlépe je vše prakticky vyzkoušet.

Napsat rutinu pro vysílání dat je už hračka: prostě jen XORem namodulujeme data na jeden z bitů volně běžícího čítače – výstupem jsou data zakodovaná v Manchester/64.

Výsledek je zde. Program má zhruba stejnou velikost jako emulátor iButtonů, a neobsahuje žádné programátorské zvláštnosti nebo nestandardní techniky.

Pro zajímavost se ještě můžeme podívat, jak vypadá výsledek emulace na časové ose:
MON V1.0 ready
>l0103
00000000.0000                 00 ------00
00000147.8750 (00000147.8750) 01 ------01
00000249.7500 (00000101.8750) 03 ------11
00000297.6875 (00000047.9375) 02 ------10
00000505.1875 (00000207.5000) 00 ------00
00000690.5000 (00000185.3125) 01 ------01
00000755.3750 (00000064.8750) 03 ------11
00000795.5000 (00000040.1250) 02 ------10
00001010.8125 (00000215.3125) 00 ------00
00001185.1875 (00000174.3750) 01 ------01
00001265.1875 (00000080.0000) 03 ------11
00001313.0625 (00000047.8750) 02 ------10
00001516.5625 (00000203.5000) 00 ------00
00001656.6250 (00000140.0625) 01 ------01
00001771.0000 (00000114.3750) 03 ------11
00001832.2500 (00000061.2500) 02 ------10
00002026.1875 (00000193.9375) 00 ------00
00002137.1875 (00000111.0000) 01 ------01
00002532.0625 (00000394.8750) 03 ------11
00002598.9375 (00000066.8750) 02 ------10
00002784.5625 (00000185.6250) 00 ------00
00002915.9375 (00000131.3750) 01 ------01
00003038.6250 (00000122.6875) 03 ------11
00003093.3125 (00000054.6875) 02 ------10
00003544.5625 (00000451.2500) 00 ------00
00003666.4375 (00000121.8750) 01 ------01
00004049.7500 (00000383.3125) 03 ------11
Na bitu 1 jsou data posílaná na hradlo spínacího transistoru, na bitu 0 data, která vrátila čtečka. Nejdůležitější jsou řádky zachycující stavy 01 nebo 10 – to jsou ty, kdy přijímač vrací jiná data, než která vysílá vysílač. Čím kratší – nebo aspoň čím stejnější – tím lépe, tím větší je šance na úspěšné přečtení transponderu.

Emulátor je hotov, a mám velké cukání postavit si ho na plošném spoji a instalovat včetně anteny do kufříku. A třeba ho doplním o alfanumerický displej (nebo ještě lépe Bluetooth výstup zpracovatelný v N900), takže když napříště budu mít s někým schůzku, budu mu na jejím konci moci suše oznámit, které čipy u něj můj kufřík našel a přečetl.

Fakt, že některé firmy prodávají za drahé peníze bezpečnostní řešení, např. přístupové systémy, právě s takovými dlouhovlnnými čipy, které si může kdokoli s vybavením za sto korun číst a klonovat, mne naplňuje hrůzou. Když nějakého jejich zákazníka potkáte, prosím, pošlete ho za mnou: vezmu na schůzku svůj kufřík…

Aktualisováno.
Časové konstanty se optimalisovat nepodařilo – byly už optimální – a tak jsem aspoň pro zpestření článku přidal obrázek z osciloskopu.

4 komentáře :

  1. Jen drobnost ke stínění čipů - lépe než kovová folie mi zafungovalo dát dvě kartičky na sebe.

    OdpovědětVymazat
  2. Jedním slovem - fascinující!

    OdpovědětVymazat
  3. 出る杭は打たれる...

    Hřebíček, který vyčuhuje, bývá zatlučen tlakem na hlavičku...

    Tak opatrně... :)

    M.H.

    OdpovědětVymazat
  4. Jen drobnost ke stínění čipů - lépe než kovová folie mi zafungovalo dát dvě kartičky na sebe.

    Moderní čipy mají antikolisní procedury, u nich to nestačí. U EM-4001 to samozřejmě bude fungovat spolehlivě.

    OdpovědětVymazat

Kursiva: <i>text</i>
Tučně (když už to musí být…): <b>text</b>
Odkaz: <a href = "http://adresa">název odkazu</a>, tedy <a href = ""></a>

Poznámka: Komentáře mohou přidávat pouze členové tohoto blogu.