Kazalo:

Uporaba Mifare Ultralight C z RC522 na Arduinu: 3 koraki
Uporaba Mifare Ultralight C z RC522 na Arduinu: 3 koraki

Video: Uporaba Mifare Ultralight C z RC522 na Arduinu: 3 koraki

Video: Uporaba Mifare Ultralight C z RC522 na Arduinu: 3 koraki
Video: R80UF NFC čitalec Keyboad Emulator za ID čipa 2024, November
Anonim
Uporaba Mifare Ultralight C z RC522 na Arduinu
Uporaba Mifare Ultralight C z RC522 na Arduinu

Uporaba tehnologije RFID za identifikacijo imetnikov kartic ali dovoliti, da narediš nekaj (odpiranje vrat itd) je dokaj pogost pristop. V primeru DIY uporabe je RC522 modul pogosto uporablja, saj je dokaj poceni in obstaja veliko kode za ta modul.

V večini primerov se UID kartice uporablja za "identifikacijo" imetnika kartice, kartice Mifare Classic pa se uporabljajo, ker so poceni in so pogosto vključene pri nakupu modula RC522.

Ampak kot morda veste, je bil sistem Mifare Classic vdrl za nekaj let in se ne šteje kot varen več. Šifrirni sistem Crypto1, ki ga uporabljajo klasične kartice, je mogoče premagati in so kartice za večkratno zapisovanje, kjer je mogoče podatke programirati UID (čarobne kartice).

Zato za uporabo v zvezi z varnostjo uporaba kartic Mifare Classic ni priporočljiva! Enako velja za (večino) sistemov NTAG in Mifare Ultralight

Zato je izbira bodisi uporaba profesionalnega sistema bodisi poskus varnejšega sistema RFID. Na voljo so sistemi Mifare Ultralight C, Mifare DESFire in Mifare Plus. Ker obstaja veliko profesionalnih sistemov, ki uporabljajo te bolj varne sisteme, za skupnost DIY tako rekoč ni rešitev (obstaja ena rešitev Teensy DESFire, ki temelji na dražji plošči PN523). Poleg tega so kartice DESFire precej drage. Zato je bil izziv najti boljšo in cenejšo rešitev.

Predstavljena rešitev ponuja neomejen dostop do poceni Mifare Ultralight "C" kartice s pomočjo poceni kitajski RC522 DIY modul. Na podlagi te kode se lahko varni Mifare Ultralight C uporablja v aplikacijah DIY.

1. korak: Predpogoji

Predpogoji
Predpogoji

Čeprav je RC522 dobro zasnovan, je v večini primerov slabo izdelan, saj so nekatere komponente slabo dimenzionirane. To vodi v slab ugled modula, ker ima nizko občutljivost in ne bodo identificirane vse vrste kartic. Še posebej Mifare Ultralight C ne bo niti identificiran niti kartic ne bo mogoče prebrati.

Glavni problem je specifikacija induktorjev L1 in L2. Kot je opisano na https://ham.marsik.org/2017/04/using-cheap-rc522-nfc-reader-to-read.html. Že z zamenjavo teh induktorjev na ustrezne npr. FERROCORE CW1008-2200 nenadoma RC522 pokaže, kakšen je njegov resnični potencial.

Torej, preden preizkusite dano kodo, morate MENJATI induktorje. Preprosto ne bo delovalo z vnaprej nameščenimi induktorji!

Ozadje vsega tega je, da so kartice Ultralight C precej lačne energije. To energijo zagotavlja RF-polje RC522. Zaradi nizke jakosti induktorjev energijsko polje preprosto ni dovolj močno za napajanje Ultralight C. Druge kartice, kot je Mifare Classic, potrebujejo le manj energije in zato delujejo precej stabilno.

2. korak: Kako deluje?

Kako deluje?
Kako deluje?
Kako deluje?
Kako deluje?
Kako deluje?
Kako deluje?
Kako deluje?
Kako deluje?

Kako lahko po spremembi modula RC522 uporabite Mifare Ulralight C za svojo aplikacijo?

Trik je, da Mifare Ultralight C podpira avtentikacijo z geslom, ki temelji na 3DES šifra. Z uporabo tega gesla, se lahko izvede vsebina kartice »samo za branje« ali popolnoma neviden nepooblaščenega uporabnika.

Za uporabo te zaščite z geslom je treba geslo zapisati na kartico, strani pa zaščititi. Ko končate, lahko bodisi preveri kartico v vlogi, ki jo le prosi za temelji geslo avtentikacijo z ali dodatno pripravljenih podatkov iz zaščitenega območja. Samo če je to uspešno, veste, da lahko zaupate vnesenemu UID -ju na kartici.

Pazite: brez preverjanja pristnosti na podlagi gesla še vedno ne morete zaupati Mifare Ultralight C kartici, saj obstajajo tudi "čarobne kartice", ki simulirajo Ultralight C.

Vsaka kartica neodvisen od tehnologije (če je v pravi frekvenci) se bodo odzvali s svojo UID, ko poganja RF-poljskih in zahtevo, da se opredeli. Poleg tega zagotavljajo vrednost SAK, ki zagotavlja minimalne informacije o vrsti kartice, ki je prisotna. Na žalost se vsi Mifare Ultralight in NTAG identificirata kot tip syme (SAK = 0x00), vključno z Mifare Ultralight C. Tako bo pri glasovanju za kartice vsaj vrednost SAK 0x00 namigovala, da bi lahko na bralniku obstajal Ultralight C.

Če želite zagotoviti, da gre za Ultralight C, lahko na kartico pošljete zahtevo za šifrirano preverjanje pristnosti. Če to NI kartica Ultralight C, ta zahteva ne bo razumljena in odgovor bo NAK (not-acknolege).

Če je to kartica Ulralight C, boste dobili 8 -bajtni odgovor. Teh 8 bajtov so naključno število "B" (RndB), ki je shranjen ključ na kartico z uporabo 3DES šifra šifrirana.

Ta šifrirani RndB je treba dešifrirati z istim ključem v programu. To naključno število se nato nekoliko spremeni (zavrtimo za en bajt → bajt 1 se premakne v bajt 8, vsi drugi bajti pa se potisnejo za en bajt nižje, nato pa se imenujejo RndB '). Program nato sam ustvari 8 -bajtno naključno število "A" (RndA) in ga pritrdi na spremenjeni RndB '. Ta se znova šifrira s ključem in pošlje na kartico.

Kartica dešifrira sporočilo in preveri, če bi ustrezal RndB 'na predhodno izdelano RndB na kartici. Če se ujemajo, kartica zdaj ve, da program pozna ključ.

Na tej točki, je program še vedno ne vem, če je kartica pozna ključ in zato je mogoče zaupati ali ne. Da bi to dosegli, kartica zdaj zavrti dešifrirano RndA za en bajt, nato te ključe šifrira s ključem in jih pošlje nazaj.

Program bo nato dešifrirati odgovor kartice in preverite, če izvirnik RndA in odvrnil RndA tekmo. SAMO Tedaj oba subjekta (program in kartica) vesta, da si delita znanje o istem ključu.

Ta postopek se uporablja samo za preverjanje pristnosti. Vsa nadaljnja komunikacija je vedno v "čistem besedilu".

Čeprav obstajajo kartice "magic Ultralight C", kjer je mogoče spremeniti UID, ključa samega ni mogoče pridobiti s kartice in šifra 3DES je dokaj varna. Ključ je 16 -bajtni ključ, zato bo pristop s surovo silo za pridobitev ključa trajal nekaj časa.

Kot je navedeno, je komunikacija pred preverjanjem pristnosti in po preverjanju pristnosti vedno v jasnem besedilu (tudi šifrirano). Pri pisanju nov ključ na kartico, lahko vsebino ključa, njuhanje, ki jih z ustrezno opremo. Zato prosimo, da ključ zapišete samo v varnem okolju in ključ hranite v tajnosti.

Pri uporabi kartice Ultralight C

Kartica Ultralight C ima vgrajenih več varnostnih funkcij:

  1. Pomnilnik enkratnega programiranja (OTP). Na tem področju se lahko zapisujejo bitovi, vodilo pa ne briše.
  2. 16 -bitni enosmerni števec. Ta števec se lahko le poveča, ko ga dostopate.
  3. Zaščita strani pred pisanjem ali branjem/pisanjem v pomnilniku. Te strani je mogoče brati ali spreminjati le, če so overjene s ključem.
  4. Zamrzovanje / blokiranje posameznih strani za zaščito pred kakršnimi koli spremembami.

Niti uporaba OTP, 16-bitnega števca niti uporaba blokirnega bita nista izvedeni v dani kodi, vendar ju je mogoče enostavno izvesti na podlagi podatkov, navedenih v https://www.nxp.com/docs/en/data- list/MF0ICU2.pd…

Ker je zaščita s ključem bistvena za uporabo Mifare Ultralight C, so prisotne vse ustrezne funkcije.

Vsi ukazi se uporabljajo v serijskem monitorju z "samo novo vrstico" in s 115200 Baud

  • “Auth 49454D4B41455242214E4143554F5946” bo zahteval preverjanje pristnosti z danim ključem (v tem primeru standardni ključ Mifare Ultralight C)
  • »Dump« bo izpisalo vsebino kartice, kolikor je vidna. V primeru, da so strani zaščitene s ključem, te strani morda ne bodo vidne, dokler ni opravljena predhodna overitev s ključem. V prvih dveh stolpcih je označeno, ali so strani zaklenjene ali je dostop omejen.
  • “NewKey 49454D4B41455242214E4143554F5946” bo na kartico zapisal nov ključ. Ključ je napisan na straneh od 44 do 47. To bo samo delo, če so te strani niti zaklenjena niti zaščiteni brez predhodnega preverjanja pristnosti.
  • "wchar 10 hello world" bo od strani 10. napisal "hello world". Tudi ta dela strani niso niti zaklenjena niti zaščitena brez predhodnega preverjanja pristnosti. Pri poskusu pisanja nad stran 39 ali pod stran 4 se prikaže poziv napaka ali podatki se prezrejo, saj te strani niso uporabniški pomnilnik.
  • “Whex 045ACBF44688” bo zapisalo šestnajstiške vrednosti neposredno v pomnilnik, veljajo prejšnji pogoji.
  • »Zaščita 30« ščiti vse strani od strani 30 navzgor. Glede na dovoljenje lahko te strani spremenite ali preberete šele po predhodni overitvi s ključem. Z uporabo »zaščite« z vrednostmi, višjimi od 47, bodo vse strani nastavljene na »nezaščitene«, VKLJUČNO KLJUČ na straneh 44-47 (ki jih je mogoče samo spremeniti, vendar ne prebrati). Da bi preprečili spreminjanje ključa, se mora zaščita začeti vsaj na strani 44.
  • “Setpbit 0” nastavi zaščitni bit in se odloči, ali so zaščitene strani samo za branje (“setpbit 1”) ali pa jih ni mogoče brati in pisati (“setpbit 0”) brez predhodne overitve s ključem.

Vseh ukazov ni mogoče uporabiti takoj po odkritju kartice. "Izpis" prej na drug ukaz vedno pomaga.

3. korak: Pomembno

  1. Program razlikuje med vrstami ultralahkih, tako da prebere stran 43 in 44. Če je stran 43 berljiva, stran 44 pa ne, je to najverjetneje Ultralahka C. Toda če berete/pišete, stran 43 kartice ne prepozna več kot Ultralight C (ne vpliva na nič) Pravilno identifikacijo Ultralight je treba opraviti s preverjanjem pristnosti s ključem (tega nisem uvedel zaradi stabilnosti).
  2. Pred uporabo ukazov “setpbit” in “protection” je treba uporabiti ukaz “dump”, sicer status zaščite strani ne bo znan.
  3. Če "berete/pišete" zaščitite prve strani kartice, s tem programom ne bo več delovalo, saj se prva stran neprestano bere, da se preveri, ali je kartica še prisotna. Ker sta prvi dve strani tako ali tako samo za branje (UID je tam shranjen), jih nima smisla varovati.

Vprašanja stabilnosti

Ta koda uporablja "standardno" knjižnico RC522 za Arduino in knjižnico 3DES s spletnega mesta https://github.com/Octoate/ArduinoDES. Knjižnica RC522 se pogosto uporablja, vendar knjižnica 3DES ni tako razširjena in jo je treba namestiti ročno.

Koda je bila preizkušena na Arduino Uno. Toda med pisanjem sem naletel na številne čudne težave v zvezi s stabilnostjo. Nekako niti moje znanje programiranja ne da, eden od uporabljenih knjižnic je dobra nestabilen ali mešanjem knjižnice ni dobra ideja.

Prosimo, upoštevajte to pri uporabi kode !!!

Če ga spremenite ali uporabite le njegove dele, lahko pride do nenavadnega vedenja, kot je zrušitev, tiskanje čudnih stvari ali prekinitev ali NAK pri branju s kartice. To se lahko zgodi kjer koli v kodi (stalo me je veliko ur odpravljanja napak). Če najdete razlog (e) za to, mi prosim povejte.

Priporočena: