Բովանդակություն:

Mifare Ultralight C- ի օգտագործումը RC522- ով Arduino- ում. 3 քայլ
Mifare Ultralight C- ի օգտագործումը RC522- ով Arduino- ում. 3 քայլ

Video: Mifare Ultralight C- ի օգտագործումը RC522- ով Arduino- ում. 3 քայլ

Video: Mifare Ultralight C- ի օգտագործումը RC522- ով Arduino- ում. 3 քայլ
Video: Mifare Ultralight operations - part1 2024, Հուլիսի
Anonim
Օգտագործելով Mifare Ultralight C- ը RC522- ով Arduino- ում
Օգտագործելով Mifare Ultralight C- ը RC522- ով Arduino- ում

Քարտապանները նույնականացնելու կամ ինչ -որ բան անելու թույլտվություն տալու համար (դուռ բացել և այլն) 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 համայնքի համար գործնականում լուծումներ չկան (կա Teensy- ի վրա հիմնված DESFire լուծում, որը հիմնված է ավելի թանկ PN523 ճեղքման տախտակի վրա): Բացի այդ, DESFire քարտերը բավականին թանկ են: Այսպիսով, մարտահրավերն ավելի լավ և էժան լուծում գտնելն էր:

Ներկայացված լուծումն ապահովում է լիարժեք մուտք դեպի էժան Mifare Ultralight “C” քարտեր ՝ օգտագործելով չինական էժան RC522 DIY մոդուլը: Այս կոդի հիման վրա անվտանգ Mifare Ultralight C- ն կարող է օգտագործվել DIY ծրագրերում:

Քայլ 1: Նախապայմաններ

Նախապայմաններ
Նախապայմաններ

Չնայած RC522- ը լավ նախագծված է, այն շատ դեպքերում վատ կառուցված է, քանի որ որոշ բաղադրիչներ վատ չափված են: Սա հանգեցնում է մոդուլի վատ համբավին, որ այն ցածր զգայունություն ունի, և ոչ բոլոր տեսակի քարտերն են բացահայտվելու: Հատկապես Mifare Ultralight C- ը ոչ նույնականացված կլինի, ոչ էլ հնարավոր կլինի կարդալ քարտերը:

Հիմնական խնդիրը L1 և L2 ինդուկտորների հստակեցումն է: Ինչպես նկարագրված է https://ham.marsik.org/2017/04/using-cheap-rc522-nfc-reader-to-read.html: Պարզապես այս ինդուկտորները փոխարինելով համապատասխաններով, օրինակ. FERROCORE CW1008-2200 հանկարծ RC522- ը ցույց է տալիս, թե որն է նրա իրական ներուժը:

Այսպիսով, նախքան տրված կոդը փորձելը, ՊԵՏՔ Է ՓՈԽԱՆԱԿՎԵԼ ինդուկտորները: Այն պարզապես չի աշխատի նախապես տեղադրված ինդուկտորների հետ:

Այս ամենի նախապատմությունն այն է, որ Ultralight C քարտերը բավականին էներգիայի կարիք ունեն: Այս էներգիան ապահովում է RC522 ՌԴ-դաշտը: Ինդուկտորների ցածր հզորության պատճառով էներգիայի դաշտը բավականաչափ հզոր չէ, որպեսզի կարողանա սնուցել Ultralight C. Մյուս քարտերը, ինչպիսիք են Mifare Classic- ը, պարզապես ավելի քիչ էներգիայի կարիք ունեն, և, հետևաբար, աշխատում են բավականին կայուն:

Քայլ 2: Ինչպե՞ս է այն աշխատում:

Ինչպես է դա աշխատում?
Ինչպես է դա աշխատում?
Ինչպես է դա աշխատում?
Ինչպես է դա աշխատում?
Ինչպես է դա աշխատում?
Ինչպես է դա աշխատում?
Ինչպես է դա աշխատում?
Ինչպես է դա աշխատում?

Այսպիսով, RC522 մոդուլը փոփոխելուց հետո, ինչպե՞ս կարող եք օգտագործել Mifare Ulralight C- ը ձեր դիմումի համար:

Հնարքն այն է, որ Mifare Ultralight C- ն աջակցում է գաղտնաբառի նույնականացմանը ՝ հիմնված 3DES ծածկագրի վրա: Այս գաղտնաբառի օգտագործմամբ քարտի բովանդակությունը կարող է «միայն կարդալու համար» կամ ամբողջությամբ անտեսանելի չարտոնված օգտվողի համար:

Գաղտնաբառի այս պաշտպանությունից օգտվելու համար գաղտնաբառը պետք է գրվի քարտի վրա և էջերը պետք է պաշտպանված լինեն: Ավարտելուց հետո դուք կարող եք ստուգել ձեր դիմումի քարտը `պարզապես գաղտնաբառի վրա հիմնված նույնականացում կամ պաշտպանված տարածքից լրացուցիչ պատրաստ տվյալներ խնդրելով: Միայն եթե դա հաջողվի, դուք գիտեք, որ կարող եք վստահել քարտի տրամադրված UID- ին:

Ewգուշացեք. Առանց գաղտնաբառի վրա հիմնված նույնականացման, դուք դեռ չեք կարող վստահել Mifare Ultralight C քարտին, քանի որ կան նաև «կախարդական քարտեր», որոնք նմանակում են Ultralight C- ն:

Տեխնոլոգիայից անկախ յուրաքանչյուր քարտ (եթե դա ճիշտ հաճախականությամբ է) կպատասխանի իր UID- ին, երբ սնուցվում է ՌԴ դաշտով և կպահանջի ինքնորոշվել: Բացի այդ, նրանք տրամադրում են SAK արժեք ՝ ապահովելով նվազագույն տեղեկատվություն առկա քարտի տեսակի մասին: Unfortunatelyավոք, բոլոր Mifare Ultralight- ը և NTAG- ը ճանաչվում են որպես syme տիպ (SAK = 0x00), ներառյալ Mifare Ultralight C. Այսպիսով, քարտերի հարցում կատարելիս առնվազն 0x00- ի SAK արժեքը ակնարկ կտա, որ ընթերցողի վրա կարող է լինել Ultralight C.

Համոզվելու համար, որ դա Ultralight C- ն է, գաղտնագրված նույնականացման հարցումը կարող է ուղարկվել քարտին: Եթե սա ՉԻ Ultralight C քարտ, ապա այս հարցումը չի ընկալվի, և պատասխանը կլինի NAK (ոչ հարազատ):

Եթե սա Ulralight C քարտ է, դուք կստանաք 8 բայթ պատասխան: Այս 8 բայթերը պատահական թիվ են ՝ «B» (RndB), որը ծածկագրված է քարտի վրա պահված բանալիով ՝ օգտագործելով 3DES ծածկագիրը:

Այս կոդավորված RndB- ն պետք է գաղտնագրվի ՝ օգտագործելով ծրագրի նույն բանալին: Այս պատահական թիվը այնուհետև փոքր -ինչ փոփոխվում է (մեկ բայթով պտտվող 1 բայթը կտեղափոխվի 8 բայթ, իսկ մնացած բոլոր բայթերը մեկ բայթ ներքև են մղվում, այնուհետև կոչվում է RndB’): Այնուհետև ծրագիրը ստեղծում է 8 բայթ «A» ինքնին թիվ (RndA) և կցում այս RndA- ն փոփոխված RndB’- ին: Սա կրկին կոդավորված է `օգտագործելով բանալին և ուղարկեք քարտին:

Քարտը գաղտնագրում է հաղորդագրությունը և ստուգում, արդյոք RndB- ն համապատասխանում է քարտի վրա նախկինում ստեղծված RndB- ին: Եթե դրանք համընկնում են, քարտը այժմ գիտի, որ ծրագիրը գիտի բանալին:

Այս պահին ծրագիրը դեռ չգիտի, արդյոք քարտը գիտի բանալին և, հետևաբար, կարելի է վստահել, թե ոչ: Դրան հասնելու համար քարտը այժմ մեկ բայթով պտտեցնում է գաղտնագրված RndA- ն, այնուհետև բանալին օգտագործելով կոդավորում և հետ ուղարկում դրանք:

Theրագիրը այնուհետև կծածկագրի քարտի պատասխանը և կստուգի, թե արդյոք բնօրինակ RndA- ն և պատասխանված RndA- ն համընկնում են: ՄԻԱՅՆ այն ժամանակ երկու կազմակերպություններն էլ (ծրագիրը և քարտը) գիտեն, որ նրանք կիսում են նույն բանալու գիտելիքները:

Այս գործընթացը կարող է օգտագործվել միայն նույնականացման համար: Հետագա բոլոր հաղորդակցությունները միշտ «հստակ տեքստով» են:

Չնայած կան «կախարդական Ultralight C» քարտեր, որտեղ UID- ը կարող է փոփոխվել, բանալին ինքնին չի կարող ձեռք բերել քարտից, և 3DES ծածկագիրը բավականին ապահով է: Բանալին 16 բայթ ստեղն է, ուստի բանալին ստանալու կոպիտ ուժի մոտեցումը որոշ ժամանակ կպահանջի:

Ինչպես նշվեց, նույնականացումից առաջ և նույնականացումից հետո հաղորդակցությունը միշտ հստակ տեքստով է (նույնը ՝ ոչ կոդավորված): Քարտի վրա նոր բանալին գրելիս բանալիների բովանդակությունը կարելի է հոտոտել ՝ օգտագործելով համապատասխան սարքավորումները: Այսպիսով, խնդրում ենք բանալին գրել միայն ապահով միջավայրում և գաղտնի պահել բանալին:

Ultralight C քարտից օգտվելիս

Ultralight C քարտը ունի անվտանգության բազմաթիվ առանձնահատկություններ ՝

  1. Մեկանգամյա ծրագրավորման (OTP) հիշողություն: Այս հատվածում բիթերը կարող են գրվել, ավտոբուսը ՝ ջնջվել:
  2. 16 բիթանոց միակողմանի հաշվիչ: Այս հաշվիչը կարող է միայն աճել, երբ այն հասանելի է:
  3. Հիշողության մեջ էջերի «գրել» կամ «կարդալ/գրել» պաշտպանություն: Միայն եթե բանալին վավերացված է, այս էջերը կարող են կարդալ կամ փոփոխվել:
  4. Առանձին էջերի սառեցում / արգելափակում ՝ ցանկացած փոփոխությունից պաշտպանվելու համար:

Ոչ OTP- ի, 16 բիթանոց հաշվիչի, ոչ էլ արգելափակման օգտագործումը չի կիրառվում տվյալ ծածկագրում, այլ կարող է հեշտությամբ իրականացվել ՝ https://www.nxp.com/docs/en/data- կայքում տրված տեղեկատվության հիման վրա: թերթ/MF0ICU2.pd…

Քանի որ բանալին պաշտպանելը էական է Mifare Ultralight C- ի օգտագործման համար, առկա են բոլոր համապատասխան գործառույթները:

Բոլոր հրամանները օգտագործվում են Սերիական մոնիտորում «միայն նոր տողով» և 115200 Baud- ով

  • «Author 49454D4B41455242214E4143554F5946» - ը կպահանջի նույնականացում տվյալ բանալով (այս դեպքում ստանդարտ Mifare Ultralight C ստեղնը)
  • «Աղբանոցը» քարտի բովանդակությունը կթափի այնքանով, որքանով դրանք տեսանելի են: Այն դեպքում, երբ էջերը պաշտպանված են բանալիով, դրանք կարող են տեսանելի չլինել մինչև բանալինով նույնականացումը: Առաջին երկու սյունակներում նշվում է, եթե էջերը կողպված են կամ մուտքը սահմանափակված է:
  • «NewKey 49454D4B41455242214E4143554F5946» - ը քարտի նոր բանալին կգրի: Բանալին գրված է 44 -ից 47 -րդ էջերում: Սա կաշխատի միայն այն դեպքում, եթե այդ էջերը ոչ կողպված են, ոչ էլ պաշտպանված առանց նախորդ նույնականացման:
  • «wchar 10 hello world» - ը կգրեն «բարև աշխարհ» ՝ սկսած 10 -րդ էջից: Կրկին, էջերի միայն այս աշխատանքները ոչ կողպված են, ոչ էլ պաշտպանված են առանց նախկին նույնականացման: 39 -րդ էջից կամ 4 -րդ էջից ներքև գրել փորձելու դեպքում դա կհուշի սխալը կամ տվյալները անտեսվում են, քանի որ այս էջերը օգտվողի հիշողություն չեն:
  • «Whex 045ACBF44688» - ը Hex արժեքներ կգրի անմիջապես հիշողության մեջ, գործում են նախկին պայմանները:
  • «Պաշտպանեք 30» -ը պաշտպանում է բոլոր էջերը 30 -ից դեպի վեր: Կախված թույլտվությունից, այս էջերը կարող են փոփոխվել կամ կարդալ միայն բանալինով նախնական նույնականացումից հետո: 47-ից բարձր արժեքներով «պաշտպանել» -ի օգտագործմամբ բոլոր էջերը կդառնան «անպաշտպան» ՝ ներառյալ բանալին 44-47 էջերում (որը կարող է փոփոխվել, բայց չկարդալ): Բանալին չփոխելը կանխելու համար պաշտպանությունը պետք է առնվազն սկսվի 44 -րդ էջից:
  • «Setpbit 0» - ը սահմանում է պաշտպանական բիթը և որոշում է, թե արդյոք պաշտպանված էջերը կարդացվում են միայն («setpbit 1») կամ չեն կարող կարդալ առանց գրելու («setpbit 0») ՝ առանց բանալին նախորդ նույնականացման:

Ոչ բոլոր հրամանները կարող են օգտագործվել քարտի հայտնաբերումից անմիջապես հետո: Նախկինում մեկ այլ հրամանի «աղբանոցը» միշտ օգնում է:

Քայլ 3: Կարևոր

  1. Programրագիրը տարբերակում է Ultralight տեսակները ՝ կարդալով 43 -րդ և 44 -րդ էջերը: Եթե 43 -րդ էջը ընթեռնելի է, իսկ 44 -ը `ոչ, ապա ամենայն հավանականությամբ դա Ultralight C. Ultralight C (ոչ մի բանի վրա որևէ ազդեցություն չի ունենում) Ultralight- ի պատշաճ նույնականացումը պետք է կատարվի բանալին նույնականացնելու միջոցով (ես դա չեմ իրականացրել կայունության պատճառով):
  2. Մինչև «setpbit» և «պաշտպանել» հրամանների օգտագործումը պետք է օգտագործել «աղբավայր» հրամանը, հակառակ դեպքում էջերի պաշտպանության կարգավիճակը հայտնի չի լինի:
  3. Եթե դուք «կարդում/գրում» եք պաշտպանում ձեր քարտի առաջին էջերը, այն այլևս չի աշխատի այս ծրագրի հետ, քանի որ առաջին էջը անընդհատ կարդացվում է ՝ պարզելու համար, թե արդյոք դեռ կա քարտ: Քանի որ առաջին երկու էջերը կարդում են միայն այնուամենայնիվ (UID- ն այնտեղ է պահվում), դրանք պաշտպանելու իմաստ չկա:

Կայունության խնդիրներ:

Այս կոդը օգտագործում է «ստանդարտ» RC522 գրադարանը Arduino- ի համար և 3DES գրադարան ՝ https://github.com/Octoate/ArduinoDES- ից: Մինչդեռ RC522 գրադարանը բավականին հաճախ է օգտագործվում, 3DES գրադարանը կարծես այնքան էլ տարածված չէ և պետք է տեղադրվի ձեռքով:

Կոդը փորձարկվել է Arduino Uno- ի վրա: Բայց այն գրելիս ես հանդիպեցի կայունության հետ կապված շատ տարօրինակ խնդիրների: Ինչ -որ կերպ կամ ծրագրավորման իմ հմտություններն այնքան էլ լավը չեն, օգտագործված գրադարաններից մեկն անկայուն է, կամ գրադարանները խառնելը լավ գաղափար չէ:

Խնդրում ենք նկատի ունենալ սա, երբ օգտագործում եք կոդը !!!

Փոխելը կամ դրա միայն որոշ մասերի օգտագործումը կարող է հանգեցնել տարօրինակ վարքագծի, ինչպիսիք են վթարի ենթարկելը, տարօրինակ իրերի տպագրումը կամ քարտից կարդալիս ժամանակի դադարեցումը կամ NAK- ի ստացումը: Դա կարող է տեղի ունենալ ծածկագրի ցանկացած վայրում (դրա վրա ինձ արժեցել են վրիպազերծման բազմաթիվ ժամեր): Եթե գտնում եք դրա պատճառը (երը), խնդրում եմ ինձ հուշում տվեք:

Խորհուրդ ենք տալիս: