Mundarija:

Arduino -da RC522 bilan Mifare Ultralight C -dan foydalanish: 3 qadam
Arduino -da RC522 bilan Mifare Ultralight C -dan foydalanish: 3 qadam

Video: Arduino -da RC522 bilan Mifare Ultralight C -dan foydalanish: 3 qadam

Video: Arduino -da RC522 bilan Mifare Ultralight C -dan foydalanish: 3 qadam
Video: Знакомство с RFID и подключение модуля RC522 к Arduino 2024, Iyul
Anonim
Arduino -da RC522 bilan Mifare Ultralight C -dan foydalanish
Arduino -da RC522 bilan Mifare Ultralight C -dan foydalanish

Karta egalarini aniqlash yoki biror narsa qilishga ruxsat berish uchun RFID texnologiyasidan foydalanish (eshikni ochish va h.k.) juda keng tarqalgan yondashuv. DIY qo'llanilganda RC522 moduli keng qo'llaniladi, chunki u juda arzon va bu modul uchun juda ko'p kod mavjud.

Ko'p hollarda kartaning UID karta egasini "aniqlash" uchun ishlatiladi va Mifare Classic kartalari ishlatiladi, chunki ular arzon va ko'pincha RC522 modulini sotib olishda qo'shiladi.

Siz bilganingizdek, Mifare Classic tizimi bir necha yillar davomida buzilgan va u endi xavfsiz deb hisoblanmaydi. Klassik kartalarda ishlatiladigan Crypto1 shifrlash tizimini yengib o'tish mumkin va UID ma'lumotlarini qayta dasturlash mumkin bo'lgan qayta yoziladigan kartalar (sehrli kartalar).

Shunday qilib, xavfsizlikka tegishli har qanday dastur uchun Mifare Classic kartalaridan foydalanish tavsiya etilmaydi! Xuddi shu narsa NTAG va Mifare Ultralight tizimlari uchun ham amal qiladi

Shunday qilib, tanlov professional tizimdan foydalanish yoki xavfsizroq RFID tizimidan foydalanishdir. Mavjud tizimlar - Mifare Ultralight C, Mifare DESFire va Mifare Plus. Bu xavfsizroq tizimlardan foydalanadigan ko'plab professional tizimlar bo'lgani uchun, DIY hamjamiyati uchun deyarli hech qanday echim yo'q (Teensy -ga asoslangan DESFire -ning bir yechimi bor, u qimmatroq bo'lgan PN523 taxtasiga asoslangan). Bundan tashqari, DESFire kartalari ancha qimmat. Shunday qilib, muammo yaxshiroq va arzonroq echim topish edi.

Taqdim etilgan yechim arzon Xitoy RC522 DIY moduli yordamida arzon Mifare Ultralight "C" kartalariga to'liq kirishni ta'minlaydi. Ushbu kod asosida xavfsiz Mifare Ultralight C DIY ilovalarida ishlatilishi mumkin.

1 -qadam: Old shartlar

Old shartlar
Old shartlar

Garchi RC522 yaxshi ishlab chiqilgan bo'lsa -da, u ko'p hollarda yomon qurilgan, chunki ba'zi komponentlar o'lchamlari past. Bu modulning yomon obro'siga olib keladi, chunki u past sezgirlikga ega va barcha turdagi kartalar aniqlanmaydi. Ayniqsa, Mifare Ultralight C aniqlanmaydi va kartalarni o'qib bo'lmaydi.

Asosiy muammo - L1 va L2 induktorlarining spetsifikatsiyasi. Http://ham.marsik.org/2017/04/using-cheap-rc522-nfc-reader-to-read.html da tasvirlanganidek. Faqat bu induktorlarni mos keladiganlarga almashtirish orqali. FERROCORE CW1008-2200 to'satdan RC522 uning haqiqiy salohiyati nimada ekanligini ko'rsatadi.

Shunday qilib, berilgan kodni ishlatishdan oldin, induktorlarni almashtirish kerak. Bu faqat oldindan o'rnatilgan induktor bilan ishlamaydi!

Bularning barchasi, Ultralight C kartalari energiyaga juda muhtoj. Bu energiya RC522 RF-maydoni bilan ta'minlanadi. Endüktörlerin past amperajı tufayli, energiya maydoni Ultralight C ni quvvatlantirish uchun etarlicha kuchli emas. Mifare Classic kabi boshqa kartalar kamroq quvvatga muhtoj va shuning uchun juda barqaror ishlaydi.

2 -qadam: Bu qanday ishlaydi?

Bu qanday ishlaydi?
Bu qanday ishlaydi?
Bu qanday ishlaydi?
Bu qanday ishlaydi?
Bu qanday ishlaydi?
Bu qanday ishlaydi?
Bu qanday ishlaydi?
Bu qanday ishlaydi?

Shunday qilib, RC522 modulini o'zgartirgandan so'ng, Mifare Ulralight C dasturidan qanday foydalanish mumkin?

Mifare Ultralight C 3DES shifriga asoslangan parolni tasdiqlashni qo'llab -quvvatlaydi. Ushbu parol yordamida kartaning mazmuni "o'qish uchun" yoki ruxsatsiz foydalanuvchiga umuman ko'rinmas holga keltirilishi mumkin.

Ushbu parol himoyasidan foydalanish uchun parolni kartaga yozish va sahifalarni himoya qilish kerak. Amalga oshirilgandan so'ng, siz ilovadagi kartani faqat parolga asoslangan autentifikatsiyani yoki himoyalangan hududdan qo'shimcha tayyor ma'lumotlarni so'rash orqali tekshirishingiz mumkin. Agar bu muvaffaqiyatli bo'lsa, siz kartadagi UID -ga ishonishingiz mumkinligini bilasiz.

Ehtiyot bo'ling: parolga asoslangan autentifikatsiyasiz siz hali ham Mifare Ultralight C kartasiga ishonolmaysiz, chunki Ultralight C ni taqlid qiladigan "sehrli kartalar" mavjud.

Texnologiyadan mustaqil bo'lgan har bir karta (agar to'g'ri chastotada bo'lsa), RF maydonidan quvvat olganda UID bilan javob beradi va o'zlarini aniqlashni so'raydi. Bundan tashqari, ular SAK qiymatini taqdim etadilar, ularda mavjud karta turi haqida minimal ma'lumot beriladi. Afsuski, barcha Mifare Ultralight va NTAG tizim turini (SAK = 0x00), shu jumladan Mifare Ultralight C ni aniqlaydi. Shunday qilib, kartalar uchun so'rov o'tkazilganda, hech bo'lmaganda SAK qiymati 0x00, o'quvchida Ultralight C bo'lishi mumkinligini ko'rsatadi..

Ultralight C ekanligiga ishonch hosil qilish uchun kartaga shifrlangan autentifikatsiya so'rovini yuborish mumkin. Agar bu Ultralight C kartasi bo'lmasa, bu so'rov tushunilmaydi va javob NAK bo'ladi.

Agar bu Ulralight C kartasi bo'lsa, siz 8 baytli javob olasiz. Bu 8 bayt tasodifiy raqam "B" (RndB), 3DES shifr yordamida kartadagi saqlangan kalit bilan shifrlangan.

Bu shifrlangan RndB dasturdagi bir xil kalit yordamida shifrini ochish kerak. Keyin bu tasodifiy son biroz o'zgartiriladi (bir baytga aylantiriladi → 1 -bayt 8 -baytga o'tkaziladi va boshqa barcha baytlar bir bayt pastga suriladi, keyin RndB 'deb nomlanadi). Keyin dastur 8 baytli tasodifiy "A" sonini (RndA) hosil qiladi va bu RndAni o'zgartirilgan RndBga biriktiradi. Bu yana kalit yordamida shifrlanadi va kartaga yuboriladi.

Karta xabarni parolini ochadi va RndB ning kartadagi ilgari yaratilgan RndB -ga mos kelishini tekshiradi. Agar ular mos kelsa, karta endi kalitni bilishini biladi.

