Obsah:

Použitie Mifare Ultralight C s RC522 na Arduino: 3 kroky
Použitie Mifare Ultralight C s RC522 na Arduino: 3 kroky

Video: Použitie Mifare Ultralight C s RC522 na Arduino: 3 kroky

Video: Použitie Mifare Ultralight C s RC522 na Arduino: 3 kroky
Video: Android 06 - NFC, P. Mazanec (mDevCamp 2012) 2024, Júl
Anonim
Použitie Mifare Ultralight C s RC522 na Arduino
Použitie Mifare Ultralight C s RC522 na Arduino

Používanie technológie RFID na identifikáciu držiteľov kariet alebo na povolenie niečoho urobiť (otvoriť dvere atď.) Je pomerne bežný prístup. V prípade DIY aplikácie je modul RC522 široko používaný, pretože je dosť lacný a pre tento modul existuje veľa kódu.

Vo väčšine prípadov sa UID karty používa na „identifikáciu“držiteľa karty a karty Mifare Classic sa používajú, pretože sú lacné a často sú zahrnuté pri kúpe modulu RC522.

Ale ako možno viete, systém Mifare Classic je hacknutý už niekoľko rokov a už nie je považovaný za bezpečný. Šifrovací systém Crypto1 používaný kartami Classic je možné prekonať a sú to prepisovateľné karty, na ktorých je možné preprogramovať údaje s identifikátorom UID (magické karty).

Používanie kariet Mifare Classic sa preto neodporúča pre žiadne aplikácie súvisiace s bezpečnosťou! To isté platí pre (väčšinu) systémov NTAG a Mifare Ultralight

Na výber je teda buď použitie profesionálneho systému, alebo sa pokúsiť použiť bezpečnejší systém RFID. Dostupné systémy sú Mifare Ultralight C, Mifare DESFire a Mifare Plus. Pretože existuje mnoho profesionálnych systémov, ktoré používajú tieto bezpečnejšie systémy, pre kutilskú komunitu prakticky neexistujú žiadne riešenia (existuje jedno riešenie DESFire založené na Teensy, ktoré je založené na drahšej oddeľovacej doske PN523). Karty DESFire sú navyše dosť drahé. Úlohou teda bolo nájsť lepšie a lacnejšie riešenie.

Prezentované riešenie poskytuje plný prístup k lacným kartám Mifare Ultralight „C“pomocou lacného čínskeho modulu RC522 DIY. Na základe tohto kódu môže byť zabezpečený Mifare Ultralight C použitý v kutilských aplikáciách.

Krok 1: Predpoklady

Predpoklady
Predpoklady

Napriek tomu, že je RC522 dobre navrhnutý, vo väčšine prípadov je zle zostavený, pretože niektoré komponenty sú zle dimenzované. To vedie k zlej povesti modulu, pretože má nízku citlivosť a nebudú identifikované všetky typy kariet. Zvlášť Mifare Ultralight C nebude identifikovaný ani nebude možné čítať karty.

Hlavným problémom je špecifikácia induktorov L1 a L2. Ako je popísané na https://ham.marsik.org/2017/04/using-cheap-rc522-nfc-reader-to-read.html. Len výmenou týchto induktorov za vhodné napr. FERROCORE CW1008-2200 zrazu RC522 ukazuje, aký je jeho skutočný potenciál.

Pred vyskúšaním daného kódu MUSÍTE VYMENIŤ induktory. S predinštalovanými induktormi to jednoducho nebude fungovať!

Na pozadí toho všetkého je, že karty Ultralight C sú dosť energeticky náročné. Túto energiu dodáva rádiofrekvenčné pole RC522. Vzhľadom na nízky prúd induktorov nie je energetické pole dostatočne silné na napájanie Ultralight C. Ostatné karty, ako napríklad Mifare Classic, potrebujú menej energie, a preto fungujú celkom stabilne.

Krok 2: Ako to funguje?

Ako to funguje?
Ako to funguje?
Ako to funguje?
Ako to funguje?
Ako to funguje?
Ako to funguje?
Ako to funguje?
Ako to funguje?

Ako teda môžete po úprave modulu RC522 používať Mifare Ulralight C pre svoju aplikáciu?

Ide o to, že Mifare Ultralight C podporuje autentifikáciu heslom na základe šifry 3DES. Použitím tohto hesla môže byť obsah karty urobený „iba na čítanie“alebo úplne neviditeľný pre neoprávneného používateľa.

Aby ste mohli používať túto ochranu heslom, je potrebné zapísať heslo na kartu a chrániť stránky. Po dokončení môžete kartu vo svojej aplikácii overiť buď tak, že požiadate o autentifikáciu na základe hesla alebo dodatočne pripravené údaje z chránenej oblasti. Iba vtedy, ak je to úspešné, viete, že poskytnutému UID na karte môžete dôverovať.

Dávajte si pozor: bez autentifikácie na základe hesla stále nemôžete dôverovať karte Mifare Ultralight C, pretože existujú aj „magické karty“, ktoré simulujú Ultralight C.

Každá karta nezávislá od technológie (ak má správnu frekvenciu) odpovie svojim UID, keď je napájaná RF poľom, a požiada o identifikáciu. Navyše poskytujú hodnotu SAK poskytujúcu minimálne informácie o type prítomnej karty. Bohužiaľ všetky Mifare Ultralight a NTAG sú identifikované ako typ syme (SAK = 0x00), vrátane Mifare Ultralight C. Takže pri hlasovaní o karty prinajmenšom hodnota SAK 0x00 naznačuje, že v čítačke môže byť Ultralight C.

Aby ste sa uistili, že ide o Ultralight C, je možné na kartu odoslať požiadavku na šifrovanú autentifikáciu. Ak toto NIE JE karta Ultralight C, tejto požiadavke nebude rozumieť a odpoveďou bude NAK (nie-acknolege).

Ak je to karta Ulralight C, dostanete odpoveď s 8 bajtmi. Týchto 8 bytov je náhodné číslo „B“(RndB) šifrované uloženým kľúčom na karte pomocou šifry 3DES.

Tento zašifrovaný RndB musí byť dešifrovaný pomocou rovnakého kľúča v programe. Toto náhodné číslo sa potom mierne upraví (otočí o jeden bajt → bajt 1 sa presunie do bajtu 8 a všetky ostatné bajty sa posunú o jeden bajt nižšie, potom sa nazýva RndB ‘). Program potom vygeneruje 8 -bajtové náhodné číslo „A“(RndA) a pripojí toto RndA k upravenému RndB ‘. Ten sa opäť zašifruje pomocou kľúča a odošle na kartu.

Karta dešifruje správu a skontroluje, či sa RndB’zhoduje s predtým vygenerovaným RndB na karte. Ak sa zhodujú, karta teraz vie, že program pozná kľúč.

V tomto okamihu program stále nevie, či karta pozná kľúč, a preto jej možno dôverovať. Aby sa to dosiahlo, karta teraz otočí dešifrovanú RndA o jeden bajt, potom tieto bajty zašifruje pomocou kľúča a odošle ich späť.

Program potom dešifruje odpoveď karty a skontroluje, či sa pôvodná RndA a zodpovedaná RndA zhodujú. IBA POTOM obe entity (program a karta) vedia, že zdieľajú znalosti o tom istom kľúči.

Tento proces sa používa iba na autentifikáciu. Všetka ďalšia komunikácia je vždy v „čistom texte“.

Aj keď existujú karty „magic Ultralight C“, na ktorých je možné zmeniť UID, samotný kľúč sa z karty nedá získať a šifra 3DES je pomerne bezpečná. Kľúč je 16 -bajtový, takže prístup k kľúču hrubou silou bude nejaký čas trvať.

Ako bolo uvedené, komunikácia pred autentifikáciou a po autentifikácii je vždy v čistom texte (aka nie je šifrovaná). Pri zápise nového kľúča na kartu je možné obsah kľúča vyčuchať pomocou správneho vybavenia. Kľúč preto prosím zapisujte iba v bezpečnom prostredí a kľúč uchovávajte v tajnosti.

Pri použití karty Ultralight C.

Karta Ultralight C má v sebe zabudovaných niekoľko funkcií zabezpečenia:

  1. Jednorazová pamäť (OTP). V tejto oblasti môžu byť zapísané bity, zbernica nie je vymazaná.
  2. 16 -bitové jednosmerné počítadlo. Tento počítadlo sa môže zvýšiť iba vtedy, ak je k nemu pristúpené.
  3. Ochrana stránok v pamäti proti „zápisu“alebo „čítaniu/zápisu“. Tieto stránky je možné čítať alebo upravovať iba vtedy, ak sú autentifikované pomocou kľúča.
  4. Zamrznutie / blokovanie jednotlivých stránok na ochranu pred akýmikoľvek úpravami.

V tomto kóde nie je implementované ani použitie OTP, 16 bitového počítadla, ani použitie blokovacieho bitu, ale je ho možné ľahko implementovať na základe informácií uvedených na stránke https://www.nxp.com/docs/en/data- list/MF0ICU2.pd…

Pretože ochrana kľúčom je pre používanie Mifare Ultralight C zásadná, sú k dispozícii všetky relevantné funkcie.

Všetky príkazy sú použité v sériovom monitore s „iba novým riadkom“a s 115200 Baud

  • „Auth 49454D4B41455242214E4143554F5946“požiada o autentifikáciu s daným kľúčom (v tomto prípade štandardným kľúčom Mifare Ultralight C)
  • „Výpis“vyprázdni obsah karty, pokiaľ je viditeľný. V prípade, že sú stránky chránené kľúčom, tieto stránky nemusia byť viditeľné, kým nedôjde k predchádzajúcej autentifikácii pomocou kľúča. V prvých dvoch stĺpcoch je uvedené, či sú stránky uzamknuté alebo je obmedzený prístup.
  • „NewKey 49454D4B41455242214E4143554F5946“napíše na kartu nový kľúč. Kľúč je zapísaný na stránky 44 až 47. Toto bude fungovať iba vtedy, ak tieto stránky nebudú uzamknuté ani chránené bez predchádzajúceho overenia.
  • „wchar 10 ahoj svet“napíše „ahoj svet“od strany 10. Opäť platí, že iba tieto stránky nie sú uzamknuté ani chránené bez predchádzajúceho overenia. Pri pokuse o zápis nad stranu 39 alebo pod stranu 4 sa zobrazí výzva chyba alebo údaje sú ignorované, pretože tieto stránky nie sú užívateľskou pamäťou.
  • „Whex 045ACBF44688“zapíše hexadecimálne hodnoty priamo do pamäte, platia predchádzajúce podmienky.
  • „Protect 30“chráni všetky stránky od strany 30 vyššie. V závislosti od povolenia je možné tieto stránky upravovať alebo čítať iba po predchádzajúcom overení kľúčom. Použitím parametra „protect“s hodnotami vyššími ako 47 nastavíte všetky stránky na „nechránené“VČETNE KĽÚČA na stranách 44-47 (ktoré je možné iba zmeniť, ale nie prečítať). Aby sa zabránilo zmene kľúča, ochrana by mala začať aspoň na strane 44.
  • „Setpbit 0“nastavuje ochranný bit a rozhoduje, či sú chránené stránky určené iba na čítanie („setpbit 1“) alebo ich nemožno čítať bez zápisu („setpbit 0“) bez predchádzajúcej autentifikácie pomocou kľúča.

Nie všetky príkazy je možné použiť ihneď po zistení karty. „Skládka“predtým na iný príkaz vždy pomôže.

Krok 3: Dôležité

  1. Program rozlišuje typy Ultralight čítaním strán 43 a 44. Ak je strana 43 čitateľná a strana 44 nie, pravdepodobne ide o Ultralight C. ALE, ak stranu 43 chránite pred čítaním/zápisom, karta už nie je rozpoznaná ako Ultralight C (na nič nemá žiadny vplyv) Správna identifikácia Ultralightu by sa mala vykonať pomocou autentifikácie pomocou kľúča (ten som z dôvodu stability neimplementoval).
  2. Pred použitím príkazov „setpbit“a „chrániť“je potrebné použiť príkaz „dump“, inak nebude známy stav ochrany stránok.
  3. Ak „čítate/zapisujete“ochranu prvých strán svojej karty, nebude to s týmto programom fungovať, pretože prvá strana sa neustále číta, aby sa zistilo, či je ešte karta prítomná. Keďže prvé dve stránky sú aj tak iba prečítané (je tam uložené UID), nemá zmysel ich chrániť.

Problémy so stabilitou

Tento kód používa „štandardnú“knižnicu RC522 pre Arduino a knižnicu 3DES z https://github.com/Octoate/ArduinoDES. Zatiaľ čo knižnica RC522 sa používa celkom bežne, knižnica 3DES sa nezdá byť taká rozšírená a musí sa nainštalovať ručne.

Kód bol testovaný na zariadení Arduino Uno. Ale pri jeho písaní som narazil na mnoho podivných problémov, pokiaľ ide o stabilitu. Buď moje programovacie schopnosti nie sú také dobré, jedna z použitých knižníc je nestabilná alebo zmiešanie knižníc nie je dobrý nápad.

Pri použití kódu na to pamätajte !!!

Jeho zmena alebo používanie iba jeho častí môže viesť k zvláštnemu správaniu, ako je napríklad zrútenie, tlačenie podivných vecí alebo získanie časových limitov alebo NAK pri čítaní z karty. To sa môže stať na akomkoľvek mieste v kóde (stálo ma to mnoho hodín ladenia). Ak nájdete dôvod (-y) toho, dajte mi prosím tip.

Odporúča: