Sadržaj:

Korištenje Mifare Ultralight C s RC522 na Arduinu: 3 koraka
Korištenje Mifare Ultralight C s RC522 na Arduinu: 3 koraka

Video: Korištenje Mifare Ultralight C s RC522 na Arduinu: 3 koraka

Video: Korištenje Mifare Ultralight C s RC522 na Arduinu: 3 koraka
Video: How to setup NFC on iPhone. #nfc 2024, Srpanj
Anonim
Korištenje Mifare Ultralight C s RC522 na Arduinu
Korištenje Mifare Ultralight C s RC522 na Arduinu

Korištenje RFID tehnologije za identifikaciju vlasnika kartica ili za autorizaciju da nešto učine (otvore vrata itd.) Prilično je uobičajen pristup. U slučaju DIY aplikacije, modul RC522 se široko koristi jer je prilično jeftin i za ovaj modul postoji mnogo koda.

U većini slučajeva UID kartice koristi se za "identifikaciju" vlasnika kartice, a kartice Mifare Classic koriste se jer su jeftine i često se uključuju pri kupnji modula RC522.

No, kao što možda znate, sustav Mifare Classic hakiran je već nekoliko godina i više se ne smatra sigurnim. Sustav šifriranja Crypto1 koji koriste klasične kartice može se nadvladati, a to su kartice za ponovno pisanje na kojima se podaci i UID mogu reprogramirati (čarobne kartice).

Stoga se za bilo koju sigurnosno relevantnu aplikaciju ne preporučuje uporaba Mifare Classic kartica! Isto vrijedi za (većinu) NTAG i Mifare Ultralight sustava

Stoga je izbor ili korištenje profesionalnog sustava ili pokušaj korištenja sigurnijeg RFID sustava. Dostupni sustavi su Mifare Ultralight C, Mifare DESFire i Mifare Plus. Budući da postoji mnogo profesionalnih sustava koji koriste ove sigurnije sustave, za DIY zajednicu praktički nema rješenja (postoji jedno rješenje temeljeno na Teensyju DESFire, koje se temelji na skupljoj ploči PN523). Osim toga, DESFire kartice su prilično skupe. Stoga je izazov bio pronaći bolje i jeftinije rješenje.

Predstavljeno rješenje pruža potpuni pristup jeftinim Mifare Ultralight “C” karticama pomoću jeftinog kineskog RC522 DIY modula. Na temelju ovog koda, sigurni Mifare Ultralight C može se koristiti u DIY aplikacijama.

Korak 1: Preduvjeti

Preduvjeti
Preduvjeti

Iako je RC522 dobro dizajniran, u većini je slučajeva loše izrađen jer su neke komponente loše dimenzionirane. To dovodi do loše reputacije modula jer ima nisku osjetljivost te neće biti identificirane sve vrste kartica. Posebno Mifare Ultralight C neće biti identificiran niti će biti moguće čitati kartice.

Glavni problem je specifikacija induktora L1 i L2. Kako je opisano na https://ham.marsik.org/2017/04/using-cheap-rc522-nfc-reader-to-read.html. Samo zamjenom ovih induktora na odgovarajuće, npr. FERROCORE CW1008-2200 odjednom RC522 pokazuje koliki je njegov stvarni potencijal.

Dakle, prije isprobavanja zadanog koda, MORATE ZAMJENITI induktore. Jednostavno neće raditi s unaprijed instaliranim induktorima!

Pozadina svega ovoga je da su Ultralight C kartice prilično gladne energije. Ovu energiju osigurava RF-polje RC522. Zbog niske amperaže induktora, energetsko polje jednostavno nije dovoljno snažno za napajanje Ultralight C. Druge kartice poput Mifare Classic trebaju samo manje energije i stoga rade prilično stabilno.

Korak 2: Kako to funkcionira?

Kako radi?
Kako radi?
Kako radi?
Kako radi?
Kako radi?
Kako radi?
Kako radi?
Kako radi?

Dakle, nakon izmjene modula RC522, kako možete koristiti Mifare Ulralight C za svoju aplikaciju?

Trik je u tome što Mifare Ultralight C podržava provjeru autentičnosti lozinke na temelju 3DES šifre. Korištenjem ove lozinke sadržaj kartice može se učiniti "samo za čitanje" ili potpuno nevidljiv neovlaštenom korisniku.

Da biste koristili ovu zaštitu lozinkom, zaporku je potrebno upisati na karticu, a stranice zaštititi. Nakon što završite, možete provjeriti karticu u svojoj aplikaciji ili samo zatražiti provjeru autentičnosti na temelju lozinke ili dodatno spremne podatke sa zaštićenog područja. Samo ako je ovo uspješno, znate da možete vjerovati danom UID -u na kartici.

Pazite: bez autentifikacije na temelju lozinke još uvijek ne možete vjerovati Mifare Ultralight C kartici jer postoje i "čarobne kartice" koje simuliraju Ultralight C.

Svaka kartica neovisna o tehnologiji (ako je na ispravnoj frekvenciji) odgovorit će svojim UID-om kada se napaja RF-poljem i zatražit će da se identificiraju. Osim toga, pružaju vrijednost SAK -a pružajući minimalne informacije o vrsti kartice koja je prisutna. Nažalost, svi Mifare Ultralight i NTAG identificiraju se kao vrsta syme -a (SAK = 0x00), uključujući Mifare Ultralight C. Tako da će pri ispitivanju kartica barem SAK vrijednost 0x00 dati naslutiti da bi na čitaču mogao postojati Ultralight C.

Kako biste bili sigurni da se radi o ultralakom C, na karticu se može poslati zahtjev za šifriranom provjerom autentičnosti. Ako ovo NIJE Ultralight C kartica, ovaj zahtjev neće biti shvaćen, a odgovor će biti NAK (not-acknolege).

Ako je ovo Ulralight C kartica, dobit ćete odgovor od 8 bajta. Tih 8 bajtova su slučajni broj “B” (RndB) šifriran pohranjenim ključem na kartici pomoću 3DES šifre.

Ovaj šifrirani RndB mora se dešifrirati pomoću istog ključa u programu. Taj se slučajni broj tada malo mijenja (rotiran za jedan bajt → bajt 1 će se pomaknuti na bajt 8, a svi ostali bajtovi se guraju za jedan bajt niže, zatim se zovu RndB’). Program zatim sam generira 8 -bitni slučajni broj "A" (RndA) i pridružuje taj RndA izmijenjenom RndB '. Ovo se ponovno šifrira pomoću ključa i šalje na karticu.

Kartica dešifrira poruku i provjerava odgovara li RndB’prethodno generiranom RndB na kartici. Ako se podudaraju, kartica sada zna da program zna ključ.

U ovom trenutku program još uvijek ne zna zna li kartica ključ i stoga mu se može vjerovati ili ne. Da bi se to postiglo, kartica sada rotira dešifrirani RndA za jedan bajt, zatim šifrira te bajtove pomoću ključa i šalje ih natrag.

Program će zatim dešifrirati odgovor kartice i provjeriti podudaraju li se izvorni RndA i odgovorljeni RndA. SAMO ONDA oba entiteta (program i kartica) znaju da dijele znanje o istom ključu.

Ovaj se postupak koristi samo za provjeru autentičnosti. Sva daljnja komunikacija uvijek je u "jasnom tekstu".

Iako postoje kartice “magic Ultralight C” na kojima se UID može mijenjati, sam ključ se ne može dobiti s kartice, a 3DES šifra je prilično sigurna. Ključ je ključ od 16 bajta, pa će pristup brute sile za dobivanje ključa potrajati neko vrijeme.

Kao što je navedeno, komunikacija prije autentifikacije i nakon autentifikacije uvijek je u čistom tekstu (tzv. Nije šifrirana). Prilikom pisanja novog ključa na karticu, sadržaj ključa može se otkriti korištenjem odgovarajuće opreme. Zato vas molimo da ključ napišete samo u sigurnom okruženju i ključ čuvate u tajnosti.

Kada koristite Ultralight C karticu

Ultralight C kartica ima više ugrađenih sigurnosnih značajki:

  1. Memorija jednokratnog programiranja (OTP). U ovo područje bitovi se mogu upisivati, sabirnica se ne briše.
  2. 16 -bitni jednosmjerni brojač. Ovaj brojač može se povećati samo ako mu se pristupi.
  3. Zaštita stranica od memorije za "pisanje" ili "čitanje/pisanje". Ove stranice se mogu čitati ili mijenjati samo ako su potvrđene ključem.
  4. Zamrzavanje / blokiranje pojedinačnih stranica radi zaštite od bilo kakvih izmjena.

Ni uporaba OTP-a, 16-bitnog brojača niti upotreba bita za blokiranje nisu implementirani u danom kodu, ali se lako mogu implementirati na temelju informacija danih na https://www.nxp.com/docs/en/data- list/MF0ICU2.pd…

Budući da je zaštita ključem bitna za korištenje Mifare Ultralight C, prisutne su sve relevantne funkcije.

Sve naredbe se koriste u serijskom monitoru sa "samo nova linija" i sa 115200 Baud

  • “Auth 49454D4B41455242214E4143554F5946” zatražit će autentifikaciju s datim ključem (u ovom slučaju standardni ključ Mifare Ultralight C)
  • "Dump" će izbaciti sadržaj kartice koliko je vidljiv. U slučaju da su stranice zaštićene ključem, te stranice možda neće biti vidljive do prethodne autentifikacije ključem. U prva dva stupca naznačeno je jesu li stranice zaključane ili je pristup ograničen.
  • “NewKey 49454D4B41455242214E4143554F5946” upisat će novi ključ na karticu. Ključ je upisan na stranice 44 do 47. To će funkcionirati samo ako te stranice nisu niti zaključane niti zaštićene bez prethodne autentifikacije.
  • "wchar 10 hello world" će pisati "hello world" počevši od stranice 10. Opet, ovo samo funkcioniranje stranica nije zaključano niti zaštićeno bez prethodne autentikacije. Kada pokušate napisati iznad stranice 39 ili ispod stranice 4, to će od vas zatražiti pogreška ili podaci se zanemaruju jer ove stranice nisu korisnička memorija.
  • “Whex 045ACBF44688” ispisat će heksadecimalne vrijednosti izravno u memoriju, primjenjuju se prethodni uvjeti.
  • “Zaštita 30” štiti sve stranice od stranice 30 naviše. Ovisno o dopuštenju, ove se stranice tada mogu mijenjati ili čitati tek nakon prethodne autentifikacije ključem. Korištenje "zaštite" s vrijednostima većim od 47 postavit će sve stranice na "nezaštićene" UKLJUČUJUĆI KLJUČ na stranicama 44-47 (koji se zatim može samo mijenjati, ali ne i čitati). Kako bi se spriječilo mijenjanje ključa, zaštita bi trebala početi barem na stranici 44.
  • "Setpbit 0" postavlja zaštitni bit i odlučuje hoće li se zaštićene stranice samo čitati ("setpbit 1") ili se neće moći čitati niti pisati ("setpbit 0") bez prethodne autentifikacije ključem.

Ne mogu se sve naredbe koristiti odmah nakon otkrivanja kartice. "Dump" prethodno na drugu naredbu uvijek pomaže.

Korak 3: Važno

  1. Program razlikuje vrste ultralakih čitanjem stranica 43 i 44. Ako je stranica 43 čitljiva, a stranica 44 ne, najvjerojatnije je riječ o Ultralakoj C. ALI, ako čitate/pišete, zaštitite stranicu 43, kartica više nije prepoznata kao Ultralaki C (nema nikakvog učinka na bilo što) Pravilnu identifikaciju Ultralakog treba obaviti autentifikacijom ključem (to nisam primijenio zbog stabilnosti).
  2. Prije uporabe naredbi “setpbit” i “protect” mora se upotrijebiti naredba “dump”, inače status zaštite stranica neće biti poznat.
  3. Ako "čitate/pišete" zaštitite prve stranice svoje kartice, neće više raditi s ovim programom jer se prva stranica stalno čita kako bi se vidjelo ima li još kartice. Budući da se prve dvije stranice ionako samo čitaju (UID je pohranjen tamo), nema smisla zaštititi ih.

Pitanja stabilnosti

Ovaj kôd koristi „standardnu“biblioteku RC522 za Arduino i 3DES biblioteku s https://github.com/Octoate/ArduinoDES. Dok se knjižnica RC522 dosta često koristi, čini se da 3DES knjižnica nije toliko raširena i da se mora instalirati ručno.

Kôd je testiran na Arduino Uno. No, dok sam ga pisao, naišao sam na mnoge čudne probleme u pogledu stabilnosti. Nekako ili moje vještine programiranja nisu tako dobre, jedna od korištenih knjižnica je nestabilna ili miješanje knjižnica nije dobra ideja.

Molimo vas da to imate na umu pri korištenju koda !!!

Promjena ili korištenje samo njegovih dijelova može dovesti do čudnog ponašanja poput rušenja, ispisa čudnih stvari ili isteka vremena ili NAK -a pri čitanju s kartice. To se može dogoditi na bilo kojem mjestu u kodu (koštalo me mnogo sati ispravljanja pogrešaka). Ako pronađete razloge za to, dajte mi savjet.

Preporučeni: