Агуулгын хүснэгт:

Arduino дээр RC522 бүхий Mifare Ultralight C ашиглах: 3 алхам
Arduino дээр RC522 бүхий Mifare Ultralight C ашиглах: 3 алхам

Видео: Arduino дээр RC522 бүхий Mifare Ultralight C ашиглах: 3 алхам

Видео: Arduino дээр RC522 бүхий Mifare Ultralight C ашиглах: 3 алхам
Видео: Знакомство с RFID и подключение модуля RC522 к Arduino 2024, Долдугаар сарын
Anonim
Arduino дээр Mifare Ultralight C -ийг RC522 ашиглан ашиглах
Arduino дээр Mifare Ultralight C -ийг RC522 ашиглан ашиглах

Картын эзэмшигчдийг тодорхойлох эсвэл ямар нэгэн зүйл хийх (хаалга онгойлгох гэх мэт) ашиглахын тулд RFID технологийг ашиглах нь нэлээд түгээмэл арга юм. DIY програмын хувьд RC522 модулийг өргөн ашигладаг бөгөөд энэ нь маш хямд бөгөөд энэ модульд маш олон код байдаг.

Ихэнх тохиолдолд картны UID -ийг карт эзэмшигчийг "танихад" ашигладаг бөгөөд Mifare Classic картыг хямд бөгөөд ихэвчлэн RC522 модулийг худалдаж авахад ашигладаг тул ашигладаг.

Гэхдээ та мэдэх байх, Mifare Classic системийг хэдэн жилийн турш хакердсан бөгөөд одоо аюулгүй гэж тооцогдоогүй байна. Сонгодог картуудад ашигладаг Crypto1 шифрлэлтийн системийг даван туулж, UID өгөгдлийг дахин програмчлах боломжтой дахин бичигддэг картууд (шидэт картууд) юм.

Тиймээс аюулгүй байдлын талаархи аливаа програмын хувьд Mifare Classic картыг ашиглахыг зөвлөдөггүй! Үүнтэй ижил зүйл NTAG болон Mifare Ultralight системүүдэд (ихэнх) хамаарна

Тиймээс сонголт бол мэргэжлийн системийг ашиглах эсвэл илүү найдвартай RFID системийг ашиглахыг оролдох явдал юм. Боломжтой систем бол Mifare Ultralight C, Mifare DESFire, Mifare Plus юм. Эдгээр илүү найдвартай системийг ашигладаг олон мэргэжлийн системүүд байдаг тул DIY нийгэмлэгийн хувьд бараг ямар ч шийдэл байдаггүй (илүү үнэтэй PN523 таслах самбар дээр суурилсан Teensy дээр суурилсан DESFire шийдэл байдаг). Нэмж дурдахад DESFire картууд нэлээд үнэтэй байдаг. Тиймээс сорилт бол илүү сайн, хямд шийдлийг олох явдал байв.

Үзүүлсэн шийдэл нь хямд хятад RC522 DIY модулийг ашиглан хямд Mifare Ultralight “C” картуудад бүрэн нэвтрэх боломжийг олгодог. Энэхүү код дээр үндэслэн аюулгүй Mifare Ultralight C -ийг DIY програмуудад ашиглаж болно.

Алхам 1: Урьдчилсан нөхцөл

Урьдчилсан нөхцөл
Урьдчилсан нөхцөл

RC522 нь сайн зохион бүтээгдсэн боловч зарим бүрэлдэхүүн хэсгүүд нь хэмжээ багатай байдаг тул ихэнх тохиолдолд муу бүтээдэг. Энэ нь мэдрэмтгий чанар багатай модулийн нэр хүндэд муугаар нөлөөлдөг бөгөөд бүх төрлийн картуудыг ялгахгүй. Ялангуяа Mifare Ultralight C -ийг танихгүй, картуудыг унших боломжгүй болно.

Гол бэрхшээл бол L1 ба L2 индукторуудын тодорхойлолт юм. Http://ham.marsik.org/2017/04/using-cheap-rc522-nfc-reader-to-read.html дээр тайлбарласны дагуу. Зүгээр л эдгээр индукторуудыг тохирох төхөөрөмжөөр солих замаар. FERROCORE CW1008-2200 гэнэт RC522 нь түүний жинхэнэ потенциал юу болохыг харуулж байна.

Тиймээс өгөгдсөн кодыг туршиж үзэхээсээ өмнө индукторыг солих ёстой. Энэ нь зүгээр л урьдчилан суулгасан индукторуудтай ажиллахгүй болно!

Энэ бүхний үндэс нь Ultralight C картууд эрчим хүчээр маш их өлссөн байдаг. Энэ энергийг RC522 RF талбараар хангадаг. Индукторуудын хүчдэл багатай тул эрчим хүчний талбар нь Ultralight C -ийг тэжээх хангалттай хүч чадалгүй байдаг. Mifare Classic гэх мэт бусад картууд нь бага эрчим хүч шаарддаг тул тогтвортой ажилладаг.

Алхам 2: Энэ нь хэрхэн ажилладаг вэ?

Энэ яаж ажилдаг вэ?
Энэ яаж ажилдаг вэ?
Энэ яаж ажилдаг вэ?
Энэ яаж ажилдаг вэ?
Энэ яаж ажилдаг вэ?
Энэ яаж ажилдаг вэ?
Энэ яаж ажилдаг вэ?
Энэ яаж ажилдаг вэ?

Тиймээс RC522 модулийг өөрчилсний дараа Mifare Ulralight C -ийг програмдаа хэрхэн ашиглах вэ?

Mifare Ultralight C нь 3DES шифр дээр суурилсан нууц үгийн баталгаажуулалтыг дэмждэг явдал юм. Энэхүү нууц үгийг ашигласнаар картын агуулгыг зөвшөөрөлгүй хэрэглэгчид "зөвхөн унших" эсвэл бүрэн харагдахгүй болгож болно.

Энэхүү нууц үгийн хамгаалалтыг ашиглахын тулд нууц үгийг картанд бичиж, хуудсыг хамгаалах шаардлагатай. Үүнийг хийсний дараа та програмынхаа картыг нууц үгээр баталгаажуулах эсвэл хамгаалагдсан бүсээс нэмэлт өгөгдлийг асуух замаар баталгаажуулах боломжтой. Зөвхөн энэ нь амжилттай болсон тохиолдолд та картанд өгсөн UID -д итгэж болно гэдгээ мэдэж болно.

Анхаарна уу: нууц үг суурилсан баталгаажуулалтгүйгээр та Mifare Ultralight C картанд итгэж чадахгүй хэвээр байгаа тул Ultralight C загварыг дуурайдаг "шидэт картууд" байдаг.

Технологиос хамааралгүй карт бүр (хэрэв зөв давтамжтай бол) RF талбараар тэжээгдсэн тохиолдолд UID-ээр хариу өгөх бөгөөд өөрийгөө таниулах хүсэлт гаргах болно. Нэмж дурдахад тэд SAK -ийн утгыг өгдөг бөгөөд энэ нь одоо байгаа картын төрлүүдийн талаар хамгийн бага мэдээлэл өгдөг. Харамсалтай нь бүх Mifare Ultralight ба NTAG нь системийн төрөл (SAK = 0x00), үүнд Mifare Ultralight C гэж тодорхойлогддог. Тиймээс картуудаас санал авахдаа наад зах нь SAK -ийн 0x00 утга нь уншигч дээр Ultralight C байж магадгүй гэсэн дохио өгөх болно..

Энэ нь Ultralight C эсэхийг шалгахын тулд шифрлэгдсэн баталгаажуулалтын хүсэлтийг картанд илгээж болно. Хэрэв энэ нь Ultralight C карт биш бол энэ хүсэлтийг ойлгохгүй бөгөөд хариулт нь NAK байх болно.

Хэрэв энэ нь Ulralight C карт бол танд 8 байтын хариулт ирэх болно. Эдгээр 8 байт нь 3DES шифрийг ашиглан карт дээрх хадгалагдсан түлхүүрээр шифрлэгдсэн "B" (RndB) санамсаргүй тоо юм.

Энэхүү шифрлэгдсэн RndB програмын ижил түлхүүрийг ашиглан шифрийг тайлах ёстой. Дараа нь энэ санамсаргүй тоог бага зэрэг өөрчилдөг (нэг байтаар эргүүлэх → 1 байтыг 8 байт руу шилжүүлэх бөгөөд бусад бүх байтуудыг нэг байт доош түлхэж, дараа нь RndB гэж нэрлэдэг). Дараа нь програм нь "A" гэсэн 8 байт санамсаргүй тоог (RndA) үүсгэж, энэ RndA -ийг өөрчлөгдсөн RndB -д хавсаргана. Үүнийг дахин түлхүүр ашиглан шифрлээд карт руу илгээнэ.

Карт нь мессежийн кодыг тайлж, RndB нь картанд өмнө нь үүсгэсэн RndB -тэй нийцэж байгаа эсэхийг шалгадаг. Хэрэв тэд таарч байвал карт нь түлхүүрийг мэддэг гэдгийг карт мэддэг болсон.

Энэ үед карт нь түлхүүрийг мэддэг эсэхийг мэдэхгүй хэвээр байгаа тул итгэж болох эсэхийг мэдэхгүй байна. Үүнд хүрэхийн тулд карт одоо шифрлэгдсэн RndA -г нэг байтаар эргүүлж, дараа нь эдгээр байтуудыг түлхүүр ашиглан шифрлээд буцааж илгээдэг.

Дараа нь програм нь картын хариуг тайлж, анхны RndA болон хариулсан RndA таарч байгаа эсэхийг шалгах болно. ЗӨВХӨН ТӨГСЛӨГИЙН аль аль нь (програм ба карт) нэг түлхүүрийн мэдлэгээ хуваалцдаг гэдгээ мэддэг.

Энэ үйл явцыг зөвхөн баталгаажуулах зорилгоор ашигладаг. Цаашдын харилцаа холбоо үргэлж "тодорхой текст" дээр байх болно.

UID -ийг өөрчлөх боломжтой "шидэт Ultralight C" картууд байдаг боловч түлхүүрийг өөрөө картаас авах боломжгүй бөгөөд 3DES шифр нь нэлээд найдвартай байдаг. Түлхүүр нь 16 байтын түлхүүр тул түлхүүрийг авахын тулд хүчирхийлэлд өртөхөд хэсэг хугацаа шаардагдана.

Өмнө дурьдсанчлан, нэвтрэлт танилтын өмнөх болон баталгаажуулалтын дараах харилцаа холбоо нь үргэлж тодорхой тексттэй байдаг (шифрлэгдээгүй). Картанд шинэ түлхүүр бичихдээ түлхүүрийн агуулгыг зөв тоног төхөөрөмжийг ашиглан үнэрлэж болно. Тиймээс түлхүүрийг зөвхөн аюулгүй орчинд бичээд түлхүүрээ нууцална уу.

Ultralight C картыг ашиглах үед

Ultralight C карт нь хэд хэдэн хамгаалалтын онцлогтой:

  1. Нэг удаагийн програмчлалын санах ой. Энэ хэсэгт битүүдийг бичиж болно, автобусыг устгахгүй.
  2. 16 битийн нэг талын тоолуур. Энэ тоолуурыг зөвхөн нэвтрэх үед л нэмэгдүүлэх боломжтой.
  3. Санах ойн хуудсыг "бичих" эсвэл "унших/бичих" хамгаалалт. Зөвхөн түлхүүрээр баталгаажсан тохиолдолд эдгээр хуудсыг унших эсвэл өөрчлөх боломжтой.
  4. Өөрчлөлтөөс хамгаалахын тулд хувь хүний хуудсыг хөлдөөх / хаах.

OTP, 16 битийн тоолуур эсвэл блоклох битийн ашиглалтыг аль ч код нь хэрэгжүүлдэггүй, гэхдээ https://www.nxp.com/docs/en/data- дээрх мэдээлэлд үндэслэн хялбархан хэрэгжүүлэх боломжтой. хуудас/MF0ICU2.pd…

Mifare Ultralight C -ийг ашиглахад түлхүүрээр хамгаалалт зайлшгүй шаардлагатай байдаг тул холбогдох бүх функцууд байдаг.

Бүх командыг Цуваа дэлгэц дээр "зөвхөн шинэ мөр" болон 115200 Baud ашиглан ашигладаг

  • "Auth 49454D4B41455242214E4143554F5946" нь өгөгдсөн түлхүүрээр баталгаажуулах хүсэлт гаргах болно (энэ тохиолдолд стандарт Mifare Ultralight C түлхүүр)
  • "Хогийн цэг" нь картын агуулгыг харагдахуйц хэмжээгээр хаях болно. Хуудсыг түлхүүрээр хамгаалсан тохиолдолд эдгээр хуудсууд нь өмнөх түлхүүрээр баталгаажуулах хүртэл харагдахгүй байж магадгүй юм. Эхний хоёр баганад хуудсууд түгжигдсэн эсвэл хандалтыг хязгаарласан бол үүнийг зааж өгсөн болно.
  • "NewKey 49454D4B41455242214E4143554F5946" нь картанд шинэ түлхүүр бичих болно. Түлхүүрийг 44-47 -р хуудсанд бичсэн болно. Эдгээр хуудсууд нь өмнөх баталгаажуулалтгүйгээр түгжигдээгүй эсвэл хамгаалагдаагүй тохиолдолд л ажиллах болно.
  • "wchar 10 hello world" нь 10 -р хуудаснаас эхлэн "hello world" гэж бичих болно. Дахин хэлэхэд, энэ хуудсуудын зөвхөн өмнөх үйлдлийг баталгаажуулалгүйгээр түгжигдээгүй, хамгаалагдаагүй болно. 39 -р хуудас, 4 -р хуудасны доор бичих гэж оролдоход энэ нь Эдгээр хуудсууд нь хэрэглэгчийн санах ой биш тул алдаа эсвэл өгөгдлийг үл тоомсорлодог.
  • "Whex 045ACBF44688" нь Hex утгыг санах ойд шууд бичих болно, өмнөх нөхцөлүүд хамаарна.
  • "30 -ийг хамгаалах" нь 30 -р хуудаснаас дээш бүх хуудсыг хамгаална. Зөвшөөрлөөс хамааран эдгээр хуудсыг зөвхөн түлхүүрээр баталгаажуулсны дараа өөрчлөх эсвэл унших боломжтой болно. 47-оос дээш утгатай "хамгаалах" -ыг ашигласнаар 44-47-р хуудасны түлхүүрийг оруулаад бүх хуудсыг "хамгаалалтгүй" болгоно (үүнийг зөвхөн өөрчилж болох боловч унших боломжгүй). Түлхүүрийг өөрчлөхөөс урьдчилан сэргийлэхийн тулд хамгаалалтыг 44 -р хуудаснаас эхлэх ёстой.
  • "Setpbit 0" нь хамгаалалтын битийг тохируулж, хамгаалагдсан хуудсуудыг зөвхөн түлхүүрээр баталгаажуулалгүйгээр зөвхөн унших боломжтой эсэхийг ("setpbit 1") эсвэл бичихгүй ("setpbit 0") эсэхийг шийддэг.

Картыг илрүүлсний дараа бүх тушаалыг шууд ашиглах боломжгүй. Өмнө нь өөр тушаал руу "хаях" нь үргэлж тусалдаг.

Алхам 3: Чухал

  1. Хөтөлбөр нь Ultralight төрлүүдийг 43 ба 44 -р хуудсыг унших замаар ялгадаг. Хэрэв 43 -р хуудсыг унших боломжтой, 44 -р хуудсыг унших боломжгүй бол Ultralight C. байх магадлалтай. Ultralight C (юунд ч нөлөөлөхгүй) Ultralight -ийг зөв тодорхойлохын тулд түлхүүр ашиглан баталгаажуулалт хийх хэрэгтэй (тогтвортой байдлын үүднээс би үүнийг хэрэгжүүлээгүй).
  2. "Setpbit" ба "хамгаалах" командыг ашиглахаас өмнө "dump" командыг ашиглах ёстой, эс тэгвээс хуудасны хамгаалалтын байдал мэдэгдэхгүй болно.
  3. Хэрэв та картынхаа эхний хуудсыг "унших/бичих" хамгаалалтанд байгаа бол энэ карт нь одоо байгаа эсэхийг харахын тулд эхний хуудсыг байнга уншдаг тул энэ програм цаашид ажиллахгүй болно. Эхний хоёр хуудсыг ямар ч байсан уншдаг (UID тэнд хадгалагддаг) тул тэдгээрийг хамгаалах нь утгагүй болно.

Тогтвортой байдлын асуудал

Энэ код нь Arduino -д зориулсан "стандарт" RC522 номын сан болон https://github.com/Octoate/ArduinoDES дээрх 3DES номын санг ашигладаг. RC522 номын санг ихэвчлэн ашигладаг боловч 3DES номын сан тийм ч өргөн тархаагүй байгаа тул гараар суулгах ёстой.

Кодыг Arduino Uno дээр туршиж үзсэн. Гэхдээ үүнийг бичиж байхдаа тогтвортой байдлын талаар олон хачин асуудалтай тулгарсан. Миний програмчлалын ур чадвар тийм ч сайн биш, ашигласан номын сангийн нэг нь тогтворгүй эсвэл номын санг холих нь тийм ч сайн санаа биш юм.

Кодыг ашиглахдаа үүнийг анхаарч үзээрэй !!!

Үүнийг өөрчлөх эсвэл зөвхөн хэсгийг нь ашиглах нь картаас уншиж байхдаа осолдох, хачин зүйл хэвлэх эсвэл цаг дуусах эсвэл NAK авах гэх мэт хачин зан үйлд хүргэж болзошгүй юм. Энэ нь кодын аль ч хэсэгт тохиолдож болно (энэ нь надад дибаг хийхэд олон цаг зарцуулсан). Хэрэв та үүний шалтгааныг олж мэдвэл надад зөвлөгөө өгөөрэй.

Зөвлөмж болгож буй: