Mündəricat:

Mifare Ultralight C -nin Arduino -da RC522 ilə istifadəsi: 3 addım
Mifare Ultralight C -nin Arduino -da RC522 ilə istifadəsi: 3 addım

Video: Mifare Ultralight C -nin Arduino -da RC522 ilə istifadəsi: 3 addım

Video: Mifare Ultralight C -nin Arduino -da RC522 ilə istifadəsi: 3 addım
Video: Arduino Метро Единый билет RC522 Card Read Module RFID NFC 2024, Iyul
Anonim
Arduino'da RC522 ilə Mifare Ultralight C istifadə
Arduino'da RC522 ilə Mifare Ultralight C istifadə

Kart sahiblərini müəyyən etmək və ya bir şey etməyə icazə vermək (qapını açmaq və s.) Üçün RFID texnologiyasından istifadə etmək olduqca yaygın bir yanaşmadır. DIY tətbiqi halında RC522 modulu olduqca ucuz olduğu üçün geniş istifadə olunur və bu modul üçün çoxlu kod mövcuddur.

Əksər hallarda, kartın UID -si kart sahibini "müəyyən etmək" üçün istifadə olunur və Mifare Classic kartları ucuz olduğu üçün istifadə olunur və tez -tez RC522 modulu alarkən daxil edilir.

Bildiyiniz kimi, Mifare Classic sistemi bir neçə ildir ki, hack olunur və artıq təhlükəsiz sayılmır. Klassik kartların istifadə etdiyi Crypto1 şifrələmə sistemini aşmaq olar və bir UID məlumatının yenidən proqramlaşdırıla biləcəyi yenidən yazıla bilən kartlardır (sehrli kartlar).

Beləliklə, hər hansı bir təhlükəsizliyə uyğun tətbiq üçün Mifare Classic kartlarının istifadəsi tövsiyə edilmir! Eyni (əksəriyyəti) NTAG və Mifare Ultralight sistemləri üçün də keçərlidir

Buna görə seçim ya peşəkar bir sistemdən istifadə etmək, ya da daha etibarlı bir RFID sistemindən istifadə etməkdir. Mifare Ultralight C, Mifare DESFire və Mifare Plus mövcuddur. Bu daha etibarlı sistemlərdən istifadə edən bir çox peşəkar sistem olduğu üçün DIY icması üçün praktiki olaraq heç bir həll yolu yoxdur (daha bahalı PN523 qırılma lövhəsinə əsaslanan bir Teensy əsaslı DESFire həlli var). Əlavə olaraq DESFire kartları olduqca bahalıdır. Beləliklə, problem daha yaxşı və daha ucuz bir həll tapmaq idi.

Təqdim olunan həll, ucuz Çin RC522 DIY modulundan istifadə edərək ucuz Mifare Ultralight "C" kartlarına tam girişi təmin edir. Bu kod əsasında təhlükəsiz Mifare Ultralight C DIY tətbiqlərində istifadə edilə bilər.

Addım 1: Ön şərtlər

İlkin şərtlər
İlkin şərtlər

RC522 yaxşı dizayn edilmiş olsa da, bəzi komponentlərin ölçüləri zəif olduğu üçün əksər hallarda zəif qurulur. Bu, həssaslığının aşağı olması və bütün növ kartların tanınmaması modulun pis nüfuzuna səbəb olur. Xüsusilə Mifare Ultralight C nə tanınacaq, nə də kartları oxumaq mümkün olmayacaq.

Əsas problem L1 və L2 induktorlarının spesifikasiyasıdır. Http://ham.marsik.org/2017/04/using-cheap-rc522-nfc-reader-to-read.html saytında təsvir edildiyi kimi. Sadəcə bu induktorları uyğun olanlarla əvəz etməklə, məsələn. FERROCORE CW1008-2200 birdən RC522, real potensialının nə olduğunu göstərir.

Verilən kodu sınamadan əvvəl induktorları dəyişdirməlisiniz. Yalnız əvvəlcədən quraşdırılmış induktorlarla işləməyəcək!

Bütün bunların arxa planı, Ultralight C kartlarının olduqca enerjiyə ac olmasıdır. Bu enerji RC522 RF sahəsi ilə təmin edilir. İndüktörlərin aşağı amperajı səbəbindən enerji sahəsi Ultralight C -ni gücləndirəcək qədər güclü deyil. Mifare Classic kimi digər kartlar daha az gücə ehtiyac duyur və buna görə də olduqca sabit işləyirlər.

Addım 2: Necə işləyir?

Bu necə işləyir?
Bu necə işləyir?
Bu necə işləyir?
Bu necə işləyir?
Bu necə işləyir?
Bu necə işləyir?
Bu necə işləyir?
Bu necə işləyir?

Beləliklə, RC522 modulunu dəyişdirdikdən sonra tətbiqiniz üçün Mifare Ulralight C -dən necə istifadə edə bilərsiniz?

Hiylə budur ki, Mifare Ultralight C, 3DES şifrəsinə əsaslanan parol doğrulamasını dəstəkləyir. Bu şifrəni istifadə edərək, kartın məzmunu "yalnız oxunaqlı" və ya icazəsiz bir istifadəçi üçün tamamilə görünməz hala gətirilə bilər.

Bu parol qorunmasını istifadə etmək üçün şifrə karta yazılmalı və səhifələr qorunmalıdır. Bitirdikdən sonra, yalnız parol əsaslı bir doğrulama və ya qorunan bir ərazidən əlavə olaraq hazır məlumatlar istəyərək kartı tətbiqinizdə yoxlaya bilərsiniz. Yalnız bu müvəffəqiyyətli olarsa, kartdakı təmin edilmiş UID -yə etibar edə biləcəyinizi bilirsiniz.

Ehtiyatlı olun: parol əsaslı doğrulama olmadan hələ də bir Mifare Ultralight C kartına etibar edə bilməzsiniz, çünki Ultralight C simulyasiya edən "sehrli kartlar" da var.

Texnologiyadan asılı olmayan hər bir kart (əgər düzgün tezlikdə olarsa), RF sahəsi ilə işləyərkən UID ilə cavab verəcək və özlərini tanımaq istəyəcək. Əlavə olaraq, mövcud olan kartın növü haqqında minimum məlumat verən bir SAK dəyəri təqdim edirlər. Təəssüf ki, bütün Mifare Ultralight və NTAG, Mifare Ultralight C də daxil olmaqla, sistem növü (SAK = 0x00) olaraq təyin olunur. Buna görə də kartlar üçün sorğu apararkən, ən azından 0x00 SAK dəyəri oxucuda Ultralight C ola biləcəyinə işarə verəcəkdir..

Ultralight C olduğundan əmin olmaq üçün karta şifrəli identifikasiya sorğusu göndərilə bilər. Bu Ultralight C kartı DEYİLSƏN, bu sorğu başa düşülməyəcək və cavab bir NAK (deyil-acknolege) olacaq.

Bu Ulralight C kartıdırsa, 8 baytlıq cavab alacaqsınız. Bu 8 Bayt, 3DES şifrəsini istifadə edərək kartdakı saxlanan açarla şifrələnmiş "B" (RndB) təsadüfi bir rəqəmdir.

Bu şifrəli RndB, proqramdakı eyni düyməni istifadə edərək deşifr edilməlidir. Bu təsadüfi ədəd daha sonra bir qədər dəyişdirilir (bir bayt ilə döndərildi → 1 bayt 8 baytına köçürüləcək və bütün digər baytlar bir bayt aşağı itələdikdən sonra RndB 'adlanır). Proqram daha sonra 8 A baytlıq təsadüfi bir ədəd "A" yaradır (RndA) və bu RndA -nı dəyişdirilmiş RndB -ə bağlayır. Yenidən açar istifadə edərək şifrələnir və karta göndərilir.

Kart mesajı deşifr edir və RndB -in kartda əvvəllər yaradılmış RndB -ə uyğun olub olmadığını yoxlayır. Uyğunlaşsalar, kart indi proqramın açarı bildiyini bilir.

Bu nöqtədə, proqram hələ də kartın açarı bildiyini bilmir və buna görə də etibar oluna bilər. Buna nail olmaq üçün kart indi şifrəsi açılmış RndA -nı bir bayt döndərir, sonra açarı istifadə edərək bu baytları şifrələyir və geri göndərir.

Proqram daha sonra kartın cavabının şifrəsini açacaq və orijinal RndA ilə cavablanan RndA uyğunluğunu yoxlayacaq. YALNIZ SONRA hər iki varlıq (proqram və kart) eyni açar haqqında biliklərini paylaşdıqlarını bilirlər.

Bu proses yalnız identifikasiya üçün istifadə olunur. Bütün digər ünsiyyət həmişə "aydın mətndə" olur.

UID -in dəyişdirilə biləcəyi "sehrli Ultralight C" kartları olsa da, açarın özü kartdan əldə edilə bilməz və 3DES şifrəsi kifayət qədər təhlükəsizdir. Açar 16 Baytlıq bir açardır, buna görə də açarı əldə etmək üçün kobud güc yanaşması bir az vaxt aparacaq.

Qeyd edildiyi kimi, identifikasiyadan əvvəl və doğrulamadan sonra ünsiyyət həmişə aydın mətndədir (aka şifrələnmir). Karta yeni bir açar yazarkən, uyğun avadanlıqdan istifadə edərək açarın məzmununu anlamaq olar. Zəhmət olmasa açarı yalnız etibarlı bir mühitdə yazın və açarı gizli saxlayın.

Ultralight C kartından istifadə edərkən

Ultralight C kartı bir çox təhlükəsizlik xüsusiyyətinə malikdir:

  1. Birdəfəlik Proqramlaşdırma (OTP) yaddaşı. Bu sahədə bitlər yazıla bilər, avtobus silinmir.
  2. 16 bitlik bir tərəfli sayğac. Bu sayğac yalnız daxil olduqda artıra bilər.
  3. Yaddaşdakı səhifələrin "yaz" və ya "oxu/yaz" qorunması. Yalnız açarla təsdiq edildikdə, bu səhifələr oxuna və ya dəyişdirilə bilər.
  4. Hər hansı bir dəyişiklikdən qorunmaq üçün fərdi səhifələrin dondurulması / bloklanması.

Nə OTP, 16 bit sayğacı, nə də bloklama bitinin istifadəsi verilən kodda tətbiq edilmir, lakin https://www.nxp.com/docs/en/data- da verilən məlumatlara əsasən asanlıqla həyata keçirilə bilər. vərəq/MF0ICU2.pd…

Mifare Ultralight C istifadə etmək üçün açarla qorunma vacib olduğu üçün bütün müvafiq funksiyalar mövcuddur.

Bütün əmrlər Serial monitorda "yalnız yeni xətt" və 115200 Baud ilə istifadə olunur

  • "Auth 49454D4B41455242214E4143554F5946" verilmiş açarla təsdiq tələb edəcək (bu halda standart Mifare Ultralight C açarı)
  • "Zibil" kartın məzmununu göründüyü qədər atacaq. Səhifələr açarla qorunursa, bu səhifələr açarla əvvəlki identifikasiya olunana qədər görünməyəcək. İlk iki sütunda səhifələrin kilidlənməsi və ya girişin məhdudlaşdırılması göstərilir.
  • "NewKey 49454D4B41455242214E4143554F5946" karta yeni bir açar yazacaq. Açar 44-47 -ci səhifələrə yazılmışdır. Bu, yalnız bu səhifələr əvvəlki kimlik doğrulaması olmadan nə kilidlənmiş, nə də qorunmamış olduqda işləyəcək.
  • "wchar 10 hello world", 10 -cu səhifədən başlayaraq "hello world" yazacaq. Yenə də, bu səhifələrin yalnız əvvəlki işləri heç kim kilidlənmir və ya əvvəlki kimlik doğrulaması olmadan qorunmur. 39 -cu səhifənin yuxarı və ya 4 -cü səhifəsinin altına yazmağa çalışanda bu bu səhifələr istifadəçi yaddaşı olmadığı üçün səhv və ya məlumatlar nəzərə alınmır.
  • "Whex 045ACBF44688", Hex dəyərlərini birbaşa yaddaşa yazacaq, əvvəlki şərtlər tətbiq olunur.
  • "30 qoruyun" bütün səhifələri 30 -cu səhifədən yuxarıya doğru qoruyur. İcazədən asılı olaraq, bu səhifələr yalnız açarla əvvəlcədən təsdiqləndikdən sonra dəyişdirilə və ya oxuna bilər. 47-dən yuxarı dəyərlərlə "qoruma" istifadə etmək, bütün səhifələri 44-47-ci səhifələrdəki açar daxil olmaqla "qorunmasız" olaraq təyin edəcək (yalnız dəyişdirilə bilən, lakin oxunmayan). Açarın dəyişdirilməsinin qarşısını almaq üçün qoruma ən azından səhifə 44 -dən başlamalıdır.
  • "Setpbit 0", müdafiə bitini təyin edir və qorunan səhifələrin yalnız açarla əvvəlki identifikasiyası olmadan oxumaq üçün ("setpbit 1") və ya yazılmamasını ("setpbit 0") qərar verir.

Kart aşkar edildikdən dərhal sonra bütün əmrlər istifadə edilə bilməz. Əvvəllər başqa bir əmrə verilən "tullantı" həmişə kömək edir.

Addım 3: Vacibdir

  1. Proqram, Ultralight növləri arasında səhifə 43 və 44 oxuyaraq fərqlənir. Səhifə 43 oxunursa və səhifə 44 deyilsə, bu, çox güman ki, Ultralight C -dir, ancaq 43 -cü səhifəni oxusanız/yazsanız, kart artıq tanınmır. Ultralight C (heç bir şeyə heç bir təsiri yoxdur) Ultralight -ın düzgün identifikasiyası açarla identifikasiya yolu ilə aparılmalıdır (sabitlik səbəbindən bunu tətbiq etməmişəm).
  2. "Setpbit" və "qoruma" əmrlərindən istifadə etməzdən əvvəl "dump" əmrindən istifadə edilməlidir, əks halda səhifələrin qorunma vəziyyəti bilinməyəcəkdir.
  3. Kartınızın ilk səhifələrini "oxuyub/yazsanız", bu proqramla işləməyəcək, çünki hələ də kartın olub olmadığını görmək üçün ilk səhifə daim oxunur. İlk iki səhifə yalnız hər halda oxunduğu üçün (UID orada saxlanılır), onları qorumağın heç bir mənası yoxdur.

Sabitlik problemləri

Bu kod Arduino üçün "standart" RC522 kitabxanasından və https://github.com/Octoate/ArduinoDES saytından 3DES kitabxanasından istifadə edir. RC522 kitabxanası olduqca geniş istifadə olunsa da, 3DES kitabxanası o qədər də geniş yayılmamış görünür və əl ilə quraşdırılmalıdır.

Kod Arduino Uno üzərində sınaqdan keçirilmişdir. Ancaq yazarkən sabitlik baxımından bir çox qəribə problemlərlə qarşılaşdım. Nədənsə ya proqramlaşdırma bacarıqlarım o qədər də yaxşı deyil, istifadə olunan kitabxanalardan biri qeyri -sabitdir və ya kitabxanaları qarışdırmaq yaxşı fikir deyil.

Zəhmət olmasa kodu istifadə edərkən bunu nəzərə alın !!!

Dəyişdirmək və ya yalnız bir hissəsini istifadə etmək, kartdan oxuyarkən çökmək, qəribə şeylər çap etmək və ya vaxt aşımı və ya NAK almaq kimi qəribə davranışlara səbəb ola bilər. Bu, kodun istənilən yerində baş verə bilər (mənə çox saatlıq ayıklama başa gəldi). Bunun səbəbini tapsanız, mənə bir ipucu verin.

Tövsiyə: