Talaan ng mga Nilalaman:

Paggamit ng Mifare Ultralight C Sa RC522 sa Arduino: 3 Hakbang
Paggamit ng Mifare Ultralight C Sa RC522 sa Arduino: 3 Hakbang

Video: Paggamit ng Mifare Ultralight C Sa RC522 sa Arduino: 3 Hakbang

Video: Paggamit ng Mifare Ultralight C Sa RC522 sa Arduino: 3 Hakbang
Video: Wastong Paggamit ng Metered Dose Inhaler 2024, Hulyo
Anonim
Paggamit ng Mifare Ultralight C Sa RC522 sa Arduino
Paggamit ng Mifare Ultralight C Sa RC522 sa Arduino

Ang paggamit ng teknolohiyang RFID upang makilala ang mga may hawak ng card o upang pahintulutan na gumawa ng isang bagay (buksan ang isang pintuan atbp.) Ay isang pangkaraniwang diskarte. Sa kaso ng aplikasyon ng DIY ang module na RC522 ay malawakang ginagamit dahil ito ay medyo mura at maraming code ang umiiral para sa modyul na ito.

Sa karamihan ng mga kaso, ang UID ng card ay ginagamit upang "kilalanin" ang may-ari ng card, at ang Mifare Classic card ay ginagamit dahil sila ay mura at madalas na kasama kapag bumibili ng isang module na RC522.

Ngunit tulad ng maaari mong malaman, ang Mifare Classic na sistema ay na-hack sa loob ng ilang taon at hindi na ito itinuturing na ligtas na. Ang sistema ng pag-encrypt na Crypto1 na ginamit ng mga kard na Klasik ay maaaring mapagtagumpayan at ang mga muling maisusulat na kard kung saan ang isang data ay maaaring muling maprograma (mga magic card).

Kaya para sa anumang application na nauugnay sa seguridad, hindi inirerekumenda ang paggamit ng Mifare Classic card! Nalalapat ang pareho para sa (karamihan) mga system ng NTAG at Mifare Ultralight

Kaya't ang pagpipilian ay alinman sa paggamit ng isang propesyonal na sistema o pagsubok na gumamit ng isang mas ligtas na RFID system. Ang mga magagamit na system ay Mifare Ultralight C, Mifare DESFire at Mifare Plus. Tulad ng maraming mga propesyonal na sistema na gumagamit ng mga mas ligtas na system na ito, para sa komunidad ng DIY halos walang mga solusyon (mayroong isang solusyong Teensy na nakabatay sa DESFire solution, na nakabatay sa mas mahal na breakout board ng PN523). Bilang karagdagan ang mga DESFire card ay medyo mahal. Kaya't ang hamon ay upang makahanap ng isang mas mahusay at murang solusyon.

Ang ipinakita na solusyon ay nagbibigay ng buong pag-access sa murang Mifare Ultralight na "C" card gamit ang murang module ng Chinese RC522 DIY. Batay sa code na ito, ang ligtas na Mifare Ultralight C ay maaaring magamit sa mga application ng DIY.

Hakbang 1: Mga Precondition

Preconditions
Preconditions

Kahit na ang RC522 ay mahusay na dinisenyo, ito ay sa karamihan ng mga kaso na hindi maganda ang pagbuo ng ilang mga bahagi ay hindi maganda ang dimensyon. Ito ay humahantong sa hindi magandang reputasyon ng module na mayroon itong mababang pagiging sensitibo at hindi lahat ng uri ng mga kard ay makikilala. Lalo na ang Mifare Ultralight C ay hindi makikilala o magiging posible na basahin ang mga kard.

Ang pangunahing problema ay ang pagtutukoy ng mga inductors na L1 at L2. Tulad ng inilarawan sa https://ham.marsik.org/2017/04/using-cheap-rc522-nfc-reader-to-read.html. Sa pamamagitan lamang ng pagpapalit ng mga inductor na ito sa mga naaangkop na hal. FERROCORE CW1008-2200 biglang ipinakita ng RC522 kung ano ang tunay na potensyal nito.

Kaya bago subukan ang naibigay na code, DAPAT mong palitan ang mga inductor. Hindi lamang ito gagana sa mga paunang naka-install na inductor!

Ang background ng lahat ng ito ay, na ang mga Ultralight C card ay medyo gutom sa enerhiya. Ang enerhiya na ito ay ibinibigay ng RC522 RF-field. Dahil sa mababang amperage ng mga inductors, ang patlang ng enerhiya ay hindi sapat na malakas upang mapagana ang Ultralight C. Ang iba pang mga kard tulad ng Mifare Classic ay nangangailangan lamang ng mas kaunting lakas at samakatuwid gumagana nang matatag.

Hakbang 2: Paano Ito Gumagana?

Paano Ito Gumagana?
Paano Ito Gumagana?
Paano Ito Gumagana?
Paano Ito Gumagana?
Paano Ito Gumagana?
Paano Ito Gumagana?
Paano Ito Gumagana?
Paano Ito Gumagana?

Kaya pagkatapos baguhin ang module ng RC522, paano mo magagamit ang Mifare Ulralight C para sa iyong aplikasyon?

Ang lansihin ay, ang Mifare Ultralight C ay sumusuporta sa isang pagpapatotoo ng password batay sa 3DES cipher. Sa pamamagitan ng paggamit ng password na ito, ang nilalaman ng card ay maaaring gawing "basahin lamang" o ganap na hindi nakikita ng isang hindi pinahintulutang gumagamit.

Upang magamit ang proteksyon ng password ang password ay kailangang nakasulat sa card at ang mga pahina ay kailangang protektahan. Kapag tapos na, maaari mong i-verify ang card sa iyong aplikasyon alinman sa pagtatanong lamang para sa isang pagpapatotoo batay sa password o bilang karagdagan handa na data mula sa isang protektadong lugar. Kung matagumpay lamang ito malalaman mo na mapagkakatiwalaan mo ang ibinigay na UID sa card.

Mag-ingat: nang walang pagpapatotoo batay sa password hindi mo pa rin mapagkakatiwalaan ang isang Mifare Ultralight C card, dahil may mga "magic card" pati na na gayahin ang Ultralight C.

Ang bawat kard na independyente mula sa teknolohiya (kung nasa tamang dalas) ay tutugon sa kanilang UID kapag pinalakas ng patlang na RF at hihiling na makilala ang kanilang mga sarili. Bilang karagdagan nagbibigay sila ng isang halagang SAK na nagbibigay ng kaunting impormasyon tungkol sa uri ng kard na naroroon. Sa kasamaang palad lahat ng Mifare Ultralight at NTAG ay kinikilala bilang uri ng syme (SAK = 0x00), kasama ang Mifare Ultralight C. Kaya't kapag ang botohan para sa mga kard, hindi bababa sa ang halaga ng SAK na 0x00 ay magbibigay ng isang pahiwatig na maaaring mayroong isang Ultralight C sa mambabasa.

Upang matiyak na ito ay isang Ultralight C ang isang kahilingan para sa naka-encrypt na pagpapatotoo ay maaaring maipadala sa card. Kung HINDI ito isang Ultralight C card, hindi mauunawaan ang kahilingan na ito, at ang tugon ay isang NAK (not-acknolege).

Kung ito ay isang card ng Ulralight C, makakakuha ka ng isang 8 byte na sagot. Ang 8 Bytes na ito ay isang random na bilang na "B" (RndB) na naka-encrypt ng nakaimbak na key sa card gamit ang 3DES cipher.

Ang naka-encrypt na RndB ay dapat na naka-decrypt gamit ang parehong key sa programa. Ang random na numero na ito ay bahagyang binago (paikutin ng isang byte → byte 1 ay ililipat sa byte 8 at lahat ng iba pang mga byte ay itulak sa isang byte na mas mababa, pagkatapos ay tinawag na RndB '). Lumilikha ang programa ng 8 Byte na random na numero na "A" mismo (RndA) at ikinakabit ang RndA na ito sa binagong RndB’. Ito ay naka-encrypt muli gamit ang susi at ipadala sa card.

Inaalis ng card ang mensahe at sinuri kung umaangkop ang RndB’sa dating nabuong RndB sa card. Kung tumutugma sila, alam na ng kard, na alam ng programa ang susi.

Sa puntong ito, hindi pa rin alam ng programa kung alam ng card ang susi at samakatuwid ay mapagkakatiwalaan o hindi. Upang makamit ito, paikutin ngayon ng card ang naka-decrypt na RndA ng isang byte, pagkatapos ay i-encrypt ang mga byte na ito gamit ang susi at ibabalik ito.

Pagkatapos ay mai-decrypt ng programa ang tugon ng card at susuriin kung ang orihinal na RndA at ang sumagot na tugma sa RndA. LAMANG pagkatapos ng parehong mga entity (programa at card) alam na ibinabahagi nila ang kaalaman ng parehong key.

Ang prosesong ito ay magagamit lamang upang mapatunayan. Ang lahat ng karagdagang komunikasyon ay palaging nasa "malinaw na teksto".

Bagaman mayroong mga kard na "mahika Ultralight C" kung saan maaaring mabago ang UID, ang susi mismo ay hindi maaaring makuha mula sa kard at ang 3DES cipher ay medyo ligtas. Ang susi ay isang 16 Byte key, kaya't ang isang malupit na diskarte na puwersa upang makuha ang susi ay magtatagal.

Tulad ng nakasaad, ang komunikasyon bago ang pagpapatotoo at pagkatapos ng pagpapatotoo ay laging nasa malinaw na teksto (aka hindi naka-encrypt). Kapag sumusulat ng isang bagong susi sa card, ang nilalaman ng susi ay maaaring ma-sniff out sa pamamagitan ng paggamit ng tamang kagamitan. Kaya't mangyaring isulat lamang ang susi sa isang ligtas na kapaligiran at itago ang susi.

Kapag ginagamit ang Ultralight C card

Ang card ng Ultralight C ay may maraming mga tampok sa seguridad na binuo sa:

  1. Memorya ng One Time Programming (OTP). Sa lugar na ito maaaring maisulat ang mga piraso, hindi tinanggal ang bus.
  2. Isang 16 bit one way counter. Ang counter na ito ay maaari lamang dagdagan, kapag na-acess.
  3. Isang proteksyon na "isulat" o "basahin / isulat" ang mga pahina sa memorya. Lamang kung napatunayan gamit ang susi, ang mga pahinang ito ay maaaring mabasa o mabago.
  4. Isang pagyeyelo / pag-block ng mga indibidwal na pahina upang maprotektahan laban sa anumang pagbabago.

Ni ang paggamit ng OTP, ang 16 bit counter o ang paggamit ng pag-block bit ay ipinatupad sa naibigay na code, ngunit madaling maipatupad batay sa impormasyong ibinigay sa https://www.nxp.com/docs/en/data- sheet / MF0ICU2.pd…

Tulad ng proteksyon ng susi ay mahalaga para sa paggamit ng Mifare Ultralight C, naroroon ang lahat ng mga kaugnay na pag-andar.

Ang lahat ng mga utos ay ginagamit sa Serial monitor na may "bagong linya lamang" at may 115200 Baud

  • Humihiling ang "auth 49454D4B41455242214E4143554F5946" ng isang pagpapatunay na may ibinigay na susi (sa kasong ito ang karaniwang Mifare Ultralight C key)
  • Itatapon ng "dump" ang nilalaman ng card hanggang sa nakikita nila. Kung sakaling ang mga pahina ay protektado ng susi, maaaring hindi makita ang mga pahinang ito hanggang sa isang nakaraang pagpapatotoo na may susi. Sa unang dalawang haligi ipinapahiwatig kung ang mga pahina ay naka-lock o limitado ang pag-access.
  • Ang "newKey 49454D4B41455242214E4143554F5946" ay magsusulat ng isang bagong susi sa card. Ang susi ay nakasulat sa mga pahina 44 hanggang 47. gagana lamang ito, kung ang mga pahinang ito ay hindi naka-lock o protektado nang walang dating pagpapatotoo.
  • Ang "wchar 10 hello world" ay magsusulat ng "hello world" na magsisimula sa pahina 10. Muli, ang mga gumagana lamang ng mga pahina na ito ay hindi naka-lock o protektado nang walang dating pagpapatotoo. Kapag sinusubukang magsulat sa itaas ng pahina 39 o sa ibaba ng pahina 4 ito ay mag-uudyok ng ang error o data ay hindi pinapansin dahil ang mga pahinang ito ay hindi memorya ng gumagamit.
  • Ang "whex 045ACBF44688" ay magsusulat ng mga halagang Hex direkta sa memorya, nalalapat ang mga nakaraang kundisyon.
  • Pinoprotektahan ng "protektahan ang 30" ang lahat ng mga pahina mula sa pahina 30 pataas. Nakasalalay sa pahintulot, ang mga pahinang ito ay maaari lamang mabago o mabasa pagkatapos ng paunang pagpapatotoo na may susi. Ang paggamit ng "proteksyon" na may mga halagang mas mataas sa 47 ay magtatakda ng lahat ng mga pahina sa "walang proteksyon" KASAMA ANG SUSI sa mga pahina 44-47 (na maaaring mabago ngunit hindi mabasa). Upang maiwasan ang pagbabago ng susi, ang proteksyon ay dapat na magsimula sa pahina 44.
  • Ang "setpbit 0" ay nagtatakda ng proteksyon ng kaunti at nagpapasya kung ang mga protektadong pahina ay binabasa lamang ("setpbit 1") o hindi maaaring mabasa na hindi nakasulat ("setpbit 0") nang walang nakaraang pagpapatotoo na may susi.

Hindi lahat ng mga utos ay maaaring magamit kaagad pagkatapos matukoy ang card. Ang isang "pagtapon" dati sa ibang utos ay laging tumutulong.

Hakbang 3: Mahalaga

  1. Ang programa ay naiiba sa pagitan ng mga uri ng Ultralight sa pamamagitan ng pagbabasa ng pahina 43 at 44. Kung ang pahina 43 ay nababasa at ang pahina 44 ay hindi, malamang na isang Ultralight C. NGUNIT, kung nabasa / isinulat mo protektahan ang pahina 43 ang kard ay hindi na kinikilala bilang Ang Ultralight C (ay walang anumang epekto sa anumang bagay) Ang tamang pagkakakilanlan ng Ultralight ay dapat gawin sa pamamagitan ng pagpapatunay na may susi (Hindi ko ipinatupad iyon dahil sa mga kadahilanang katatagan).
  2. Bago gamitin ang mga utos na "setpbit" at "protektahan" ang command na "dump" ay dapat gamitin, kung hindi man ang status ng proteksyon ng mga pahina ay hindi malalaman.
  3. Kung "basahin / isulat" mo ang proteksyon ng mga unang pahina ng iyong card, hindi na ito gagana sa program na ito dahil ang unang pahina ay patuloy na binabasa upang makita kung mayroon pa ring kard. Habang ang unang dalawang pahina ay binabasa lamang (ang UID ay nakaimbak doon), walang katuturan sa pagprotekta sa kanila.

Mga isyu sa katatagan

Gumagamit ang code na ito ng "pamantayan" RC522 library para sa Arduino at isang library ng 3DES mula sa https://github.com/Octoate/ArduinoDES. Samantalang ang RC522 library ay karaniwang ginagamit, ang 3DES library ay tila hindi gaanong kalat at dapat na manu-manong mai-install.

Ang code ay nasubukan sa isang Arduino Uno. Ngunit habang sinusulat ito, nakatagpo ako ng maraming kakaibang mga problema tungkol sa katatagan. Kahit papaano ang alinman sa aking mga kasanayan sa pag-program ay hindi ganon kahusay, ang isa sa mga ginamit na aklatan ay hindi matatag o ang paghahalo ng mga aklatan ay hindi magandang ideya.

Mangyaring tandaan ito kapag ginagamit ang code !!!

Ang pagpapalit nito o paggamit ng mga bahagi lamang nito ay maaaring humantong sa kakaibang pag-uugali tulad ng pag-crash, pag-print ng mga kakatwang bagay o pagkuha ng timeout o NAK kapag nagbabasa mula sa card. Maaari itong mangyari sa anumang lugar sa code (gastos sa akin ng maraming oras ng pag-debug). Kung mahahanap mo ang (mga) dahilan para dito, mangyaring bigyan ako ng isang pahiwatig.

Inirerekumendang: