Სარჩევი:

Mifare Ultralight C გამოყენებით RC522 არდუინოზე: 3 ნაბიჯი
Mifare Ultralight C გამოყენებით RC522 არდუინოზე: 3 ნაბიჯი

ვიდეო: Mifare Ultralight C გამოყენებით RC522 არდუინოზე: 3 ნაბიჯი

ვიდეო: Mifare Ultralight C გამოყენებით RC522 არდუინოზე: 3 ნაბიჯი
ვიდეო: Mifare Ultralight operations - part1 2024, ივლისი
Anonim
Mifare Ultralight C გამოყენებით RC522 არდუინოზე
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. ვინაიდან ბევრი პროფესიონალური სისტემა იყენებს ამ უფრო უსაფრთხო სისტემებს, წვრილმანი საზოგადოებისთვის პრაქტიკულად არ არსებობს გადაწყვეტილებები (არსებობს Teensy– ზე დაფუძნებული DESFire გადაწყვეტა, რომელიც დაფუძნებულია უფრო ძვირადღირებულ PN523 გარღვევის დაფაზე). გარდა ამისა, DESFire ბარათები საკმაოდ ძვირია. ამიტომ გამოწვევა იყო უკეთესი და იაფი გამოსავლის პოვნა.

წარმოდგენილი გადაწყვეტა უზრუნველყოფს სრულ წვდომას იაფი Mifare Ultralight “C” ბარათებზე იაფი ჩინური RC522 DIY მოდულის გამოყენებით. ამ კოდის საფუძველზე, უსაფრთხო Mifare Ultralight C შეიძლება გამოყენებულ იქნას წვრილმანი პროგრამებისთვის.

ნაბიჯი 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 RF ველი. ინდუქტორების დაბალი სიძლიერის გამო, ენერგეტიკული ველი არ არის საკმარისად მძლავრი იმისთვის, რომ გააძლიეროს Ultralight C. სხვა ბარათებს, როგორიცაა Mifare Classic, უბრალოდ სჭირდებათ ნაკლები ენერგია და, შესაბამისად, საკმაოდ სტაბილურად მუშაობენ.

ნაბიჯი 2: როგორ მუშაობს ის?

Როგორ მუშაობს?
Როგორ მუშაობს?
Როგორ მუშაობს?
Როგორ მუშაობს?
Როგორ მუშაობს?
Როგორ მუშაობს?
Როგორ მუშაობს?
Როგორ მუშაობს?

ასე რომ, RC522 მოდულის შეცვლის შემდეგ, როგორ შეგიძლიათ გამოიყენოთ Mifare Ulralight C თქვენი აპლიკაციისთვის?

შეასრულა ის, რომ Mifare Ultralight C მხარს უჭერს პაროლის ავტორიზაციას 3DES შიფრის საფუძველზე. ამ პაროლის გამოყენებით, ბარათის შინაარსი შეიძლება გახდეს „მხოლოდ წასაკითხი“ან სრულიად უხილავი არაუფლებამოსილი მომხმარებლისთვის.

ამ პაროლის დაცვის გამოსაყენებლად პაროლი უნდა ჩაიწეროს ბარათზე და გვერდები დაცული იყოს. დასრულების შემდეგ, თქვენ შეგიძლიათ გადაამოწმოთ ბარათი თქვენს აპლიკაციაში ან მოითხოვოთ პაროლზე დაფუძნებული ავტორიზაცია ან დამატებით მზა მონაცემები დაცული ტერიტორიიდან. მხოლოდ იმ შემთხვევაში, თუ ეს წარმატებულია, თქვენ იცით, რომ შეგიძლიათ ენდოთ ბარათზე მოწოდებულ UID- ს.

ფრთხილად იყავით: პაროლზე დაფუძნებული ავტორიზაციის გარეშე თქვენ მაინც ვერ ენდობით Mifare Ultralight C ბარათს, რადგან არსებობს „ჯადოსნური ბარათებიც“, რომლებიც ახდენენ Ultralight C– ს სიმულაციას.

ტექნოლოგიისგან დამოუკიდებელი თითოეული ბარათი (თუ სწორი სიხშირეა) უპასუხებს მათ UID– ს, როდესაც იკვებება RF ველით და ითხოვს საკუთარი თავის იდენტიფიცირებას. გარდა ამისა, ისინი უზრუნველყოფენ SAK მნიშვნელობას, რომელიც აწვდის მინიმალურ ინფორმაციას ბარათის ტიპის შესახებ. სამწუხაროდ ყველა Mifare Ultralight და NTAG იდენტიფიცირდება როგორც syme ტიპის (SAK = 0x00), მათ შორის Mifare Ultralight C. მაშასადამე, ბარათების გამოკითხვისას, სულ მცირე SAK მნიშვნელობა 0x00 მისცემს მინიშნებას, რომ მკითხველზე შეიძლება იყოს 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– ს ერთი ბაიტით, შემდეგ კი ამ ბაიტებს დაშიფვრავს გასაღების გამოყენებით და აგზავნის უკან.

ამის შემდეგ პროგრამა გაშიფრავს ბარათის პასუხს და შეამოწმებს შეესაბამება თუ არა ორიგინალური RndA და პასუხებული RndA. მხოლოდ მაშინ ორივე სუბიექტმა (პროგრამა და ბარათი) იცის, რომ ისინი იზიარებენ ერთი და იმავე გასაღების ცოდნას.

ეს პროცესი გამოიყენება მხოლოდ ავტორიზაციისთვის. ყველა შემდგომი კომუნიკაცია ყოველთვის არის "წმინდა ტექსტში".

მიუხედავად იმისა, რომ არსებობს „ჯადოსნური ულტრა მსუბუქი 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 ბაუდით

  • "Author 49454D4B41455242214E4143554F5946" ითხოვს ავტორიზაციას მოცემული გასაღებით (ამ შემთხვევაში სტანდარტული Mifare Ultralight C გასაღები)
  • "ნაგავსაყრელი" ჩააგდებს ბარათის შინაარსს რამდენადაც ისინი ხილულია. იმ შემთხვევაში, თუ გვერდები დაცულია გასაღებით, ეს გვერდები შეიძლება არ იყოს ხილული გასაღებამდე წინა ავტორიზაციამდე. პირველ ორ სვეტში მითითებულია, თუ გვერდები ჩაკეტილია ან წვდომა შეზღუდულია.
  • "NewKey 49454D4B41455242214E4143554F5946" ჩაწერს ბარათის ახალ გასაღებს. გასაღები იწერება 44 - დან 47 - მდე გვერდებზე. ეს იმუშავებს მხოლოდ იმ შემთხვევაში, თუ ეს გვერდები არც ჩაკეტილია და არც დაცულია წინა ავტორიზაციის გარეშე.
  • "wchar 10 hello world" დაიწერს "hello world" დაწყებული მე –10 გვერდიდან. ისევ და ისევ, ეს მხოლოდ იმ გვერდების ნამუშევრებია, რომლებიც არ არის ჩაკეტილი და დაცული წინა ავტორიზაციის გარეშე. 39 – ე გვერდის ზემოთ ან მე –4 გვერდის ქვემოთ დაწერის მცდელობისას ეს გამოჩნდება შეცდომა ან მონაცემები იგნორირებულია, რადგან ეს გვერდები არ არის მომხმარებლის მეხსიერება.
  • "Whex 045ACBF44688" ჩაწერს Hex მნიშვნელობებს პირდაპირ მეხსიერებაში, წინა პირობები ვრცელდება.
  • "დაიცავი 30" იცავს ყველა გვერდს 30 გვერდიდან ზემოთ. ნებართვიდან გამომდინარე, ამ გვერდების შეცვლა ან წაკითხვა შესაძლებელია მხოლოდ გასაღებით წინასწარი ავტორიზაციის შემდეგ. 47-ზე მაღალი მნიშვნელობების მქონე „დაცვა“-ს გამოყენებით ყველა გვერდი დაყენდება „დაუცველად“, კლავიშის ჩათვლით 44-47 გვერდებზე (რომელიც შეიძლება შეიცვალოს, მაგრამ არ იკითხებოდეს). გასაღების შეცვლის თავიდან ასაცილებლად, დაცვა უნდა დაიწყოს მინიმუმ 44 გვერდიდან.
  • "Setpbit 0" ადგენს დაცვის ბიტს და გადაწყვეტს, დაცული გვერდები მხოლოდ იკითხება ("setpbit 1") ან ვერც წაიკითხება არ არის დაწერილი ("setpbit 0") გასაღებით წინა ავტორიზაციის გარეშე.

ბარათის გამოვლენისთანავე ყველა ბრძანების გამოყენება შეუძლებელია. "ნაგავსაყრელი" ადრე სხვა ბრძანებაში ყოველთვის ეხმარება.

ნაბიჯი 3: მნიშვნელოვანია

  1. პროგრამა განასხვავებს ულტრასტაბილურ ტიპებს 43 -ე და 44 -ე გვერდების წაკითხვით. თუ გვერდი 43 იკითხება, ხოლო გვერდი 44 არა, ის სავარაუდოდ Ultralight C. Ultralight C (არაფერზე არ ახდენს გავლენას) Ultralight– ის სწორი იდენტიფიკაცია უნდა მოხდეს გასაღებით ავტორიზაციის გზით (მე ეს არ განვახორციელე სტაბილურობის მიზეზების გამო).
  2. "Setpbit" და "დაცვა" ბრძანებების გამოყენებამდე უნდა გამოიყენოთ ბრძანება "dump", წინააღმდეგ შემთხვევაში გვერდების დაცვის სტატუსი არ იქნება ცნობილი.
  3. თუ თქვენ "კითხულობთ/წერთ" იცავთ თქვენი ბარათის პირველ გვერდებს, ის აღარ იმუშავებს ამ პროგრამით, რადგან პირველი გვერდი მუდმივად იკითხება იმის დასადგენად, არის თუ არა ჯერ კიდევ ბარათი. რადგანაც პირველი ორი გვერდი იკითხება მხოლოდ (UID ინახება იქ), აზრი არ აქვს მათ დაცვას.

სტაბილურობის საკითხები

ეს კოდი იყენებს "სტანდარტულ" RC522 ბიბლიოთეკას არდუინოსთვის და 3DES ბიბლიოთეკას https://github.com/Octoate/ArduinoDES. ვინაიდან RC522 ბიბლიოთეკა საკმაოდ ხშირად გამოიყენება, 3DES ბიბლიოთეკა არც თუ ისე ფართოდ არის გავრცელებული და ხელით უნდა იყოს დაინსტალირებული.

კოდი გამოცდილია Arduino Uno– ზე. მაგრამ წერისას მე შევეჯახე ბევრ უცნაურ პრობლემას სტაბილურობასთან დაკავშირებით. რატომღაც ან ჩემი პროგრამირების უნარი არ არის ისეთი კარგი, ერთ -ერთი გამოყენებული ბიბლიოთეკა არასტაბილურია ან ბიბლიოთეკების შერევა არ არის კარგი იდეა.

გთხოვთ გაითვალისწინოთ ეს კოდის გამოყენებისას !!!

მისი შეცვლა ან მისი მხოლოდ ნაწილების გამოყენება შეიძლება გამოიწვიოს უცნაური ქცევა, როგორიცაა ავარია, უცნაური საგნების დაბეჭდვა, დროის ამოწურვა ან NAK ბარათის წაკითხვისას. ეს შეიძლება მოხდეს კოდის ნებისმიერ ადგილას (მისი გამართვის მრავალი საათი დამიჯდა). თუ თქვენ იპოვით ამის მიზეზს, გთხოვთ მინიშნება მითხარით.

გირჩევთ: