Obsah:

Použití Mifare Ultralight C s RC522 na Arduinu: 3 kroky
Použití Mifare Ultralight C s RC522 na Arduinu: 3 kroky

Video: Použití Mifare Ultralight C s RC522 na Arduinu: 3 kroky

Video: Použití Mifare Ultralight C s RC522 na Arduinu: 3 kroky
Video: Стандарт Mifare: обзор технологии, характеристики, принцип работы 2024, Červenec
Anonim
Použití Mifare Ultralight C s RC522 na Arduinu
Použití Mifare Ultralight C s RC522 na Arduinu

Používání technologie RFID k identifikaci držitelů karet nebo k autorizaci k něčemu (otevření dveří atd.) Je poměrně běžný přístup. V případě DIY aplikace je modul RC522 široce používán, protože je poměrně levný a pro tento modul existuje mnoho kódu.

Ve většině případů se k „identifikaci“držitele karty používá UID karty a karty Mifare Classic se používají, protože jsou levné a často jsou součástí nákupu modulu RC522.

Ale jak možná víte, systém Mifare Classic byl hacknut již několik let a již není považován za bezpečný. Šifrovací systém Crypto1 používaný klasickými kartami lze překonat a jsou to přepisovatelné karty, kde lze přeprogramovat data a UID (kouzelné karty).

Použití jakékoli karty Mifare Classic se proto pro jakoukoli aplikaci související s bezpečností nedoporučuje! Totéž platí pro (většinu) systémů NTAG a Mifare Ultralight

Volba je tedy buď použít profesionální systém, nebo se pokusit použít bezpečnější systém RFID. Dostupné systémy jsou Mifare Ultralight C, Mifare DESFire a Mifare Plus. Protože existuje mnoho profesionálních systémů využívajících tyto bezpečnější systémy, pro komunitu pro kutily neexistuje prakticky žádná řešení (existuje jedno řešení DESFire založené na Teensy, které je založeno na dražší desce PN523). Karty DESFire jsou navíc velmi drahé. Úkolem tedy bylo najít lepší a levnější řešení.

Prezentované řešení poskytuje plný přístup k levným kartám Mifare Ultralight „C“pomocí levného čínského modulu RC522 DIY. Na základě tohoto kódu lze bezpečný Mifare Ultralight C použít v kutilských aplikacích.

Krok 1: Předpoklady

Předpoklady
Předpoklady

Přestože je RC522 dobře navržen, je ve většině případů špatně sestaven, protože některé součásti jsou špatně dimenzovány. To vede ke špatné pověsti modulu, že má nízkou citlivost a nebudou identifikovány všechny typy karet. Zvláště Mifare Ultralight C nebude identifikován ani nebude možné číst karty.

Hlavním problémem je specifikace induktorů L1 a L2. Jak je popsáno na https://ham.marsik.org/2017/04/using-cheap-rc522-nfc-reader-to-read.html. Pouhou výměnou těchto induktorů za vhodné, např. FERROCORE CW1008-2200 najednou RC522 ukazuje, jaký je jeho skutečný potenciál.

Takže než vyzkoušíte daný kód, MUSÍTE VYMĚNIT tlumivky. S předinstalovanými tlumivkami to prostě nebude fungovat!

Na pozadí toho všeho je, že karty Ultralight C jsou energeticky dost náročné. Tuto energii zajišťuje rádiové pole RC522. Kvůli nízkému proudu induktorů není energetické pole dostatečně silné na napájení Ultralight C. Ostatní karty, jako je Mifare Classic, potřebují méně energie, a proto fungují docela stabilně.

Krok 2: Jak to funguje?

Jak to funguje?
Jak to funguje?
Jak to funguje?
Jak to funguje?
Jak to funguje?
Jak to funguje?
Jak to funguje?
Jak to funguje?

Jak tedy po úpravě modulu RC522 můžete pro svou aplikaci použít Mifare Ulralight C?

Jde o to, že Mifare Ultralight C podporuje autentizaci heslem na základě šifry 3DES. Použitím tohoto hesla může být obsah karty nastaven jako „pouze pro čtení“nebo zcela neviditelný pro neoprávněného uživatele.

Aby bylo možné používat tuto ochranu heslem, musí být heslo zapsáno na kartu a stránky musí být chráněny. Až budete hotovi, můžete kartu ve své aplikaci ověřit buď tím, že požádáte o ověření založené na hesle, nebo navíc připravená data z chráněné oblasti. Pouze pokud je to úspěšné, víte, že můžete důvěřovat poskytnutému UID na kartě.

Pozor: bez ověření založeného na hesle stále nemůžete důvěřovat kartě Mifare Ultralight C, protože existují také „kouzelné karty“, které simulují Ultralight C.

Každá karta nezávislá na technologii (pokud má správnou frekvenci) odpoví svým UID, když je napájena RF polem, a požádá o identifikaci. Navíc poskytují hodnotu SAK poskytující minimální informace o typu přítomné karty. Bohužel všechny Mifare Ultralight a NTAG identifikují jako typ syme (SAK = 0x00), včetně Mifare Ultralight C. Takže při dotazování na karty bude alespoň hodnota SAK 0x00 naznačovat, že na čtečce může být Ultralight C.

Abyste se ujistili, že se jedná o Ultralight C, lze na kartu odeslat požadavek na šifrovanou autentizaci. Pokud se nejedná o kartu Ultralight C, nebude tomuto požadavku porozuměno a odpovědí bude NAK (ne-acknolege).

Pokud se jedná o kartu Ulralight C, dostanete 8 bajtovou odpověď. Těchto 8 bytů je náhodné číslo „B“(RndB) šifrované uloženým klíčem na kartě pomocí šifry 3DES.

Tento zašifrovaný RndB musí být dešifrován pomocí stejného klíče v programu. Toto náhodné číslo je pak mírně upraveno (otočeno o jeden bajt → bajt 1 bude přesunut do bajtu 8 a všechny ostatní bajty budou posunuty o jeden bajt níže, pak se bude jmenovat RndB ‘). Program poté vygeneruje 8 bajtové náhodné číslo „A“(RndA) a připojí toto RndA k upravenému RndB ‘. To je opět zašifrováno pomocí klíče a odesláno na kartu.

Karta zprávu dešifruje a zkontroluje, zda se RndB’shoduje s dříve vygenerovaným RndB na kartě. Pokud se shodují, karta nyní ví, že program zná klíč.

V tomto okamžiku program stále neví, zda karta zná klíč, a proto jí lze důvěřovat nebo ne. Aby toho bylo dosaženo, karta nyní otočí dešifrovanou RndA o jeden bajt, poté tyto bajty zašifruje pomocí klíče a odešle zpět.

Program poté dešifruje odpověď karty a zkontroluje, zda se původní RndA a odpověděl RndA shodují. POUZE POTOM obě entity (program a karta) vědí, že sdílejí znalosti stejného klíče.

Tento proces se používá pouze k ověření. Veškerá další komunikace je vždy v „čistém textu“.

Ačkoli existují karty „Magic Ultralight C“, u nichž lze změnit UID, samotný klíč nelze z karty získat a šifra 3DES je poměrně bezpečná. Klíč je 16bajtový, takže přístup hrubou silou k získání klíče bude nějakou dobu trvat.

Jak již bylo řečeno, komunikace před autentizací a po autentizaci je vždy v čistém textu (aka není šifrována). Při zápisu nového klíče na kartu lze obsah klíče vyčichnout pomocí správného vybavení. Klíč prosím zapisujte pouze v zabezpečeném prostředí a klíč uchovávejte v tajnosti.

Při použití karty Ultralight C.

Karta Ultralight C má několik integrovaných bezpečnostních funkcí:

  1. Jednorázová paměť (OTP). V této oblasti lze zapisovat bity, sběrnice není odstraněna.
  2. 16bitové jednosměrné počítadlo. Tento čítač se může pouze zvýšit, pokud je k němu přistoupeno.
  3. Ochrana stránek v paměti proti „zápisu“nebo „čtení/zápisu“. Tyto stránky lze číst nebo upravovat, pouze pokud jsou ověřeny klíčem.
  4. Zamrzání / blokování jednotlivých stránek na ochranu před jakýmikoli úpravami.

Ani použití OTP, 16bitový čítač, ani použití blokovacího bitu není implementováno v daném kódu, ale může být snadno implementováno na základě informací uvedených v https://www.nxp.com/docs/en/data- list/MF0ICU2.pd…

Protože ochrana klíčem je pro používání Mifare Ultralight C nezbytná, jsou k dispozici všechny relevantní funkce.

Všechny příkazy jsou použity v sériovém monitoru s „pouze novým řádkem“a s 115200 Baud

  • „Auth 49454D4B41455242214E4143554F5946“požádá o autentizaci pomocí daného klíče (v tomto případě standardní klíč Mifare Ultralight C)
  • „Dump“uloží obsah karty, pokud je viditelný. V případě, že jsou stránky chráněny klíčem, nemusí být tyto stránky viditelné, dokud nedojde k předchozímu ověření pomocí klíče. V prvních dvou sloupcích je uvedeno, zda jsou stránky zamčené nebo je přístup omezen.
  • „NewKey 49454D4B41455242214E4143554F5946“napíše na kartu nový klíč. Klíč je zapsán na stránky 44 až 47. To bude fungovat pouze v případě, že tyto stránky nebudou bez předchozího ověření ani zamčeny, ani chráněny.
  • „wchar 10 hello world“napíše „hello world“počínaje stranou 10. Opět platí, že pouze tato díla stránek nejsou uzamčena ani chráněna bez předchozího ověření. Při pokusu o zápis nad stránku 39 nebo pod stránku 4 to vyvolá výzvu chyba nebo data jsou ignorována, protože tyto stránky nejsou uživatelskou pamětí.
  • „Whex 045ACBF44688“zapíše hexadecimální hodnoty přímo do paměti, platí předchozí podmínky.
  • „Protect 30“chrání všechny stránky od strany 30 výše. V závislosti na povolení lze tyto stránky poté upravovat nebo číst pouze po předchozím ověření klíčem. Použitím „chránit“s hodnotami vyššími než 47 nastavíte všechny stránky na „nechráněné“VČETNĚ KLÍČE na stranách 44–47 (které lze pouze upravit, ale ne přečíst). Aby se zabránilo změně klíče, ochrana by měla začínat alespoň na straně 44.
  • „Setpbit 0“nastavuje ochranný bit a rozhoduje, zda jsou chráněné stránky pouze pro čtení („setpbit 1“), nebo je nelze číst bez zápisu („setpbit 0“) bez předchozí autentizace klíčem.

Ne všechny příkazy lze použít ihned po zjištění karty. Vždy pomůže „výpis“na jiný příkaz.

Krok 3: Důležité

  1. Program rozlišuje mezi typy Ultralight čtením na straně 43 a 44. Pokud je stránka 43 čitelná a strana 44 ne, jedná se s největší pravděpodobností o Ultralight C. ALE, pokud stránku 43 chráníte proti čtení/zápisu, karta již není rozpoznána jako Ultralight C (nemá na nic vliv) Správnou identifikaci Ultralightu je třeba provést pomocí autentizace klíčem (já jsem to z důvodu stability neimplementoval).
  2. Před použitím příkazů „setpbit“a „protect“je třeba použít příkaz „dump“, jinak nebude znám stav ochrany stránek.
  3. Pokud „čtete/zapisujete“ochranu prvních stránek své karty, nebude s tímto programem nadále fungovat, protože se první stránka neustále čte, aby se zjistilo, zda je karta stále přítomna. Jelikož se první dvě stránky stejně čtou (je tam uloženo UID), nemá smysl je chránit.

Problémy se stabilitou

Tento kód používá „standardní“knihovnu RC522 pro Arduino a knihovnu 3DES z https://github.com/Octoate/ArduinoDES. Zatímco knihovna RC522 je zcela běžně používaná, knihovna 3DES se nezdá tak rozšířená a musí být nainstalována ručně.

Kód byl testován na Arduino Uno. Ale při psaní jsem narazil na mnoho podivných problémů, pokud jde o stabilitu. Nějak buď moje programovací schopnosti nejsou tak dobré, jedna z použitých knihoven je nestabilní nebo míchání knihoven není dobrý nápad.

Pamatujte na to při používání kódu !!!

Jeho změna nebo používání pouze jeho částí může vést ke zvláštnímu chování, jako je shazování, tisk podivných věcí nebo získání časových limitů nebo NAK při čtení z karty. To se může stát kdekoli v kódu (stálo mě to mnoho hodin ladění). Pokud najdete důvod (důvody), dejte mi prosím nápovědu.

Doporučuje: