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, Juli
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 ovlaštenje da se nešto učini (otvori vrata itd.) Prilično je uobičajen pristup. U slučaju DIY aplikacije, modul RC522 se široko koristi jer je prilično jeftin i postoji mnogo koda za ovaj modul.

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 kupovini modula RC522.

Ali kao što možda znate, sistem Mifare Classic hakovan je nekoliko godina i više se ne smatra sigurnim. Sistem šifriranja Crypto1 koji koriste klasične kartice može se prevladati, a to su kartice za višekratno upisivanje gdje se podaci i UID mogu reprogramirati (čarobne kartice).

Stoga se za bilo koju sigurnosno relevantnu aplikaciju ne preporučuje upotreba Mifare Classic kartica! Isto se odnosi na (većinu) NTAG i Mifare Ultralight sistema

Dakle, izbor je ili korištenje profesionalnog sistema ili pokušaj korištenja sigurnijeg RFID sistema. Dostupni sistemi su Mifare Ultralight C, Mifare DESFire i Mifare Plus. Kako postoji mnogo profesionalnih sistema koji koriste ove sigurnije sisteme, za DIY zajednicu praktično nema rješenja (postoji jedno rješenje temeljeno na Teensyju DESFire, koje je zasnovano na skupljoj PN523 probojnoj ploči). 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 koristeći jeftini kineski RC522 DIY modul. Na temelju ovog koda, sigurni Mifare Ultralight C može se koristiti u DIY aplikacijama.

Korak 1: Preduslovi

Preduslovi
Preduslovi

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 i neće biti identificirane sve vrste kartica. Posebno Mifare Ultralight C neće biti identifikovan niti će biti moguće čitati kartice.

Glavni problem je specifikacija induktora L1 i L2. Kao što 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 pokušaja davanja 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 daje 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 to radi?
Kako to radi?
Kako to radi?
Kako to radi?
Kako to radi?
Kako to radi?
Kako to radi?
Kako to 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 osnovu 3DES šifre. Korištenjem ove lozinke sadržaj kartice može biti „samo za čitanje“ili potpuno nevidljiv neovlaštenom korisniku.

Da biste koristili ovu zaštitu lozinkom, lozinku je potrebno upisati na karticu, a stranice zaštititi. Kada završite, možete provjeriti karticu u svojoj aplikaciji ili samo traženjem autentifikacije zasnovane na lozinki ili dodatno spremnih podataka iz zaštićenog područja. Samo ako je ovo uspješno, znate da možete vjerovati danom UID -u na kartici.

Pazite: bez autentifikacije zasnovane na lozinci 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) će odgovoriti sa svojim UID-om kada se napaja RF-poljem i zatražiti da se identificiraju. Osim toga, oni pružaju vrijednost SAK -a pružajući minimalne informacije o vrsti kartice koja je prisutna. Nažalost, svi Mifare Ultralight i NTAG se identificiraju kao vrsta sima (SAK = 0x00), uključujući Mifare Ultralight C. Tako da će prilikom anketiranja za kartice barem SAK vrijednost 0x00 nagovijestiti da bi na čitaču mogao postojati Ultralight C.

Da biste bili sigurni da se radi o Ultralight C -u, na karticu se može poslati zahtjev za šifriranu autentifikaciju. 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 bajtova. Tih 8 bajtova su nasumični 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 -bajtni slučajni broj "A" (RndA) i dodaje ovaj RndA izmijenjenom RndB -u. Ovo se ponovo š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 odgovaraju li originalni RndA i odgovorljeni RndA. SAMO ONDA oba entiteta (program i kartica) znaju da dijele znanje o istom ključu.

Ovaj proces se 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 bajtova, pa će pristup brute silom za dobivanje ključa potrajati neko vrijeme.

Kao što je navedeno, komunikacija prije provjere autentičnosti i nakon provjere autentičnosti uvijek je u čistom tekstu (poznat i kao nije šifriran). Prilikom upisivanja 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 čuvate ključ u tajnosti.

Kada koristite Ultralight C karticu

Ultralight C kartica ima ugrađene više sigurnosnih funkcija:

  1. Memorija jednokratnog programiranja (OTP). U ovom području bitovi se mogu upisivati, sabirnica se ne briše.
  2. 16 -bitni jednosmerni brojač. Ovaj brojač može se povećati samo kada mu se pristupi.
  3. Zaštita od "pisanja" ili "čitanja/pisanja" stranica u memoriji. 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 upotreba OTP-a, 16-bitnog brojača niti upotreba bita za blokiranje nisu implementirani u danom kodu, ali se lako mogu implementirati na osnovu informacija navedenih na https://www.nxp.com/docs/en/data- list/MF0ICU2.pd…

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

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

  • “Auth 49454D4B41455242214E4143554F5946” će zatražiti autentifikaciju s datim ključem (u ovom slučaju standardni Mifare Ultralight C ključ)
  • „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 prve dvije kolone naznačeno je jesu li stranice zaključane ili je pristup ograničen.
  • “NewKey 49454D4B41455242214E4143554F5946” će upisati novi ključ na karticu. Ključ je upisan na stranice 44 do 47. Ovo će funkcionirati samo ako ove stranice nisu niti zaključane niti zaštićene bez prethodne autentikacije.
  • "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. Prilikom pokušaja pisanja iznad stranice 39 ili ispod stranice 4 ovo će zatražiti greška ili podaci se zanemaruju jer ove stranice nisu korisnička memorija.
  • “Whex 045ACBF44688” će pisati heksadecimalne vrijednosti izravno u memoriju, primjenjuju se prethodni uvjeti.
  • “Protect 30” štiti sve stranice od stranice 30 naviše. Ovisno o dozvoli, ove se stranice tada mogu mijenjati ili čitati samo 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 tada 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 da li se zaštićene stranice samo za čitanje (“setpbit 1”) ili se ne mogu čitati niti pisati (“setpbit 0”) bez prethodne autentifikacije ključem.

Ne mogu se sve komande 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 nije, 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 uticaja na bilo šta) Pravilnu identifikaciju ultralakog treba obaviti autentifikacijom ključem (to nisam implementirao iz razloga stabilnosti).
  2. Prije korištenja 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 da li je kartica još prisutna. Kako 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 sa https://github.com/Octoate/ArduinoDES. Dok se biblioteka RC522 često koristi, 3DES biblioteka nije toliko rasprostranjena i mora se instalirati ručno.

Kôd je testiran na Arduino Uno. Ali dok sam je pisao, naišao sam na mnoge čudne probleme u vezi sa stabilnošću. Nekako ili moje vještine programiranja nisu tako dobre, jedna od korištenih biblioteka je nestabilna ili miješanje biblioteka nije dobra ideja.

Molimo vas da ovo imate na umu prilikom korištenja koda !!!

Promjena ili korištenje samo njegovih dijelova može dovesti do čudnog ponašanja poput rušenja, ispisivanja č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 grešaka). Ako pronađete razloge za ovo, molim vas dajte mi savjet.

Preporučuje se: