Daftar Isi:
Video: Menggunakan Mifare Ultralight C Dengan RC522 di Arduino: 3 Langkah
2024 Pengarang: John Day | [email protected]. Terakhir diubah: 2024-01-30 09:53
Menggunakan teknologi RFID untuk mengidentifikasi pemegang kartu atau memberi wewenang untuk melakukan sesuatu (membuka pintu, dll.) adalah pendekatan yang cukup umum. Dalam kasus aplikasi DIY modul RC522 banyak digunakan karena cukup murah dan banyak kode ada untuk modul ini.
Dalam kebanyakan kasus, UID kartu digunakan untuk “mengidentifikasi” pemegang kartu, dan kartu Mifare Classic digunakan karena harganya murah dan sering disertakan saat membeli modul RC522.
Tetapi seperti yang mungkin Anda ketahui, sistem Mifare Classic telah diretas selama beberapa tahun dan tidak dianggap aman lagi. Sistem enkripsi Crypto1 yang digunakan oleh kartu Klasik dapat diatasi dan ada kartu yang dapat ditulis ulang di mana data UID dapat diprogram ulang (kartu ajaib).
Jadi, untuk aplikasi terkait keamanan apa pun, penggunaan kartu Mifare Classic tidak disarankan! Hal yang sama berlaku untuk (sebagian besar) sistem NTAG dan Mifare Ultralight
Jadi pilihannya adalah menggunakan sistem profesional atau mencoba menggunakan sistem RFID yang lebih aman. Sistem yang tersedia adalah Mifare Ultralight C, Mifare DESFire dan Mifare Plus. Karena ada banyak sistem profesional yang menggunakan sistem yang lebih aman ini, untuk komunitas DIY hampir tidak ada solusi (ada satu solusi DESFire berbasis Teensy, yang berbasis di papan breakout PN523 yang lebih mahal). Selain itu, kartu DESFire cukup mahal. Jadi tantangannya adalah menemukan solusi yang lebih baik dan lebih murah.
Solusi yang disajikan memberikan akses penuh ke kartu Mifare Ultralight “C” murah menggunakan modul RC522 DIY China yang murah. Berdasarkan kode ini, Mifare Ultralight C yang aman dapat digunakan dalam aplikasi DIY.
Langkah 1: Prasyarat
Meskipun RC522 dirancang dengan baik, dalam banyak kasus pembuatannya buruk karena beberapa komponen memiliki dimensi yang buruk. Ini mengarah pada reputasi buruk modul yang memiliki sensitivitas rendah dan tidak semua jenis kartu akan diidentifikasi. Khususnya Mifare Ultralight C tidak akan teridentifikasi dan tidak mungkin untuk membaca kartu.
Masalah utama adalah spesifikasi induktor L1 dan L2. Seperti yang dijelaskan di https://ham.marsik.org/2017/04/using-cheap-rc522-nfc-reader-to-read.html. Hanya dengan mengganti induktor ini ke yang sesuai mis. FERROCORE CW1008-2200 tiba-tiba RC522 menunjukkan apa potensi sebenarnya.
Jadi sebelum mencoba kode yang diberikan, Anda HARUS MENGGANTI induktor. Itu tidak akan bekerja dengan induktor yang sudah diinstal sebelumnya!
Latar belakang dari semua ini adalah, bahwa kartu Ultralight C cukup haus energi. Energi ini disediakan oleh medan RF RC522. Karena arus listrik induktor yang rendah, medan energi tidak cukup kuat untuk memberi daya pada Ultralight C. Kartu lain seperti Mifare Classic hanya membutuhkan lebih sedikit daya dan oleh karena itu bekerja dengan cukup stabil.
Langkah 2: Bagaimana Cara Kerjanya?
Jadi setelah memodifikasi modul RC522, bagaimana Anda bisa menggunakan Mifare Ulralight C untuk aplikasi Anda?
Caranya adalah, bahwa Mifare Ultralight C mendukung otentikasi kata sandi berdasarkan cipher 3DES. Dengan menggunakan kata sandi ini, isi kartu dapat dibuat “hanya baca” atau sama sekali tidak terlihat oleh pengguna yang tidak berwenang.
Untuk menggunakan perlindungan kata sandi ini, kata sandi perlu ditulis ke kartu dan halaman harus dilindungi. Setelah selesai, Anda dapat memverifikasi kartu di aplikasi Anda baik dengan hanya meminta otentikasi berbasis kata sandi atau data tambahan siap dari area yang dilindungi. Hanya jika ini berhasil, Anda tahu bahwa Anda dapat mempercayai UID yang disediakan pada kartu.
Hati-hati: tanpa otentikasi berbasis kata sandi, Anda masih tidak dapat mempercayai kartu Mifare Ultralight C, karena ada juga “kartu ajaib” yang mensimulasikan Ultralight C.
Setiap kartu yang tidak bergantung pada teknologi (jika dalam frekuensi yang benar) akan merespons dengan UID mereka saat diberi daya oleh medan RF dan meminta untuk mengidentifikasi diri mereka sendiri. Selain itu, mereka memberikan nilai SAK yang memberikan informasi minimal tentang jenis kartu yang ada. Sayangnya semua Mifare Ultralight dan NTAG mengidentifikasi sebagai tipe syme (SAK=0x00), termasuk Mifare Ultralight C. Jadi saat polling kartu, setidaknya nilai SAK 0x00 akan memberikan petunjuk bahwa mungkin ada Ultralight C pada pembaca.
Untuk memastikan itu adalah Ultralight C, permintaan untuk otentikasi terenkripsi dapat dikirim ke kartu. Jika ini BUKAN kartu Ultralight C, permintaan ini tidak akan dipahami, dan responsnya adalah NAK (bukan pengakuan).
Jika ini adalah kartu Ulralight C, Anda akan mendapatkan jawaban 8 byte. 8 Bytes ini adalah nomor acak "B" (RndB) yang dienkripsi oleh kunci yang tersimpan di kartu menggunakan cipher 3DES.
RndB terenkripsi ini harus didekripsi menggunakan kunci yang sama dalam program. Angka acak ini kemudian sedikit dimodifikasi (diputar satu byte → byte 1 akan dipindahkan ke byte 8 dan semua byte lainnya didorong satu byte lebih rendah, kemudian disebut RndB’). Program kemudian menghasilkan angka acak 8 Byte "A" itu sendiri (RndA) dan menempelkan RndA ini ke RndB’ yang dimodifikasi. Ini sekali lagi dienkripsi menggunakan kunci dan dikirim ke kartu.
Kartu mendekripsi pesan dan memeriksa apakah RndB’ cocok dengan RndB yang dibuat sebelumnya pada kartu. Jika cocok, kartu sekarang tahu, bahwa program mengetahui kuncinya.
Pada titik ini, program masih belum mengetahui apakah kartu tersebut mengetahui kuncinya dan karena itu dapat dipercaya atau tidak. Untuk mencapai ini, kartu sekarang memutar RndA yang didekripsi sebanyak satu byte, kemudian mengenkripsi byte ini menggunakan kunci dan mengirimkannya kembali.
Program kemudian akan mendekripsi balasan kartu dan memeriksa apakah RndA asli dan RndA yang dibalas cocok. HANYA MAKA kedua entitas (program dan kartu) tahu bahwa mereka berbagi pengetahuan tentang kunci yang sama.
Proses ini hanya digunakan untuk otentikasi. Semua komunikasi lebih lanjut selalu dalam "teks yang jelas".
Meskipun ada kartu "Ultralight C ajaib" di mana UID dapat dimodifikasi, kuncinya sendiri tidak dapat diperoleh dari kartu dan cipher 3DES cukup aman. Kuncinya adalah kunci 16 Byte, jadi pendekatan brute force untuk mendapatkan kunci akan memakan waktu.
Seperti yang dinyatakan, komunikasi sebelum otentikasi dan setelah otentikasi selalu dalam teks yang jelas (alias tidak dienkripsi). Saat menulis kunci baru ke kartu, isi kunci dapat diendus dengan menggunakan peralatan yang tepat. Jadi tolong tulis kuncinya hanya di lingkungan yang aman dan jaga kerahasiaannya.
Saat menggunakan kartu Ultralight C
Kartu Ultralight C memiliki beberapa fitur keamanan bawaan:
- Memori Pemrograman Satu Kali (OTP). Di area ini bit dapat ditulis, bus tidak dihapus.
- Penghitung satu arah 16 bit. Penghitung ini hanya dapat bertambah, ketika diakses.
- Perlindungan “tulis” atau “baca/tulis” halaman di memori. Hanya jika diautentikasi dengan kunci, halaman ini dapat dibaca atau dimodifikasi.
- Pembekuan / pemblokiran halaman individual untuk melindungi dari modifikasi apa pun.
Baik penggunaan OTP, penghitung 16 bit maupun penggunaan bit pemblokiran tidak diterapkan dalam kode yang diberikan, tetapi dapat dengan mudah diimplementasikan berdasarkan informasi yang diberikan di https://www.nxp.com/docs/en/data- lembar/MF0ICU2.pd…
Karena perlindungan dengan kunci sangat penting untuk menggunakan Mifare Ultralight C, semua fungsi yang relevan hadir.
Semua perintah digunakan di monitor Serial dengan "hanya baris baru" dan dengan 115200 Baud
- “auth 49454D4B41455242214E4143554F5946” akan meminta otentikasi dengan kunci yang diberikan (dalam hal ini kunci standar Mifare Ultralight C)
- "dump" akan membuang konten kartu sejauh terlihat. Jika halaman dilindungi oleh kunci, halaman ini mungkin tidak terlihat hingga autentikasi sebelumnya dengan kunci. Dalam dua kolom pertama ditunjukkan jika halaman dikunci atau akses dibatasi.
- "newKey 49454D4B41455242214E4143554F5946" akan menulis kunci baru ke kartu. Kunci ditulis ke halaman 44 hingga 47. Ini hanya akan berfungsi, jika halaman ini tidak dikunci atau dilindungi tanpa autentikasi sebelumnya.
- "wchar 10 hello world" akan menulis "hello world" mulai dari halaman 10. Sekali lagi, ini hanya berfungsi pada halaman yang tidak dikunci atau dilindungi tanpa otentikasi sebelumnya. Saat mencoba menulis di atas halaman 39 atau di bawah halaman 4 ini akan meminta kesalahan atau data diabaikan karena halaman ini bukan memori pengguna.
- “whex 045ACBF44688” akan menulis nilai Hex langsung ke memori, kondisi sebelumnya berlaku.
- “protect 30” melindungi semua halaman dari halaman 30 ke atas. Bergantung pada izinnya, halaman-halaman ini kemudian hanya dapat dimodifikasi atau dibaca setelah autentikasi sebelumnya dengan kunci. Menggunakan "protect" dengan nilai lebih tinggi dari 47 akan mengatur semua halaman menjadi "unprotected" TERMASUK KUNCI pada halaman 44-47 (yang hanya dapat dimodifikasi tetapi tidak dapat dibaca). Untuk mencegah perubahan kunci, perlindungan setidaknya harus dimulai dari halaman 44.
- "setpbit 0" mengatur bit perlindungan dan memutuskan apakah halaman yang dilindungi hanya dapat dibaca ("setpbit 1") atau tidak dapat dibaca tidak ditulis ("setpbit 0") tanpa otentikasi sebelumnya dengan kunci.
Tidak semua perintah dapat digunakan segera setelah kartu terdeteksi. Sebuah "dump" sebelumnya ke perintah lain selalu membantu.
Langkah 3: Penting
- Program membedakan antara jenis Ultralight dengan membaca halaman 43 dan 44. Jika halaman 43 dapat dibaca dan halaman 44 tidak, kemungkinan besar adalah Ultralight C. TAPI, jika Anda membaca/menulis melindungi halaman 43 kartu tidak lagi dikenali sebagai Ultralight C (tidak berpengaruh pada apa pun) Identifikasi Ultralight yang tepat harus dilakukan melalui otentikasi dengan kunci (saya tidak menerapkannya karena alasan stabilitas).
- Sebelum menggunakan perintah "setpbit" dan "protect" perintah "dump" harus digunakan, jika tidak, status perlindungan halaman tidak akan diketahui.
- Jika Anda “membaca/menulis” melindungi halaman pertama kartu Anda, program ini tidak akan berfungsi lagi karena halaman pertama terus dibaca untuk melihat apakah masih ada kartu. Karena dua halaman pertama hanya dapat dibaca (UID disimpan di sana), tidak ada gunanya melindunginya.
Masalah stabilitas
Kode ini menggunakan pustaka RC522 “standar” untuk Arduino dan pustaka 3DES dari https://github.com/Octoate/ArduinoDES. Sedangkan library RC522 cukup umum digunakan, library 3DES tampaknya tidak begitu luas dan harus diinstal secara manual.
Kode telah diuji pada Arduino Uno. Namun saat menulisnya, saya menemukan banyak masalah aneh terkait stabilitas. Entah bagaimana keterampilan pemrograman saya tidak begitu baik, salah satu perpustakaan yang digunakan tidak stabil atau mencampur perpustakaan bukanlah ide yang baik.
Harap diingat ini saat menggunakan kode!!!
Mengubahnya atau hanya menggunakan sebagian saja dapat menyebabkan perilaku aneh seperti mogok, mencetak hal-hal aneh atau mendapatkan batas waktu atau NAK saat membaca dari kartu. Ini dapat terjadi di mana saja dalam kode (saya menghabiskan banyak waktu untuk debugging). Jika Anda menemukan alasan untuk ini, tolong beri saya petunjuk.
Direkomendasikan:
Cara Menggunakan Modul RFID-RC522 Dengan Arduino: 5 Langkah
Cara Menggunakan Modul RFID-RC522 Dengan Arduino: Dalam Instruksi ini, saya akan memberikan panduan tentang prinsip kerja dasar modul RFID yang digabungkan dengan tag dan chipnya. Saya juga akan memberikan contoh singkat proyek yang saya buat menggunakan modul RFID ini dengan LED RGB. Seperti biasa dengan Ins saya
Cara Membuat Drone Menggunakan Arduino UNO - Membuat Quadcopter Menggunakan Mikrokontroler: 8 Langkah (dengan Gambar)
Cara Membuat Drone Menggunakan Arduino UNO | Membuat Quadcopter Menggunakan Mikrokontroler: PendahuluanKunjungi Saluran Youtube Saya Drone adalah gadget (produk) yang sangat mahal untuk dibeli. Pada postingan kali ini saya akan membahas, bagaimana cara membuatnya dengan harga murah?? Dan Bagaimana Anda bisa membuat sendiri seperti ini dengan harga murah … Nah di India semua bahan (motor, ESC
Neopixel Ws2812 Rainbow LED Glow Dengan M5stick-C - Menjalankan Rainbow di Neopixel Ws2812 Menggunakan M5stack M5stick C Menggunakan Arduino IDE: 5 Langkah
Neopixel Ws2812 Rainbow LED Glow Dengan M5stick-C | Menjalankan Rainbow di Neopixel Ws2812 Menggunakan M5stack M5stick C Menggunakan Arduino IDE: Hai teman-teman dalam instruksi ini kita akan belajar cara menggunakan LED neopixel ws2812 atau strip led atau matriks led atau cincin led dengan papan pengembangan m5stack m5stick-C dengan Arduino IDE dan kami akan membuat pola pelangi dengan itu
Remote Nirkabel Menggunakan Modul 2.4Ghz NRF24L01 Dengan Arduino - Penerima Pemancar 4 Saluran / 6 Saluran Nrf24l01 untuk Quadcopter - Helikopter Rc - Pesawat Rc Menggunakan Arduino: 5 Langkah (dengan Gambar)
Remote Nirkabel Menggunakan Modul 2.4Ghz NRF24L01 Dengan Arduino | Penerima Pemancar 4 Saluran / 6 Saluran Nrf24l01 untuk Quadcopter | Helikopter Rc | Pesawat Rc Menggunakan Arduino: Untuk mengoperasikan mobil Rc | Quadcopter | Drone | pesawat RC | RC boat, kita selalu membutuhkan receiver dan transmitter, misalkan untuk RC QUADCOPTER kita membutuhkan transmitter dan receiver 6 channel dan jenis TX dan RX itu terlalu mahal, jadi kami akan membuatnya di
Petunjuk Lain Menggunakan DIYMall RFID-RC522 dan Nokia LCD5110 Dengan Arduino: 8 Langkah (dengan Gambar)
Petunjuk Lain Menggunakan DIYMall RFID-RC522 dan Nokia LCD5110 Dengan Arduino: Mengapa saya merasa perlu membuat Instruksi lain untuk DIYMall RFID-RC522 dan Nokia LCD5110? Yah, sejujurnya saya sedang mengerjakan Proof of Concept sekitar tahun lalu menggunakan kedua perangkat ini dan entah bagaimana "salah tempat"