Hampir tidak bisa meraih kunci kripto dan menyalin cincin kunci Mifare untuk interkom tentu saja mustahil, tetapi sangat mungkin untuk merakit perangkat yang akan melakukan ini. Saya tidak akan berbicara di sini tentang apa Mifare itu dan masuk ke rincian teknis, saya hanya akan mengatakan bahwa teknologi ini digunakan sekarang, misalnya, dalam interkom, dan untuk menyalin gantungan kunci interkom, Anda perlu mengetahui kunci kriptografi yang dengannya ditutup.
Perhatian! Artikel ini hanya untuk tujuan pendidikan. Kami mengingatkan Anda bahwa penetrasi apa pun ke dalam sistem informasi dapat dituntut secara hukum.
Banyak orang yang tertarik pada teknologi MIfare mungkin memiliki pembaca kartu / kunci Mifare yang paling sederhana untuk membaca dan menulis, yang terdiri dari modul PN532 dan adaptor USB-UART:

Dengan perbaikan sederhana dan murah, perangkat ini dapat dibuat untuk menangkap
Data autentikasi pembaca, dengan bantuan yang mana kunci kripto dihitung, sangat diperlukan untuk membaca dan menyalin. Ada juga perangkat yang tersedia secara komersial untuk tujuan ini - SMKey, Proxmark3, Chameleon dan beberapa lainnya. Ini adalah perangkat dengan banyak fungsi, nyaman, tetapi tidak murah.
Saya memperhatikan opsi anggaran yang lebih banyak berdasarkan “set pria kecil” yang serupa dari modul PN532 dan adaptor USB-UART, yang memungkinkan Anda untuk mengambil data dari pembaca Mifare, seperti interkom, dan menghitung kunci kriptografi yang digunakan pembaca untuk merujuk pada tag.
Perangkat yang dikembangkan pada dasarnya memiliki papan debugging murah, "populer" berdasarkan pada prosesor STM32F103C8T6, juga disebut "BluePill" dengan modul PN532 dan adaptor USB-UART yang terhubung dengannya. Unit ini terhubung melalui kabel USB-OTG ke smartphone di Android. Semua ini disusun dalam versi mock-up tanpa penyolderan, dengan bantuan jumper, dan memiliki sesuatu seperti ini, meskipun tidak dapat ditampilkan, tetapi cukup berfungsi:

Diagram perakitan sangat sederhana dan disajikan dalam bentuk teks:
PN532 ___________________STM32F103C8T6
SCK _____________________ PA5 (SPI1_SCK)
MISO ____________________ PA6 (SPI1_MISO)
MOSI ____________________ PA7 (SPI1_MOSI)
SS ______________________ PB0 (GPIO_OUTPUT)
SIGIN ___________________ PB11 (TIM2_CH4)
SIGOUT __________________ PA12 (TIM1_ETR)
SIGOUT __________________ PA0 (TIM2_ETR)
VCC _____________________ + 5V
GND_____________________GND
USB-UART ________________ STM32F103C8T6
RX ______________________ PA9 (USART1_TX)
TX ______________________ PA10 (USART1_RX)
+ 5V _____________________ + 5V
GND_____________________GND
PENTING! Sakelar antarmuka PN532 harus disetel ke mode SPI! Anda dapat mem-flash STM32 menggunakan utilitas FlashLoaderDemonstrator melalui adaptor USB-UART yang ada.
Berikut ini adalah demo menangkap kunci kripto dari simulator pembaca telepon (Arduino + PN532):
Karena pembaca IronLogic (IL), untuk bekerja dengan siapa perangkat ini dikembangkan, mencoba membaca tag dengan kunci kripto yang dihitung berdasarkan UID dari tag ini, UID ini harus terlebih dahulu disetel. Anda dapat melakukan ini dengan dua cara - secara manual atau membaca dari tag. Setelah itu, kami melakukan penangkapan dan menunggu perhitungan kunci kripto.
Tab selanjutnya dari program "Record on Classic" menggunakan kemampuan versi pembaca IL sebelumnya untuk menulis salinan ke blanko Mifare Classic yang murah. Metode ini didasarkan pada kenyataan bahwa pembaca IL setelah otorisasi mengirim ke interkom bukan UID asli dari tag, tetapi informasi yang direkam di blok pertama (dalam kasus umum, sama dengan UID dari aslinya). Untuk melakukan ini, kita perlu menangkap dan menghitung kunci kripto label, yang akan berfungsi sebagai kosong, tutup sektor nol dengan itu, dan menulis empat byte UID label, yang berfungsi sebagai prototipe, ke dalam blok pertama label ini. Untuk melakukan ini, kita bahkan tidak perlu mengambil kunci cryptocurrency asli dan menghapus dumpnya, itu cukup untuk mengetahui UID-nya, tetapi ini hanya berlaku jika aslinya adalah "asli" dan bukan salinan, maka Anda masih harus membaca blok pertama dan sudah menulis ke salinan. Untuk membuatnya lebih jelas, perhatikan contoh ini - misalkan kita ingin membuat salinan kunci asli dengan UID 0xEBD52AC5, yang juga ditulis di blok pertama dari aslinya, pada label Mifare Classic reguler dengan UID, katakan 0x12345678. Untuk melakukan ini, dengan bantuan perangkat yang disajikan, tepat dipanggil oleh satu kawan Shaitan-Mashina, kami menemukan cryptocurrency untuk UID ini dan untuk objek tertentu (pintu masuk, rumah ...) yang kami butuhkan. Biarkan kunci crypto menjadi 0xABCDEF098765, lalu edit sektor nol dari tempat pembuangan salinan sebagai berikut:

Di blok pertama, kami menulis UID dari 0xEBD52AC5 asli, dan di blok ketiga enam byte kunci kripto yang ditemukan untuk benda kerja ini adalah 0xABCDEF098765. Kami menulis dump ke tempat kosong, dan mendapatkan salinan kunci interkom. Sesuatu seperti SMKey ini membuat salinan IronLogic ke Mifare Classic reguler, dan inilah yang dilakukan oleh program rekaman ini. Di bidang "Kode", kami secara manual memasukkan atau membaca 4 byte UID dari kunci asli, yang akan direkam dalam blok pertama salinan. Kami memulai dan kemudian mengikuti petunjuk program. Pertama kita membaca UID benda kerja, kemudian kita membawa perangkat ke interkom dan menangkap data otentikasi. Setelah perhitungan selesai, program akan menawarkan untuk membawa blanko untuk perekaman data. Jika lebih dari satu kunci kriptografi ditemukan, maka setelah merekam opsi pertama, itu akan diberikan kesempatan untuk memverifikasi salinan yang diterima. Jika salinannya tidak pas, maka Anda harus mencoba kunci terhitung berikutnya, atau menghapus (mengembalikan) blank untuk penggunaan di masa mendatang. Salinan mungkin juga tidak berfungsi karena kode yang ditulis di blok ke-1 dari salinan tidak didefinisikan dengan benar - misalnya, jika Anda mencoba untuk menulis UID asli bukan fob kunci asli, tetapi salinan dibuat menggunakan metode di atas. Dalam hal ini, Anda tidak boleh menggunakan UID label, dan data dari blok 1, yang dapat diperoleh di bagian "Menyalin sektor".
Metode ini juga tidak akan berfungsi untuk versi terbaru dari perangkat lunak pembaca IL. Dalam hal ini, salinan dapat dibuat dengan menyalin seluruh sektor ke-0 (4 blok) ke benda kerja yang memungkinkan Anda untuk merekam sektor ke-0 menggunakan bagian aplikasi "Salin Sektor". Di sini, kita juga pertama-tama menemukan kunci cryptocurrency asli, membaca sektor nol dan kemudian menulis ke kosong. Karena kurangnya OTP dan OTP-2.0 kosong di tangan, fitur ini sejauh ini telah diuji hanya pada NOL kosong, meskipun versi pembaca yang lebih baru membutuhkan penggunaan OTP-2.0.
Nah, untuk permulaan - bagian aplikasi "UID Record" memungkinkan Anda untuk mengubah UID, mengembalikan blok ke-0 yang rusak dan mengatur ulang kunci benda kerja NOL crypto ke default.
Jadi - untuk meringkas secara singkat. Untuk membuat perangkat seperti itu, kami membeli atau mencari modul PN532, USB-UART adapter FTDI, PL2303, CH340 atau CP2102, papan debug STM32F103C8T6, satu setengah lusin jumper, adaptor USB-OTG dan smartphone (tablet) di Android dengan OTG. Kami merakit perangkat itu sendiri sesuai dengan diagram di atas, flash * .bin dengan file STM32 dan menginstal aplikasi * .apk dari
arsippada smartphone. Untuk operasi yang benar, aplikasi pada smartphone harus diluncurkan ketika adaptor USB-UART terhubung, baik secara default, atau dengan pemilihan manual, jika tidak aplikasi tidak akan mendapatkan akses ke adaptor.
Saya ingin mengatakan beberapa kata tentang modul PN532 - tidak semua modul ini “sama-sama bermanfaat”! Dari tiga modul (seperti pada foto di atas) yang saya beli, satu tidak membaca dan menulis tag, terutama ZERO dan OTP-2.0, tetapi bekerja normal dalam mode pasif dengan pembaca interkom, yang lain berperilaku sebaliknya, dan hanya yang ketiga lagi- kurang mengatasi tag dan interkom (meskipun lebih buruk dari dua yang pertama). Mungkin saya kurang beruntung dan kumpulan modul ini ternyata bukan kualitas terbaik, tetapi orang lain mengeluhkannya. Namun - bagi seseorang yang beruntung. Apa yang saya katakan Modul PN532 muncul untuk dijual dengan tata letak yang sedikit berbeda, yang lebih mahal, tetapi, menurut ulasan, mereka tidak memiliki masalah seperti itu:

Jika seseorang menemukan PN532, yang tidak menulis dan membaca label dengan baik, saya dapat menyarankan menambahkan modul RC522 ke perangkat, yang bernilai satu sen, tetapi menjalankan fungsinya dengan sempurna, sesuai dengan skema berikut:
RC522____________________STM32F103C8T6
RST ______________________ PB12 (GPIO_OUTPUT)
SCK ______________________ PB13 (SPI2_SCK)
MISO _____________________ PB14 (SPI2_MISO)
MOSI _____________________ PB15 (SPI2_MOSI)
SDA ______________________ PA8 (GPIO_OUTPUT)
VCC ______________________ + 5V
GND______________________GND
Dalam hal ini, PN532 hanya akan berfungsi saat mengambil data dari pembaca, dan seluruh beban bekerja dengan tag akan jatuh di pundak RC522.
Sebagai kesimpulan, saya ingin mengatakan bahwa kinerja perangkat dalam kondisi nyata diuji hanya pada pembaca IronLogic generasi pertama, tanpa filter NOL, OTP, OTP-2.0. Versi lain sama sekali tidak memiliki akses, jadi untuk pembaca IL yang lebih modern, pengembangan perangkat lunak akan diperlukan, dan, tentu saja, kehadiran pembaca ini.
Arsipkan