Bu vaqtda, dastur hali ham kartaning kalitni bilishini bilmaydi, shuning uchun unga ishonish mumkinmi yoki yo'qmi. Bunga erishish uchun karta endi shifrlangan RndA -ni bir baytga aylantiradi, keyin bu baytlarni kalit yordamida shifrlaydi va qaytarib yuboradi.

Keyin dastur kartaning javobini hal qiladi va asl RndA va javob berilgan RndA mos kelishini tekshiradi. FAQAT shundan so'ng ikkala sub'ekt (dastur va karta) bir xil kalit haqidagi bilimlari bilan bo'lishishini bilishadi.

Bu jarayon faqat autentifikatsiya qilish uchun ishlatiladi. Barcha keyingi aloqalar har doim "aniq matnda" bo'ladi.

UID -ni o'zgartirish mumkin bo'lgan "sehrli Ultralight C" kartalari mavjud bo'lsa -da, kalitni kartadan olish mumkin emas va 3DES shifri juda himoyalangan. Kalit 16 baytli kalit, shuning uchun kalitni olish uchun qo'pol kuch bilan yondashish biroz vaqt talab etadi.

Aytilganidek, autentifikatsiyadan oldin va autentifikatsiyadan keyingi aloqa har doim aniq matnda bo'ladi (aka shifrlanmagan). Kartaga yangi kalit yozilganda, to'g'ri jihoz yordamida kalitning mazmunini aniqlash mumkin. Iltimos, kalitni faqat xavfsiz muhitda yozing va kalitni sir saqlang.

Ultralight C kartasidan foydalanganda

Ultralight C kartasi bir nechta xavfsizlik xususiyatlariga ega:

  1. Bir martalik dasturlash (OTP) xotirasi. Bu sohada bitlar yozilishi mumkin, avtobus o'chirilmaydi.
  2. 16 bitli bir tomonlama hisoblagich. Bu hisoblagich faqat kirish vaqtida ko'payishi mumkin.
  3. Xotiradagi sahifalarni "yozish" yoki "o'qish/yozish" himoyasi. Faqat kalit bilan tasdiqlangan bo'lsa, bu sahifalarni o'qish yoki o'zgartirish mumkin.
  4. Har qanday o'zgarishlardan himoya qilish uchun alohida sahifalarni muzlatish / blokirovka qilish.

Berilgan kodda OTP, 16 bitli hisoblagich yoki blokirovka bitidan foydalanish amalga oshirilmagan, lekin https://www.nxp.com/docs/en/data- da berilgan ma'lumotlarga asoslanib osonlik bilan amalga oshirilishi mumkin. varaq/MF0ICU2.pd …

Mifare Ultralight C -ni ishlatish uchun kalit bilan himoyalanish zarur bo'lganligi sababli, barcha tegishli funktsiyalar mavjud.

Barcha buyruqlar ketma -ket monitorda "faqat yangi qator" va 115200 Baud bilan ishlatiladi

  • "Auth 49454D4B41455242214E4143554F5946" berilgan kalit bilan autentifikatsiyani so'raydi (bu holda standart Mifare Ultralight C kaliti)
  • "Dump" karta tarkibini ko'rinadigan joyga tashlaydi. Agar sahifalar kalit bilan himoyalangan bo'lsa, bu sahifalar kalit bilan oldingi autentifikatsiya qilinmaguncha ko'rinmasligi mumkin. Birinchi ikkita ustunda sahifalar qulflangan yoki kirish cheklangan bo'lsa ko'rsatiladi.
  • "NewKey 49454D4B41455242214E4143554F5946" kartaga yangi kalit yozadi. Kalit 44 dan 47 gacha bo'lgan sahifalarga yozilgan. Agar bu sahifalar qulflanmagan yoki oldingi autentifikatsiyasiz himoyalanmagan bo'lsa ishlaydi.
  • "wchar 10 salom dunyo" 10 -sahifadan boshlab "salom dunyo" deb yozadi. Shunga qaramay, bu faqat sahifalarning asari qulflanmagan va himoyalanmagan. Agar 39 -sahifaning yuqorisida yoki 4 -sahifaning ostiga yozmoqchi bo'lsangiz, bu sizga xato yoki ma'lumotlar hisobga olinmaydi, chunki bu sahifalar foydalanuvchi xotirasi emas.
  • "Whex 045ACBF44688" Hex qiymatlarini to'g'ridan -to'g'ri xotiraga yozadi, oldingi shartlar qo'llaniladi.
  • "30ni himoya qilish" 30 -sahifadan yuqoriga qarab barcha sahifalarni himoya qiladi. Ruxsatnomaga qarab, bu sahifalar faqat kalit yordamida oldindan tasdiqlanganidan keyin o'zgartirilishi yoki o'qilishi mumkin. 47 dan yuqori qiymatlarga ega bo'lgan "himoya" dan foydalanish barcha sahifalarni 44-47-sahifalardagi kalitni "himoyalanmagan" qilib o'rnatadi (faqat o'zgartirish mumkin, lekin o'qilmaydi). Kalitni o'zgartirishni oldini olish uchun himoya hech bo'lmaganda 44 -betdan boshlanishi kerak.
  • "Setpbit 0" himoya bitini o'rnatadi va himoyalangan sahifalar faqat o'qish ("setpbit 1") yoki kalit bilan oldingi autentifikatsiyasiz o'qilmasligini ("setpbit 0") belgilaydi.

Hamma buyruqlar kartani aniqlagandan so'ng darhol ishlatilishi mumkin emas. Oldindan boshqa buyruqqa "tashlanish" har doim yordam beradi.

3 -qadam: muhim

  1. Dastur 43 va 44 -betlarni o'qish orqali Ultralight turlarini ajratadi. Agar 43 -sahifani o'qish mumkin bo'lsa, 44 -sahifani o'qish mumkin bo'lmasa, bu Ultralight C. lekin siz 43 -sahifani o'qib/yozib qo'ysangiz, karta endi tan olinmaydi. Ultralight C (hech narsaga ta'sir qilmaydi) Ultralight -ni to'g'ri aniqlash kalit bilan autentifikatsiya orqali amalga oshirilishi kerak (men buni barqarorlik sabablari tufayli amalga oshirmaganman).
  2. "Setpbit" va "himoya" buyruqlarini ishlatishdan oldin "dump" buyrug'ini ishlatish kerak, aks holda sahifalarning himoya holati ma'lum bo'lmaydi.
  3. Agar siz kartangizning birinchi sahifalarini "o'qiysiz/yozsangiz", u endi bu dastur bilan ishlamaydi, chunki karta bor yoki yo'qligini bilish uchun birinchi sahifa doimiy o'qiladi. Birinchi ikkita sahifa faqat o'qiladi (UID u erda saqlanadi), ularni himoya qilishning ma'nosi yo'q.

Barqarorlik muammolari

Bu kod Arduino uchun "standart" RC522 kutubxonasidan va https://github.com/Octoate/ArduinoDES dan 3DES kutubxonasidan foydalanadi. RC522 kutubxonasi juda keng tarqalgan bo'lsa -da, 3DES kutubxonasi unchalik keng tarqalmagan ko'rinadi va uni qo'lda o'rnatish kerak.

Kod Arduino Uno -da sinovdan o'tgan. Ammo yozish paytida men barqarorlik bilan bog'liq ko'plab g'alati muammolarga duch keldim. Qanday bo'lmasin, mening dasturlash ko'nikmalarim unchalik yaxshi emas, ishlatilgan kutubxonalardan biri beqaror yoki kutubxonalarni aralashtirish yaxshi emas.

Iltimos, kodni ishlatishda buni yodda tuting !!!

Uni o'zgartirish yoki uning ayrim qismlarini ishlatish, kartadan o'qish paytida qulab tushishi, g'alati narsalarni chop etish yoki tanaffus yoki NAK olish kabi g'alati xatti -harakatlarga olib kelishi mumkin. Bu kodning istalgan joyida sodir bo'lishi mumkin (bu menga ko'p soatlik disk raskadrovka uchun kerak). Agar siz buning sababini topsangiz, menga maslahat bering.

Tavsiya: