Turinys:

„Mifare Ultralight C“naudojimas su „RC522“„Arduino“: 3 žingsniai
„Mifare Ultralight C“naudojimas su „RC522“„Arduino“: 3 žingsniai

Video: „Mifare Ultralight C“naudojimas su „RC522“„Arduino“: 3 žingsniai

Video: „Mifare Ultralight C“naudojimas su „RC522“„Arduino“: 3 žingsniai
Video: Mifare Ultralight operations - part1 2024, Lapkritis
Anonim
„Mifare Ultralight C“naudojimas su „RC522“„Arduino“
„Mifare Ultralight C“naudojimas su „RC522“„Arduino“

Naudoti RFID technologiją kortelių turėtojams atpažinti arba įgalioti ką nors daryti (atidaryti duris ir pan.) Yra gana įprastas metodas. „Pasidaryk pats“atveju RC522 modulis yra plačiai naudojamas, nes jis yra gana pigus ir šiam moduliui yra daug kodo.

Daugeliu atvejų kortelės turėtojui „identifikuoti“naudojamas kortelės UID, o naudojamos „Mifare Classic“kortelės, nes jos yra pigios ir dažnai įtraukiamos perkant RC522 modulį.

Tačiau, kaip žinote, „Mifare Classic“sistema buvo nulaužta keletą metų ir ji nebelaikoma saugia. Klasikinių kortelių naudojamą šifravimo sistemą „Crypto1“galima įveikti, o tai yra perrašomos kortelės, kuriose galima perprogramuoti UID duomenis (stebuklingos kortelės).

Taigi bet kuriai su saugumu susijusiai programai nerekomenduojama naudoti „Mifare Classic“kortelių! Tas pats pasakytina apie (daugumą) NTAG ir „Mifare Ultralight“sistemų

Taigi pasirinkimas yra arba naudoti profesionalią sistemą, arba bandyti naudoti saugesnę RFID sistemą. Galimos sistemos yra „Mifare Ultralight C“, „Mifare DESFire“ir „Mifare Plus“. Kadangi yra daug profesionalių sistemų, naudojančių šias saugesnes sistemas, „pasidaryk pats“bendruomenei praktiškai nėra jokių sprendimų (yra vienas „Teensy“pagrįstas „DESFire“sprendimas, kurio pagrindas yra brangesnė PN523 atskyrimo plokštė). Be to, „DESFire“kortelės yra gana brangios. Taigi iššūkis buvo rasti geresnį ir pigesnį sprendimą.

Pateiktas sprendimas suteikia visišką prieigą prie pigių „Mifare Ultralight“C “kortelių, naudojant pigų kinišką„ RC522 DIY “modulį. Remiantis šiuo kodu, saugų „Mifare Ultralight C“galima naudoti „pasidaryk pats“programose.

1 žingsnis: išankstinės sąlygos

Sąlygos
Sąlygos

Nors RC522 yra gerai suprojektuotas, daugeliu atvejų jis yra prastai sukonstruotas, nes kai kurie komponentai yra prastai išmatuoti. Dėl to bloga modulio reputacija yra ta, kad jis turi mažą jautrumą ir nebus identifikuojamos visų tipų kortelės. Ypač „Mifare Ultralight C“nebus atpažintas ir nebus galima perskaityti kortelių.

Pagrindinė problema yra induktorių L1 ir L2 specifikacija. Kaip aprašyta https://ham.marsik.org/2017/04/using-cheap-rc522-nfc-reader-to-read.html. Tiesiog pakeitus šiuos induktorius į atitinkamus pvz. FERROCORE CW1008-2200 staiga RC522 parodo tikrąjį jo potencialą.

Taigi prieš bandydami nurodytą kodą, PRIVALOTE pakeisti induktorius. Tai tiesiog neveiks su iš anksto įdiegtais induktoriais!

Visa tai yra ta, kad „Ultralight C“kortelės yra labai alkanos energijos. Šią energiją teikia RC522 RF laukas. Dėl mažo induktorių srovės stiprumo energijos laukas nėra pakankamai galingas, kad galėtų maitinti „Ultralight C“.

2 veiksmas: kaip tai veikia?

Kaip tai veikia?
Kaip tai veikia?
Kaip tai veikia?
Kaip tai veikia?
Kaip tai veikia?
Kaip tai veikia?
Kaip tai veikia?
Kaip tai veikia?

Taigi, pakeitus RC522 modulį, kaip galite naudoti „Mifare Ulralight C“savo programai?

Faktas yra tas, kad „Mifare Ultralight C“palaiko slaptažodžio autentifikavimą, pagrįstą 3DES šifru. Naudojant šį slaptažodį, kortelės turinys gali būti „tik skaitomas“arba visiškai nematomas neteisėtam vartotojui.

Norint naudoti šią slaptažodžio apsaugą, slaptažodis turi būti įrašytas į kortelę ir puslapiai turi būti apsaugoti. Baigę galite patvirtinti kortelę savo programoje tiesiog paprašydami slaptažodžiu pagrįsto autentifikavimo arba papildomai paruoštų duomenų iš saugomos teritorijos. Tik jei tai pavyks, žinosite, kad galite pasitikėti kortelėje pateiktu UID.

Saugokitės: be slaptažodžiu pagrįsto autentifikavimo vis tiek negalite pasitikėti „Mifare Ultralight C“kortele, nes yra ir „stebuklingų kortelių“, kurios imituoja „Ultralight C“.

Kiekviena nuo technologijos nepriklausoma kortelė (jei yra tinkamo dažnio) reaguos su savo UID, kai bus maitinama RF lauko, ir paprašys identifikuoti save. Be to, jie pateikia SAK vertę, suteikiančią minimalią informaciją apie esamos kortelės tipą. Deja, visi „Mifare Ultralight“ir „NTAG“yra identifikuojami kaip „syme“tipas (SAK = 0x00), įskaitant „Mifare Ultralight C“..

Kad įsitikintumėte, jog tai „Ultralight C“, į kortelę galima nusiųsti užšifruoto autentifikavimo užklausą. Jei tai nėra „Ultralight C“kortelė, ši užklausa nebus suprantama, o atsakymas bus NAK (not-acknolege).

Jei tai „Ulralight C“kortelė, gausite 8 baitų atsakymą. Šie 8 baitai yra atsitiktinis skaičius „B“(RndB), užšifruotas kortelėje esančiu raktu, naudojant 3DES šifrą.

Šis užšifruotas RndB turi būti iššifruojamas naudojant tą patį programos raktą. Tada šis atsitiktinis skaičius yra šiek tiek pakeistas (pasuktas vienu baitu → 1 baitas bus perkeltas į 8 baitą, o visi kiti baitai bus stumiami vienu baitu žemiau, tada vadinami RndB “). Tada programa pati sukuria 8 baitų atsitiktinį skaičių „A“(RndA) ir prideda šį RndA prie modifikuoto RndB “. Tai vėl užšifruojama naudojant raktą ir siunčiama į kortelę.

Kortelė iššifruoja pranešimą ir patikrina, ar „RndB“atitinka anksčiau sukurtą RndB kortelėje. Jei jie sutampa, kortelė dabar žino, kad programa žino raktą.

Šiuo metu programa vis dar nežino, ar kortelė žino raktą, todėl ja galima pasitikėti, ar ne. Norėdami tai pasiekti, kortelė dabar pasuka iššifruotą RndA vienu baitu, tada šifruoja šiuos baitus naudodami raktą ir siunčia juos atgal.

Tada programa iššifruos kortelės atsakymą ir patikrins, ar originalus RndA ir atsakytas RndA sutampa. TIK tada abu subjektai (programa ir kortelė) žino, kad jie dalijasi to paties rakto žiniomis.

Šis procesas naudojamas tik autentifikavimui. Visas tolesnis bendravimas visada vyksta „aiškiu tekstu“.

Nors yra „stebuklingų itin lengvų C“kortelių, kuriose UID galima keisti, paties rakto iš kortelės gauti negalima, o 3DES šifras yra gana saugus. Raktas yra 16 baitų raktas, todėl brutalios jėgos metodas norint gauti raktą užtruks šiek tiek laiko.

Kaip minėta, bendravimas prieš autentifikavimą ir po autentifikavimo visada vyksta aiškiu tekstu (dar neužšifruotu). Rašant naują raktą į kortelę, rakto turinį galima užuosti naudojant tinkamą įrangą. Taigi prašome parašyti raktą tik saugioje aplinkoje ir saugoti raktą.

Kai naudojate „Ultralight C“kortelę

„Ultralight C“kortelėje yra įdiegtos kelios saugos funkcijos:

  1. Vienkartinio programavimo (OTP) atmintis. Šioje srityje galima rašyti bitus, autobusas neištrinamas.
  2. 16 bitų vienpusis skaitiklis. Šis skaitiklis gali padidėti tik tada, kai jis pasiekiamas.
  3. Atminties puslapių apsauga „rašyti“arba „skaityti/rašyti“. Tik jei autentifikuojama raktu, šiuos puslapius galima skaityti arba keisti.
  4. Atskirų puslapių užšaldymas / blokavimas, siekiant apsaugoti nuo bet kokių pakeitimų.

Nei OTP, nei 16 bitų skaitiklis, nei blokavimo bitų naudojimas nėra įgyvendinami nurodytame kode, tačiau gali būti lengvai įdiegti remiantis informacija, pateikta https://www.nxp.com/docs/en/data- sheet/MF0ICU2.pd…

Kadangi apsauga naudojant raktą yra būtina norint naudoti „Mifare Ultralight C“, yra visos atitinkamos funkcijos.

Visos komandos naudojamos serijiniame monitoriuje su „tik nauja eilute“ir su 115200 Baud

  • „Auth 49454D4B41455242214E4143554F5946“paprašys autentifikavimo naudojant nurodytą raktą (šiuo atveju standartinis „Mifare Ultralight C“raktas)
  • „Dump“išmes kortelės turinį tiek, kiek jis matomas. Jei puslapiai yra apsaugoti raktu, šie puslapiai gali būti nematomi iki ankstesnio autentifikavimo naudojant raktą. Pirmuose dviejuose stulpeliuose nurodoma, ar puslapiai užrakinti, ar prieiga ribojama.
  • „NewKey 49454D4B41455242214E4143554F5946“parašys naują kortelės raktą. Raktas parašytas 44–47 puslapiuose. Tai veiks tik tuo atveju, jei šie puslapiai nebus užrakinti ar apsaugoti be ankstesnio autentifikavimo.
  • „wchar 10 hello world“rašys „hello world“, pradedant nuo 10 puslapio. Vėlgi, tai tik puslapių darbai nėra užrakinti ir apsaugoti be ankstesnio autentifikavimo. Bandant rašyti aukščiau 39 arba žemiau 4 psl. klaida ar duomenys ignoruojami, nes šie puslapiai nėra vartotojo atmintis.
  • „Whex 045ACBF44688“įrašys Hex reikšmes tiesiai į atmintį, taikomos ankstesnės sąlygos.
  • „Protect 30“apsaugo visus puslapius nuo 30 puslapio į viršų. Priklausomai nuo leidimo, šiuos puslapius galima modifikuoti arba skaityti tik po išankstinio autentifikavimo naudojant raktą. Naudojant „protect“, kurio vertės yra didesnės nei 47, visi puslapiai bus „neapsaugoti“, ĮSKAIČIANT RAKTĄ 44–47 puslapiuose (kuriuos galima tik keisti, bet neskaityti). Siekiant išvengti rakto pakeitimo, apsauga turėtų prasidėti bent nuo 44 psl.
  • „Setpbit 0“nustato apsaugos bitą ir nusprendžia, ar saugomi puslapiai yra tik skaitomi („setpbit 1“), ar jų negalima skaityti nerašant („setpbit 0“) be ankstesnio autentifikavimo su raktu.

Ne visos komandos gali būti naudojamos iškart po to, kai buvo aptikta kortelė. „Išmetimas“anksčiau kitai komandai visada padeda.

3 žingsnis: svarbu

  1. Programa atskiria „Ultralight“tipus skaitydama 43 ir 44 puslapius. Jei 43 puslapis yra skaitomas, o 44 puslapis ne, greičiausiai tai yra „Ultralight C“. „Ultralight C“(neturi jokios įtakos) Tinkamas „Ultralight“identifikavimas turėtų būti atliktas naudojant autentifikavimą su raktu (dėl stabilumo priežasčių to neįdiegiau).
  2. Prieš naudojant komandas „setpbit“ir „protect“, reikia naudoti komandą „dump“, kitaip puslapių apsaugos būsena nebus žinoma.
  3. Jei „skaitote/rašote“apsaugote pirmuosius savo kortelės puslapius, ji nebeveiks su šia programa, nes pirmasis puslapis yra nuolat skaitomas, kad pamatytumėte, ar kortelė vis dar yra. Kadangi pirmieji du puslapiai vis tiek skaitomi tik (UID yra saugomas ten), nėra prasmės juos saugoti.

Stabilumo problemos

Šis kodas naudoja „standartinę“„Arduino“RC522 biblioteką ir 3DES biblioteką iš https://github.com/Octoate/ArduinoDES. RC522 biblioteka yra gana dažnai naudojama, tačiau 3DES biblioteka nėra tokia plačiai paplitusi ir turi būti įdiegta rankiniu būdu.

Kodas buvo išbandytas „Arduino Uno“. Tačiau rašydamas jį susidūriau su daugybe keistų problemų, susijusių su stabilumu. Kažkaip mano programavimo įgūdžiai nėra tokie geri, viena iš naudojamų bibliotekų yra nestabili arba maišyti bibliotekas nėra gera idėja.

Atminkite tai naudodami kodą !!!

Pakeitus jį arba naudojant tik jo dalis, gali atsirasti keista elgsena, pvz., Sudužti, spausdinti keistus dalykus ar gauti skirtojo laiko arba NAK, kai skaitoma iš kortelės. Tai gali atsitikti bet kurioje kodo vietoje (man kainavo daug valandų derinimo). Jei radote to priežastį (-es), duokite man užuominą.

Rekomenduojamas: