Sisukord:

Mifare Ultralight C kasutamine koos RC522 -ga Arduino'is: 3 sammu
Mifare Ultralight C kasutamine koos RC522 -ga Arduino'is: 3 sammu

Video: Mifare Ultralight C kasutamine koos RC522 -ga Arduino'is: 3 sammu

Video: Mifare Ultralight C kasutamine koos RC522 -ga Arduino'is: 3 sammu
Video: Mifare Ultralight operations - part1 2024, Juuli
Anonim
Mifare Ultralight C kasutamine koos Arduino RC522 -ga
Mifare Ultralight C kasutamine koos Arduino RC522 -ga

RFID -tehnoloogia kasutamine kaardiomanike tuvastamiseks või millegi lubamiseks (ukse avamiseks jne) on üsna tavaline lähenemisviis. Isetegemise korral kasutatakse laialdaselt RC522 moodulit, kuna see on üsna odav ja selle mooduli jaoks on palju koodi.

Enamikul juhtudel kasutatakse kaardi omaniku „tuvastamiseks” kaardi UID -d ja Mifare Classic kaarte, kuna need on odavad ja kaasatakse sageli RC522 mooduli ostmisel.

Kuid nagu teate, on Mifare Classic süsteemi juba aastaid häkkinud ja seda ei peeta enam ohutuks. Klassikaliste kaartide kasutatavast krüpteerimissüsteemist Crypto1 saab üle ja need on ümberkirjutatavad kaardid, kus UID-d saab ümber programmeerida (maagilised kaardid).

Seega ei ole turvalisusega seotud rakenduste puhul soovitatav kasutada Mifare Classic kaarte! Sama kehtib (enamiku) NTAG ja Mifare Ultralight süsteemide kohta

Seega on valik kas professionaalse süsteemi kasutamine või turvalisema RFID -süsteemi kasutamine. Saadaval on süsteemid Mifare Ultralight C, Mifare DESFire ja Mifare Plus. Kuna neid turvalisemaid süsteeme kasutavad paljud professionaalsed süsteemid, pole isetegemise kogukonna jaoks praktiliselt ühtegi lahendust (on olemas üks Teensy -põhine DESFire -lahendus, mis asub kallimas PN523 jaotuskilbis). Lisaks on DESFire kaardid üsna kallid. Seega oli väljakutseks leida parem ja odavam lahendus.

Esitatud lahendus pakub täielikku juurdepääsu odavatele Mifare Ultralight “C” kaartidele, kasutades odavat Hiina RC522 DIY moodulit. Selle koodi põhjal saab turvalist Mifare Ultralight C -d kasutada isetegemise rakendustes.

Samm: eeltingimused

Eeltingimused
Eeltingimused

Kuigi RC522 on hästi kavandatud, on see enamikul juhtudel halvasti ehitatud, kuna mõned komponendid on halvasti mõõdetud. See toob kaasa mooduli halva maine, kuna selle tundlikkus on madal ja igat tüüpi kaarte ei tuvastata. Eriti ei tuvastata Mifare Ultralight C -d ega ole võimalik kaarte lugeda.

Peamine probleem on induktiivpoolide L1 ja L2 spetsifikatsioon. Nagu on kirjeldatud saidil https://ham.marsik.org/2017/04/using-cheap-rc522-nfc-reader-to-read.html. Lihtsalt asendades need induktiivpoolid sobivatele nt. FERROCORE CW1008-2200 näitab äkki RC522, milline on selle tegelik potentsiaal.

Nii et enne antud koodi proovimist peate induktiivpoolid asendama. See lihtsalt ei tööta eelinstallitud induktiivpoolidega!

Selle kõige taustal on see, et Ultralight C kaardid on üsna energianäljas. Seda energiat annab RC522 RF-väli. Induktorite väikese voolutugevuse tõttu ei ole energiaväli ülivõimsuse C toiteks lihtsalt piisavalt võimas. Teised kaardid nagu Mifare Classic vajavad lihtsalt vähem energiat ja töötavad seetõttu üsna stabiilselt.

Samm 2: Kuidas see toimib?

Kuidas see töötab?
Kuidas see töötab?
Kuidas see töötab?
Kuidas see töötab?
Kuidas see töötab?
Kuidas see töötab?
Kuidas see töötab?
Kuidas see töötab?

Niisiis, kuidas saate pärast RC522 mooduli muutmist oma rakenduse jaoks kasutada Mifare Ulralight C -d?

Trikk on selles, et Mifare Ultralight C toetab 3DES -šifril põhinevat parooli autentimist. Selle parooli abil saab kaardi sisu muuta ainult lugemiseks või volitamata kasutajale täiesti nähtamatuks.

Selle paroolikaitse kasutamiseks tuleb parool kaardile kirjutada ja lehed kaitsta. Kui olete lõpetanud, saate oma rakenduses kaarti kontrollida, paludes lihtsalt paroolipõhist autentimist või täiendavalt valmis andmeid kaitstud alalt. Ainult siis, kui see õnnestub, teate, et saate kaardil olevat UID -d usaldada.

Ettevaatust: ilma paroolipõhise autentimiseta ei saa te endiselt Mifare Ultralight C kaarti usaldada, kuna on olemas ka võlukarpe, kes simuleerivad Ultralight C -d.

Iga tehnoloogiast sõltumatu kaart (kui see on õigel sagedusel) reageerib RF-välja toitega oma UID-ga ja palub end tuvastada. Lisaks pakuvad need SAK -väärtust, mis annab minimaalset teavet olemasoleva kaardi tüübi kohta. Kahjuks identifitseerivad kõik Mifare Ultralight ja NTAG sümmeetüübid (SAK = 0x00), sealhulgas Mifare Ultralight C. Nii et kaartide küsitlemisel annab vähemalt SAK -i väärtus 0x00 vihje, et lugejal võib olla ülikerge C.

Veendumaks, et tegemist on ülikerge C -ga, võib kaardile saata krüpteeritud autentimise taotluse. Kui see EI ole ülikerge C-kaart, ei mõisteta seda taotlust ja vastuseks on NAK (not-acknolege).

Kui see on Ulralight C kaart, saate 8 -baitise vastuse. Need 8 baiti on juhuslik arv “B” (RndB), mis on krüpteeritud kaardile salvestatud võtmega 3DES -šifri abil.

See krüptitud RndB tuleb dekrüpteerida, kasutades programmis sama võtit. Seda juhuslikku arvu muudetakse seejärel veidi (pöörlemine ühe baidi võrra → bait 1 teisaldatakse baidini 8 ja kõik teised baidid lükatakse üks bait madalamale, mida nimetatakse siis RndB’). Seejärel genereerib programm ise 8 -baidise juhusliku arvu "A" (RndA) ja lisab selle RndA muudetud RndB -le. See krüpteeritakse uuesti võtme abil ja saadetakse kaardile.

Kaart dekrüpteerib sõnumi ja kontrollib, kas RndB’sobib kaardil varem loodud RndB -ga. Kui need sobivad, teab kaart nüüd, et programm teab võtit.

Siinkohal ei tea programm veel, kas kaart teab võtit ja seetõttu saab seda usaldada või mitte. Selle saavutamiseks pöörab kaart nüüd dekrüpteeritud RndA -d ühe baidi võrra, seejärel krüpteerib need baidid võtme abil ja saadab need tagasi.

Seejärel dekrüpteerib programm kaardi vastuse ja kontrollib, kas algne RndA ja vastatud RndA vastavad. AINULT SIIS teavad mõlemad üksused (programm ja kaart), et jagavad sama võtme teadmisi.

Seda protsessi kasutatakse ainult autentimiseks. Kogu edasine suhtlus toimub alati “selges tekstis”.

Kuigi on olemas “maagilised ülikerged C” kaardid, kus UID -d saab muuta, ei saa võtit ise kaardilt kätte ja 3DES -šifr on üsna turvaline. Võti on 16 -baitine võti, nii et toorjõuga lähenemine võtme saamiseks võtab natuke aega.

Nagu öeldud, toimub autentimisele eelnev ja pärast autentimist alati selge tekst (ka krüptimata). Kaardile uue võtme kirjutamisel saab võtme sisu õiget varustust kasutades nuusutada. Nii et palun kirjutage võti ainult turvalises keskkonnas ja hoidke võtit saladuses.

Ultralight C kaardi kasutamisel

Ultralight C -kaardil on mitu turvaelementi:

  1. Ühekordse programmeerimise (OTP) mälu. Sellesse kohta saab kirjutada bitte, bussi ei kustutata.
  2. 16 -bitine ühesuunaline loendur. Seda loendurit saab suurendada ainult siis, kui see on saavutatud.
  3. Mälus olevate lehtede kaitse kirjutamise või lugemise/kirjutamise eest. Neid lehti saab lugeda või muuta ainult võtmega autentimisel.
  4. Üksikute lehtede külmutamine / blokeerimine mis tahes muudatuste eest kaitsmiseks.

OTP, 16-bitise loenduri ega blokeerimisbiti kasutamine ei ole antud koodis rakendatud, kuid neid saab hõlpsasti rakendada saidil https://www.nxp.com/docs/en/data- leht/MF0ICU2.pd…

Kuna võtmega kaitsmine on Mifare Ultralight C kasutamisel hädavajalik, on kõik asjakohased funktsioonid olemas.

Seeriamonitoris kasutatakse kõiki käske "ainult uus rida" ja 115200 baudiga

  • „Auth 49454D4B41455242214E4143554F5946” taotleb antud võtmega autentimist (antud juhul tavaline Mifare Ultralight C võti)
  • „Dump” tühjendab kaardi sisu nii kaugele, kui see on nähtav. Kui lehed on võtmega kaitstud, ei pruugi need lehed olla nähtavad enne eelmist võtmega autentimist. Kahes esimeses veerus on märgitud, kas lehed on lukustatud või juurdepääs piiratud.
  • “NewKey 49454D4B41455242214E4143554F5946” kirjutab kaardile uue võtme. Võti on kirjutatud lehekülgedele 44 kuni 47. See toimib ainult siis, kui need lehed pole lukustatud ega kaitstud ilma eelneva autentimiseta.
  • "wchar 10 hello world" kirjutab "tere maailm" alates leheküljest 10. Jällegi ei ole need ainult nende lehtede tööd lukustatud ega kaitstud ilma eelneva autentimiseta. Kui proovite kirjutada lehekülje 39 kohal või allpool, siis ilmub see viga või andmeid eiratakse, kuna need lehed ei ole kasutaja mälu.
  • „Whex 045ACBF44688” kirjutab Hex väärtused otse mällu, kehtivad varasemad tingimused.
  • „Kaitsta 30” kaitseb kõiki lehti alates leheküljest 30 ülespoole. Sõltuvalt loast saab neid lehti muuta või lugeda ainult pärast eelnevat võtmega autentimist. Kui kasutate „protect“väärtustega üle 47, seatakse kõik lehed „kaitsmata“, KAASAS VÕTMED lehekülgedel 44–47 (mida saab ainult muuta, kuid mitte lugeda). Võtme muutmise vältimiseks peaks kaitse algama vähemalt leheküljelt 44.
  • „Setpbit 0” määrab kaitsebiti ja otsustab, kas kaitstud lehti loetakse ainult lugemiseks („setpbit 1”) või kas neid ei saa lugeda ega kirjutada („setpbit 0”) ilma eelneva autentimiseta võtmega.

Kõiki käske ei saa kohe pärast kaardi tuvastamist kasutada. Varem teise käskluse "prügila" aitab alati.

Samm: oluline

  1. Programm eristab ülikergeid tüüpe, lugedes lehekülgi 43 ja 44. Kui leht 43 on loetav ja lehekülg 44 mitte, on see tõenäoliselt ülikerge C. AGA, kui loete/kirjutate, kaitsete lehekülge 43, ei tunnistata kaarti enam Ultrakerge C (ei mõjuta midagi) Ultrakerge nõuetekohane tuvastamine peaks toimuma võtmega autentimise kaudu (ma ei rakendanud seda stabiilsuse tõttu).
  2. Enne käskude “setpbit” ja “protect” kasutamist tuleb kasutada käsku “dump”, vastasel juhul ei ole lehtede kaitse olek teada.
  3. Kui te “loete/kirjutate” oma kaardi esimesi lehti kaitsma, ei tööta see selle programmiga enam, kuna esimest lehte loetakse pidevalt, et näha, kas kaart on alles. Kuna kahte esimest lehte loetakse niikuinii ainult (UID on sinna salvestatud), pole nende kaitsmisel mõtet.

Stabiilsuse probleemid

See kood kasutab Arduino jaoks standardset RC522 raamatukogu ja 3DES raamatukogu aadressilt https://github.com/Octoate/ArduinoDES. Kui raamatukogu RC522 kasutatakse üsna sageli, siis 3DES -teek ei tundu olevat nii laialt levinud ja see tuleb käsitsi installida.

Koodi on testitud Arduino Uno peal. Kuid selle kirjutamise ajal puutusin kokku palju imelikke stabiilsusega seotud probleeme. Kuidagi pole minu programmeerimisoskus nii hea, üks kasutatud raamatukogudest on ebastabiilne või raamatukogude segamine pole hea mõte.

Palun arvestage seda koodi kasutamisel !!!

Selle muutmine või ainult selle osade kasutamine võib kaasa tuua kummalise käitumise, näiteks krahhi, imelike asjade printimise või ajalõppude või NAK -i lugemise kaardilt. See võib juhtuda suvalises koodi kohas (mul kulus silumiseks mitu tundi). Kui leiate selle põhjuse (d), palun andke mulle vihje.

Soovitan: