Sisällysluettelo:

Mifare Ultralight C: n käyttö RC522: n kanssa Arduinolla: 3 vaihetta
Mifare Ultralight C: n käyttö RC522: n kanssa Arduinolla: 3 vaihetta

Video: Mifare Ultralight C: n käyttö RC522: n kanssa Arduinolla: 3 vaihetta

Video: Mifare Ultralight C: n käyttö RC522: n kanssa Arduinolla: 3 vaihetta
Video: Mifare Ultralight operations - part1 2024, Marraskuu
Anonim
Mifare Ultralight C: n käyttö RC522: n kanssa Arduinolla
Mifare Ultralight C: n käyttö RC522: n kanssa Arduinolla

RFID -tekniikan käyttäminen kortinhaltijoiden tunnistamiseen tai luvan tekemiseen (oven avaaminen jne.) On melko yleinen tapa. DIY -sovelluksessa RC522 -moduulia käytetään laajalti, koska se on melko halpa ja tälle moduulille on paljon koodia.

Useimmissa tapauksissa kortin UID -tunnusta käytetään kortinhaltijan "tunnistamiseen", ja Mifare Classic -kortteja käytetään, koska ne ovat halpoja ja sisältyvät usein RC522 -moduulin ostamiseen.

Mutta kuten ehkä tiedät, Mifare Classic -järjestelmää on hakkeroitu jo muutaman vuoden ajan, eikä sitä pidetä enää turvallisena. Classic-korttien käyttämä salausjärjestelmä Crypto1 voidaan voittaa, ja ne ovat uudelleen kirjoitettavia kortteja, joissa UID-tiedot voidaan ohjelmoida uudelleen (taikakortit).

Mifare Classic -korttien käyttöä ei siis suositella turvallisuuteen liittyvissä sovelluksissa! Sama koskee (useimpia) NTAG- ja Mifare Ultralight -järjestelmiä

Joten valinta on joko käyttää ammattimaista järjestelmää tai yrittää käyttää turvallisempaa RFID -järjestelmää. Saatavilla olevat järjestelmät ovat Mifare Ultralight C, Mifare DESFire ja Mifare Plus. Koska monet ammattimaiset järjestelmät käyttävät näitä turvallisempia järjestelmiä, DIY -yhteisölle ei käytännössä ole ratkaisuja (on yksi Teensy -pohjainen DESFire -ratkaisu, joka perustuu kalliimpaan PN523 -murtokorttiin). Lisäksi DESFire -kortit ovat melko kalliita. Haasteena oli siis löytää parempi ja halvempi ratkaisu.

Esitetty ratkaisu tarjoaa täyden pääsyn halpiin Mifare Ultralight C -kortteihin käyttämällä halpaa kiinalaista RC522 DIY -moduulia. Tämän koodin perusteella turvallista Mifare Ultralight C: tä voidaan käyttää DIY -sovelluksissa.

Vaihe 1: Edellytykset

Edellytykset
Edellytykset

Vaikka RC522 on hyvin suunniteltu, se on useimmissa tapauksissa huonosti rakennettu, koska jotkut komponentit ovat huonosti mitoitettuja. Tämä johtaa moduulin huonoon maineeseen, koska sen herkkyys on heikko ja kaikkia korttityyppejä ei tunnisteta. Erityisesti Mifare Ultralight C: tä ei tunnisteta eikä kortteja voi lukea.

Suurin ongelma on induktorien L1 ja L2 erittely. Kuten on kuvattu osoitteessa https://ham.marsik.org/2017/04/using-cheap-rc522-nfc-reader-to-read.html. Vain vaihtamalla nämä induktorit sopiviin esim. FERROCORE CW1008-2200 yhtäkkiä RC522 näyttää sen todellisen potentiaalin.

Joten ennen kuin yrität annettua koodia, sinun on vaihdettava induktorit. Se ei vain toimi esiasennettujen induktorien kanssa!

Kaiken tämän taustalla on, että Ultralight C -kortit ovat melko energianhimoisia. Tämän energian tuottaa RC522 RF-kenttä. Induktorien alhaisen virrankulutuksen vuoksi energiakenttä ei ole tarpeeksi voimakas Ultralight C: n virran saamiseksi. Muut kortit, kuten Mifare Classic, tarvitsevat vain vähemmän virtaa ja toimivat siksi melko vakaasti.

Vaihe 2: Miten se toimii?

Kuinka se toimii?
Kuinka se toimii?
Kuinka se toimii?
Kuinka se toimii?
Kuinka se toimii?
Kuinka se toimii?
Kuinka se toimii?
Kuinka se toimii?

Joten miten RC522 -moduulin muokkaamisen jälkeen voit käyttää Mifare Ulralight C: tä sovellukseesi?

Temppu on, että Mifare Ultralight C tukee 3DES -salaukseen perustuvaa salasanatodennusta. Käyttämällä tätä salasanaa kortin sisällöstä voidaan tehdä "vain luku" tai kokonaan näkymätön luvattomalle käyttäjälle.

Tämän salasanasuojauksen käyttämiseksi salasana on kirjoitettava kortille ja sivut on suojattava. Kun olet valmis, voit tarkistaa kortin sovelluksessasi joko pyytämällä salasanapohjaista todennusta tai lisäksi valmiita tietoja suojatulta alueelta. Vain jos tämä onnistuu, tiedät, että voit luottaa kortissa olevaan UID -tunnukseen.

Varo: ilman salasanapohjaista todennusta et edelleenkään voi luottaa Mifare Ultralight C -korttiin, koska on olemassa myös”taikakortteja”, jotka simuloivat Ultralight C: tä.

Jokainen tekniikasta riippumaton kortti (jos taajuus on oikea) vastaa RFID-kentän virtalähteellä UID-tunnuksellaan ja pyytää tunnistamaan itsensä. Lisäksi ne tarjoavat SAK -arvon, joka tarjoaa minimaalista tietoa läsnä olevan kortin tyypistä. Valitettavasti kaikki Mifare Ultralight ja NTAG tunnistetaan syme -tyypiksi (SAK = 0x00), mukaan lukien Mifare Ultralight C. Joten kortteja pollattaessa ainakin SAK -arvo 0x00 antaa vihjeen siitä, että lukijassa saattaa olla Ultralight C.

Varmistaaksesi, että kyseessä on Ultralight C, kortille voidaan lähettää salatun todennuksen pyyntö. Jos tämä EI ole Ultrakevyt C-kortti, tätä pyyntöä ei ymmärretä, ja vastaus on NAK (not-acknolege).

Jos tämä on Ulralight C -kortti, saat 8 tavun vastauksen. Nämä 8 tavua ovat satunnaisluku “B” (RndB), joka on salattu kortille tallennetulla avaimella 3DES -salauksen avulla.

Tämä salattu RndB on purettava käyttämällä samaa avainta ohjelmassa. Tätä satunnaislukua muutetaan sitten hieman (kierretty yksi tavu → tavu 1 siirretään tavuun 8 ja kaikki muut tavut työnnetään yksi tavu alemmaksi, jota kutsutaan sitten RndB: ksi). Ohjelma luo sitten 8 tavun satunnaisluvun "A" (RndA) ja liittää tämän RndA: n muokattuun RndB: hen. Tämä salataan jälleen avaimella ja lähetetään kortille.

Kortti purkaa viestin salauksen ja tarkistaa, sopiiko RndB’aiemmin luotuun RndB: hen kortissa. Jos ne täsmäävät, kortti tietää nyt, että ohjelma tietää avaimen.

Tässä vaiheessa ohjelma ei vieläkään tiedä, tietääkö kortti avaimen ja voidaanko siksi luottaa vai ei. Tämän saavuttamiseksi kortti pyörii nyt purettua RndA: ta yhdellä tavulla, salaa sitten nämä tavut avaimella ja lähettää ne takaisin.

Ohjelma purkaa sitten kortin vastauksen salauksen ja tarkistaa, vastaako alkuperäinen RndA ja vastattu RndA. VAIN Silloin molemmat yksiköt (ohjelma ja kortti) tietävät jakavansa saman avaimen tiedot.

Tätä prosessia käytetään vain todentamiseen. Kaikki muu viestintä on aina "selkeää tekstiä".

Vaikka on olemassa”taika Ultralight C” -kortteja, joissa UID: tä voidaan muokata, itse avainta ei voi saada kortilta ja 3DES -salaus on melko suojattu. Avain on 16 tavun avain, joten raa'an voiman lähestymistapa avaimen saamiseen kestää jonkin aikaa.

Kuten todettu, viestintä ennen todentamista ja sen jälkeen on aina selkeää tekstiä (eli ei salattua). Kun kirjoitat kortille uutta avainta, avaimen sisältö voidaan haistaa oikeilla laitteilla. Joten kirjoita avain vain suojatussa ympäristössä ja pidä avain salassa.

Kun käytät Ultralight C -korttia

Ultralight C -kortissa on useita suojausominaisuuksia:

  1. Kertaohjelmointimuisti (OTP). Tällä alueella voidaan kirjoittaa bittejä, väylää ei poisteta.
  2. 16 -bittinen yksisuuntainen laskuri. Tämä laskuri voi kasvaa vain, kun sitä käytetään.
  3. Muistissa olevien sivujen "kirjoitus" tai "luku/kirjoitus" -suojaus. Näitä sivuja voidaan lukea tai muokata vain, jos ne on todennettu avaimella.
  4. Yksittäisten sivujen jäädyttäminen / estäminen mahdollisilta muutoksilta.

OTP: n, 16-bittisen laskurin tai estobitin käyttöä ei toteuteta annetussa koodissa, mutta ne voidaan helposti toteuttaa osoitteessa https://www.nxp.com/docs/en/data- arkki/MF0ICU2.pd…

Koska avainsuojaus on välttämätöntä Mifare Ultralight C: n käytössä, kaikki asiaankuuluvat toiminnot ovat käytettävissä.

Kaikkia komentoja käytetään sarjamonitorissa "vain uusi rivi" ja 115200 Baud

  • “Auth 49454D4B41455242214E4143554F5946” pyytää todennusta annetulla avaimella (tässä tapauksessa tavallinen Mifare Ultralight C -avain)
  • "Dump" tyhjentää kortin sisällön niin pitkälle kuin se näkyy. Jos sivut on suojattu avaimella, nämä sivut eivät ehkä näy ennen kuin edellinen avaimen todennus. Kahdessa ensimmäisessä sarakkeessa ilmoitetaan, onko sivut lukittu tai pääsyä rajoitettu.
  • "NewKey 49454D4B41455242214E4143554F5946" kirjoittaa uuden avaimen kortille. Avain kirjoitetaan sivuille 44 - 47. Tämä toimii vain, jos nämä sivut eivät ole lukittuja tai suojattuja ilman aiempaa todennusta.
  • "wchar 10 hello world" kirjoittaa "hello world" sivulta 10. Jälleen tämä vain sivujen teoksia ei ole lukittu eikä suojattu ilman aiempaa todennusta. Kun yrität kirjoittaa sivun 39 yläpuolelle tai sivun 4 alle, tämä kehottaa virhe tai tiedot jätetään huomiotta, koska nämä sivut eivät ole käyttäjän muistia.
  • "Whex 045ACBF44688" kirjoittaa heksadesimaaliarvot suoraan muistiin. Edelliset ehdot ovat voimassa.
  • "Suojaa 30" suojaa kaikki sivut sivulta 30 ylöspäin. Käyttöoikeudesta riippuen näitä sivuja voidaan muokata tai lukea vasta avaimen avulla tehdyn todennuksen jälkeen. Jos käytät "suojaa" -arvoa yli 47: llä, kaikki sivut asetetaan "suojaamattomiksi", SISÄLTÄVÄT AVAINSivut 44-47 (joita voidaan vain muokata mutta ei lukea). Avaimen muuttamisen estämiseksi suojauksen tulisi alkaa ainakin sivulta 44.
  • "Setpbit 0" asettaa suojausbitin ja päättää, ovatko suojatut sivut vain luku -arvoisia ("setpbit 1") vai ei voida lukea eikä kirjoittaa ("setpbit 0") ilman aiempaa todennusta avaimella.

Kaikkia komentoja ei voi käyttää heti kortin havaitsemisen jälkeen. Aiemmin "dump" toiselle komennolle auttaa aina.

Vaihe 3: Tärkeää

  1. Ohjelma erottaa ultrakevyt tyypit lukemalla sivut 43 ja 44. Jos sivu 43 on luettavissa ja sivu 44 ei, se on todennäköisesti ultrakevyt C. MUTTA, jos luet/kirjoitat suojaa sivun 43, korttia ei enää tunnisteta Ultralight C (ei vaikuta mihinkään) Ultralightin oikea tunnistaminen tulisi tehdä avaimella varustetun todennuksen kautta (en ottanut sitä käyttöön vakaussyistä).
  2. Ennen komentojen "setpbit" ja "protect" käyttöä on käytettävä komentoa "dump", muuten sivujen suojaustila ei ole tiedossa.
  3. Jos “luku/kirjoitus” suojaa korttisi ensimmäiset sivut, se ei enää toimi tämän ohjelman kanssa, koska ensimmäistä sivua luetaan jatkuvasti, jotta näet, onko kortti vielä läsnä. Koska kaksi ensimmäistä sivua ovat vain luettavissa (UID on tallennettu sinne), niiden suojaaminen ei ole järkevää.

Vakausongelmat

Tämä koodi käyttää "vakio" RC522 -kirjastoa Arduinolle ja 3DES -kirjastoa osoitteesta https://github.com/Octoate/ArduinoDES. Vaikka RC522 -kirjastoa käytetään melko yleisesti, 3DES -kirjasto ei näytä olevan niin laajalle levinnyt ja se on asennettava manuaalisesti.

Koodi on testattu Arduino Unolla. Mutta kirjoittaessani sitä kohtasin monia outoja ongelmia vakauden suhteen. Jotenkin ohjelmointitaitoni eivät ole kovin hyviä, yksi käytetyistä kirjastoista on epävakaa tai kirjastojen sekoittaminen ei ole hyvä idea.

Muista tämä, kun käytät koodia !!!

Sen muuttaminen tai vain osien käyttäminen voi johtaa outoon käyttäytymiseen, kuten kaatumiseen, outojen asioiden tulostamiseen tai aikakatkaisujen tai NAK: n saamiseen, kun luetaan kortilta. Tämä voi tapahtua missä tahansa koodin kohdassa (se maksoi minulle monta tuntia virheenkorjausta). Jos löydät syyn tähän, anna minulle vihje.

Suositeltava: