Satura rādītājs:

Mifare Ultralight C izmantošana ar RC522 Arduino: 3 soļi
Mifare Ultralight C izmantošana ar RC522 Arduino: 3 soļi

Video: Mifare Ultralight C izmantošana ar RC522 Arduino: 3 soļi

Video: Mifare Ultralight C izmantošana ar RC522 Arduino: 3 soļi
Video: Mifare Ultralight operations - part1 2024, Jūlijs
Anonim
Izmantojot Mifare Ultralight C ar RC522 Arduino
Izmantojot Mifare Ultralight C ar RC522 Arduino

RFID tehnoloģijas izmantošana, lai identificētu karšu īpašniekus vai atļautu kaut ko darīt (atvērt durvis utt.), Ir diezgan izplatīta pieeja. DIY pielietošanas gadījumā RC522 modulis tiek plaši izmantots, jo tas ir diezgan lēts un šim modulim ir daudz kodu.

Vairumā gadījumu kartes UID tiek izmantots, lai “identificētu” kartes turētāju, un tiek izmantotas Mifare Classic kartes, jo tās ir lētas un bieži tiek iekļautas, pērkot RC522 moduli.

Bet, kā jūs zināt, Mifare Classic sistēma ir uzlauzta vairākus gadus, un tā vairs netiek uzskatīta par drošu. Klasisko karšu izmantoto šifrēšanas sistēmu Crypto1 var pārvarēt, un tās ir pārrakstāmas kartes, kurās var pārprogrammēt UID datus (burvju kartes).

Tāpēc jebkurai ar drošību saistītai lietojumprogrammai nav ieteicams izmantot Mifare Classic kartes! Tas pats attiecas uz (lielāko daļu) NTAG un Mifare Ultralight sistēmām

Tātad izvēle ir vai nu izmantot profesionālu sistēmu, vai mēģināt izmantot drošāku RFID sistēmu. Pieejamās sistēmas ir Mifare Ultralight C, Mifare DESFire un Mifare Plus. Tā kā ir daudz profesionālu sistēmu, kas izmanto šīs drošākās sistēmas, DIY kopienai praktiski nav risinājumu (ir viens uz Teensy balstīts DESFire risinājums, kas atrodas dārgākajā PN523 sadalīšanas panelī). Turklāt DESFire kartes ir diezgan dārgas. Tāpēc izaicinājums bija atrast labāku un lētāku risinājumu.

Piedāvātais risinājums nodrošina pilnīgu piekļuvi lētajām Mifare Ultralight “C” kartēm, izmantojot lēto ķīniešu RC522 DIY moduli. Pamatojoties uz šo kodu, drošu Mifare Ultralight C var izmantot DIY lietojumprogrammās.

1. darbība. Priekšnosacījumi

Priekšnosacījumi
Priekšnosacījumi

Lai gan RC522 ir labi izstrādāts, tas vairumā gadījumu ir slikti veidots, jo daži komponenti ir slikti izmērīti. Tas noved pie tā, ka modulim ir slikta reputācija, jo tam ir zema jutība un netiks identificētas visu veidu kartes. Īpaši Mifare Ultralight C netiks identificēts, kā arī nebūs iespējams nolasīt kartes.

Galvenā problēma ir induktoru L1 un L2 specifikācija. Kā aprakstīts vietnē https://ham.marsik.org/2017/04/using-cheap-rc522-nfc-reader-to-read.html. Vienkārši nomainot šos induktorus uz atbilstošiem, piem. FERROCORE CW1008-2200 pēkšņi RC522 parāda tā patieso potenciālu.

Tātad, pirms izmēģināt doto kodu, jums ir jānomaina induktori. Tas vienkārši nedarbosies ar iepriekš instalētiem induktoriem!

Tā visa pamatā ir tas, ka Ultralight C kartes ir ļoti izsalkušas pēc enerģijas. Šo enerģiju nodrošina RF lauks RC522. Sakarā ar induktoru zemo strāvas stiprumu, enerģijas lauks nav pietiekami spēcīgs, lai darbinātu Ultralight C. Citas kartes, piemēram, Mifare Classic, prasa mazāk enerģijas, un tāpēc tās darbojas diezgan stabili.

2. darbība. Kā tas darbojas?

Kā tas darbojas?
Kā tas darbojas?
Kā tas darbojas?
Kā tas darbojas?
Kā tas darbojas?
Kā tas darbojas?
Kā tas darbojas?
Kā tas darbojas?

Tātad, pēc RC522 moduļa modificēšanas, kā jūs varat izmantot Mifare Ulralight C savai lietojumprogrammai?

Triks ir tāds, ka Mifare Ultralight C atbalsta paroles autentifikāciju, kuras pamatā ir 3DES šifrs. Izmantojot šo paroli, kartes saturu var padarīt “tikai lasāmu” vai pilnīgi neredzamu neatļautam lietotājam.

Lai izmantotu šo paroles aizsardzību, parole ir jāieraksta kartē un lapas ir jāaizsargā. Kad esat pabeidzis, jūs varat pārbaudīt karti savā lietojumprogrammā, vienkārši pieprasot autentifikāciju, kas balstīta uz paroli, vai papildus gatavus datus no aizsargātas teritorijas. Tikai tad, ja tas izdodas, jūs zināt, ka varat uzticēties kartē norādītajam UID.

Uzmanieties: bez autentifikācijas, kas balstīta uz paroli, jūs joprojām nevarat uzticēties Mifare Ultralight C kartei, jo ir arī “burvju kartes”, kas imitē Ultralight C.

Katra karte, kas nav atkarīga no tehnoloģijas (ja ir pareiza frekvence), reaģēs ar savu UID, ja to darbinās RF lauks, un lūgs sevi identificēt. Turklāt tie nodrošina SAK vērtību, sniedzot minimālu informāciju par esošās kartes veidu. Diemžēl visi Mifare Ultralight un NTAG tiek identificēti kā syme tips (SAK = 0x00), ieskaitot Mifare Ultightight C. Tātad, aptaujājot kartītes, vismaz SAK vērtība 0x00 sniegs mājienu, ka uz lasītāja var būt Ultralight C.

Lai pārliecinātos, ka tas ir īpaši viegls C, uz karti var nosūtīt šifrētas autentifikācijas pieprasījumu. Ja šī NAV īpaši viegla C karte, šis pieprasījums netiks saprasts, un atbilde būs NAK (not-acknolege).

Ja šī ir Ulralight C karte, jūs saņemsiet 8 baitu atbildi. Šie 8 baiti ir nejaušs skaitlis “B” (RndB), kas šifrēts ar kartē saglabāto atslēgu, izmantojot 3DES šifru.

Šis šifrētais RndB ir jāatšifrē, izmantojot to pašu atslēgu programmā. Pēc tam šis nejaušais skaitlis tiek nedaudz mainīts (pagriezts par vienu baitu → 1 baits tiks pārvietots uz 8 baitu un visi pārējie baiti tiek bīdīti par vienu baitu zemāk, toreiz sauc par RndB”). Pēc tam programma ģenerē 8 baitu nejaušu skaitli "A" (RndA) un pievieno šo RndA modificētajam RndB’. Tas atkal tiek šifrēts, izmantojot atslēgu, un nosūta uz karti.

Karte atšifrē ziņojumu un pārbauda, vai RndB’atbilst iepriekš ģenerētajam RndB kartē. Ja tie sakrīt, karte tagad zina, ka programma zina atslēgu.

Šajā brīdī programma joprojām nezina, vai karte zina atslēgu, un tāpēc tai var uzticēties. Lai to panāktu, karte tagad par vienu baitu pagriež atšifrēto RndA, pēc tam, izmantojot atslēgu, šifrē šos baitus un nosūta tos atpakaļ.

Pēc tam programma atšifrē kartes atbildi un pārbauda, vai sākotnējais RndA un atbildētais RndA sakrīt. TIKAI TAD abi subjekti (programma un karte) zina, ka tiem ir kopīgas zināšanas par vienu un to pašu atslēgu.

Šo procesu izmanto tikai autentifikācijai. Visa turpmākā komunikācija vienmēr notiek “skaidrā tekstā”.

Lai gan ir “burvju īpaši vieglās C” kartes, kurās UID var mainīt, pašu atslēgu no kartes nevar iegūt, un 3DES šifrs ir diezgan drošs. Atslēga ir 16 baitu atslēga, tāpēc brutāla spēka pieeja atslēgas iegūšanai prasīs zināmu laiku.

Kā minēts, saziņa pirms autentifikācijas un pēc autentifikācijas vienmēr ir skaidrā tekstā (pazīstama arī kā šifrēta). Rakstot kartē jaunu atslēgu, izmantojot pareizo aprīkojumu, var izsmidzināt atslēgas saturu. Tāpēc, lūdzu, rakstiet atslēgu tikai drošā vidē un turiet atslēgu noslēpumā.

Izmantojot Ultralight C karti

Ultralight C kartē ir iebūvēti vairāki drošības līdzekļi:

  1. Vienreizējas programmēšanas (OTP) atmiņa. Šajā apgabalā var rakstīt bitus, autobuss netiek dzēsts.
  2. 16 bitu vienvirziena skaitītājs. Šis skaitītājs var palielināties tikai tad, kad tas ir pieejams.
  3. Atmiņā esošo lapu “rakstīšanas” vai “lasīšanas/rakstīšanas” aizsardzība. Tikai tad, ja autentificēts ar atslēgu, šīs lapas var lasīt vai mainīt.
  4. Atsevišķu lapu iesaldēšana / bloķēšana, lai aizsargātu pret jebkādām izmaiņām.

Ne OTP, ne 16 bitu skaitītāja, ne bloķējošā bita izmantošana nav ieviesta dotajā kodā, bet to var viegli ieviest, pamatojoties uz informāciju, kas sniegta vietnē https://www.nxp.com/docs/en/data- lapa/MF0ICU2.pd…

Tā kā aizsardzība ar atslēgu ir būtiska, lai izmantotu Mifare Ultralight C, ir pieejamas visas attiecīgās funkcijas.

Visas komandas tiek izmantotas sērijas monitorā ar "tikai jaunu līniju" un ar 115200 Baud

  • “Auth 49454D4B41455242214E4143554F5946” pieprasīs autentifikāciju ar norādīto atslēgu (šajā gadījumā standarta Mifare Ultralight C atslēga)
  • “Dump” izgāzīs kartes saturu, ciktāl tas ir redzams. Ja lapas ir aizsargātas ar atslēgu, šīs lapas var nebūt redzamas līdz iepriekšējai autentifikācijai ar atslēgu. Pirmajās divās kolonnās ir norādīts, vai lapas ir bloķētas vai piekļuve ir ierobežota.
  • “NewKey 49454D4B41455242214E4143554F5946” ierakstīs kartē jaunu atslēgu. Atslēga ir ierakstīta 44. līdz 47. lappusē. Tas darbosies tikai tad, ja šīs lapas nav ne aizslēgtas, ne aizsargātas bez iepriekšējas autentifikācijas.
  • "wchar 10 hello world" rakstīs "hello world", sākot no 10. lappuses. Atkal, tikai šie lapu darbi nav ne bloķēti, ne aizsargāti bez iepriekšējas autentifikācijas. Mēģinot rakstīt virs 39. lapas vai zem 4. lapas, tas parādīs uzvedni kļūda vai dati tiek ignorēti, jo šīs lapas nav lietotāja atmiņa.
  • “Whex 045ACBF44688” ierakstīs Hex vērtības tieši atmiņā, ir spēkā iepriekšējie nosacījumi.
  • “Aizsargāt 30” aizsargā visas lapas, sākot no 30. lapas. Atkarībā no atļaujas šīs lapas var mainīt vai lasīt tikai pēc iepriekšējas autentifikācijas ar atslēgu. Izmantojot “protect” ar vērtībām, kas augstākas par 47, visas lapas tiks iestatītas kā “neaizsargātas”, IESKAITOT ATSLĒGU 44. – 47. Lai atslēga netiktu mainīta, aizsardzībai jāsākas vismaz no 44. lappuses.
  • “Setpbit 0” iestata aizsardzības bitu un izlemj, vai aizsargātās lapas ir tikai lasāmas (“setpbit 1”) vai arī tās nevar nolasīt un neuzrakstīt (“setpbit 0”) bez iepriekšējas autentifikācijas ar atslēgu.

Ne visas komandas var izmantot uzreiz pēc kartes noteikšanas. "Izmešana" iepriekš citai komandai vienmēr palīdz.

3. darbība. Svarīgi

  1. Programma nošķir Ultralight veidus, izlasot 43. un 44. lappusi. Ja 43. lappuse ir lasāma un 44. lappuse nav, visticamāk, tā ir īpaši viegla C. BET, ja lasāt/rakstāt aizsargājat 43. lapu, karte vairs netiek atpazīta kā Ultralight C (neietekmē neko) Pareiza Ultralight identifikācija jāveic, izmantojot autentifikāciju ar atslēgu (es to neīstenoju stabilitātes apsvērumu dēļ).
  2. Pirms komandu “setpbit” un “protect” izmantošanas jāizmanto komanda “dump”, pretējā gadījumā lapu aizsardzības statuss nebūs zināms.
  3. Ja jūs “lasāt/rakstāt” aizsargājat savas kartes pirmās lapas, tā vairs nedarbosies ar šo programmu, jo pirmā lapa tiek pastāvīgi lasīta, lai noskaidrotu, vai joprojām ir karte. Tā kā pirmās divas lapas tiek lasītas tikai un vienīgi (tur tiek saglabāts UID), nav jēgas tās aizsargāt.

Stabilitātes jautājumi

Šis kods izmanto “standarta” RC522 bibliotēku Arduino un 3DES bibliotēku no vietnes https://github.com/Octoate/ArduinoDES. Lai gan bibliotēka RC522 tiek izmantota diezgan bieži, 3DES bibliotēka, šķiet, nav tik plaši izplatīta un ir jāinstalē manuāli.

Kods ir pārbaudīts ar Arduino Uno. Bet, to rakstot, es saskāros ar daudzām dīvainām problēmām saistībā ar stabilitāti. Kaut kā manas programmēšanas prasmes nav tik labas, viena no izmantotajām bibliotēkām ir nestabila vai bibliotēku sajaukšana nav laba ideja.

Lūdzu, ņemiet to vērā, lietojot kodu !!!

Mainot to vai izmantojot tikai tās daļas, lasot no kartes, var rasties dīvaina uzvedība, piemēram, avārija, dīvainu lietu drukāšana vai taimauta vai NAK iegūšana. Tas var notikt jebkurā koda vietā (tas man izmaksāja daudzas stundas atkļūdošanas). Ja atrodat iemeslu (-us), lūdzu, dodiet man padomu.

Ieteicams: