Обсуждаем цифровые устройства...
Ответить

Re: Ковыряем RFID Mifare и MFRC522

Вс окт 08, 2017 20:11:07

Так, в общем требуется собрать много информации прежде чем я опубликую работу с авторизацией.
Механизм не очень простой. Если у кого что есть ценное по этой теме сказать - пишите.

Так, начнем с теории и ссылок которые будут помогать в работе.
http://docs.cntd.ru/document/1200108880 читаем:
ИСО/МЭК 7816-4 - определяет организацию, защиту и команды для обмена информацией;
http://docs.cntd.ru/document/1200110393

-> 090A090001030100 [Calculate CRC]
-> A2A1 [GET CRC]
<- D0E3
-> 09 0A 090009D009E3010C0D80 [Send] - Команда авторизации 2kDES (улюч по умолчанию 8x00 вроде как)
-> 898989898989898989898989898989 [Read]
<- 0A 00 67 00 F3 A2

0A 00 - Команда верна. Код 00.
67 00 - Открываем вышеприведенный ГОСТ и смотрим что означает ответ.
Рисунок 1 - Структурная схема значений SW1-SW2
Ошибка контроля: 6700 = Неверно указанная длина (нет дальнейшего уточнения).
F3 A2 - CRC.

Что происходит.
Команда 0A = Авторизоваться через ключ 2kDES (он по умолчанию)
Ответ - неверно указанна длина. Вероятно длина ключа.

Пока еще не вьехал.
Есть example
--> 60
<-- af 04 01 01 00 02 18 05
--> af
<-- af 04 01 01 00 06 18 05
--> af
<-- 00 XX XX XX XX XX XX XX ZZ ZZ ZZ ZZ ZZ 05 06

60 - GetVersion.
AF - Листаем.
Так вот, у меня на данную команду карта не реагирует.

Конечно же ошибка с моей стороны, так как стандарт явно описывает формирование заголовка и тела команды. Есть строгие правила, но я пока не в теме как их выполнять.

Re: Ковыряем RFID Mifare и MFRC522

Пн окт 09, 2017 20:26:15

Так, ну что, начнем выяснять что делаю не так.
С простой командый - 60h - версия карты.
Пока что ничего не выходит. Команда ничего не отдает.
Знаю, что есть обертка по ISO 7816, но и в этой обертке я ничего от карты получить не могу.
Единственная команда на которую карта хоть что то отвечает - 0a - авторизация.
Но прежде чем делается авторизация вообще то должен быть выполнен селект.

Re: Ковыряем RFID Mifare и MFRC522

Вт окт 10, 2017 06:30:10

Так, ну что, начнем выяснять что делаю не так.

Конечно! Копирую все, что Вы накопали... :beer:

Re: Ковыряем RFID Mifare и MFRC522

Вт окт 10, 2017 19:45:27

Так, ну что, начнем выяснять что делаю не так.

Конечно! Копирую все, что Вы накопали... :beer:

:beer:

Добавлено after 9 minutes 19 seconds:
****************************************************
Приветствую.

Чисто случайно нашел кусок лога, где описывается получение версии. По идее нативный набор команд должен работать через обертку ISO 14443, но у меня не было времени снова открыть этот документ. Сегодня чуть позже покопаю еще.
Пока нет ясного представления как работать с картой (сказывается отсутствие закрытой документации). Но я держусь :)
В общем суть такая.
Отправляем карте 02 60
В ответ карта присылает первый блок данных:
-> B7 [Version]
<- 92
-> 01 0F 11 3D 2D 30 2C 00 2A 8D 2B 3E 14 83 26 70 15 40 [Init]
-> 09 52 01 0C 0D 87 [Send REQA]
-> 89 89 [Read]
<- 44 03
-> 09 93 09 20 01 0C 0D 80 [Anticol]
-> 89 89 89 89 89 [Read]
<- 88 04 5E 6F BD
-> 09 93 09 70 09 88 09 04 09 5E 09 6F 09 BD 01 03 01 00 [Calculate CRC]
-> A2 A1 [GET CRC]
<- 0E 60
-> 09 93 09 70 09 88 09 04 09 5E 09 6F 09 BD 09 0E 09 60 01 0C 0D 80 [Select]
-> 89 89 89 [Read]
<- 24 D8 36
-> 09 95 09 20 01 0C 0D 80 [Anticol]
-> 89 89 89 89 89 [Read]
<- DA 49 34 80 27
-> 09 95 09 70 09 DA 09 49 09 34 09 80 09 27 01 03 01 00 [Calculate CRC]
-> A2 A1 [GET CRC]
<- A4 E1
-> 09 95 09 70 09 DA 09 49 09 34 09 80 09 27 09 A4 09 E1 01 0C 0D 80 [Select]
-> 89 89 89 [Read]
<- 20 FC 70
-> 0A 80 [Clear FIFO]
-> 09 E0 09 20 01 03 01 00 [Calculate CRC]
-> A2 A1 [GET CRC]
<- 3B D6
-> 09 E0 09 20 09 3B 09 D6 01 0C 0D 80 [Send RATS]
-> 89 89 89 89 89 89 89 89 [Read]
<- 06 75 77 81 02 80 02 F0
-> 09 02 09 60 01 03 01 00 [Calculate CRC]
-> A2 A1 [GET CRC]
<- 16 4E
-> 09 02 09 60 09 16 09 4E 01 0C 0D 80 [Send]
-> 89 89 89 89 89 89 89 89 89 89 89 89 89 89 [Read]
<- 02 AF 04 01 01 01 00 18 05 88 B9 DA DA DA

02 AF 04 - сообщает что это одна часть из 4 (ИМХО!)
Вообще давайте сразу определимся - я не учу работать с картами, я журналирую свои действия, не более того!
Продолжение следует.

Добавил в программу лог левел. Два. 1 - с оберткой над mfrc522, и 0 - без нее.
Смысл простой.
Вот лог без обертки.
-> B7 [Version]
<- 92
-> 01 0F 11 3D 2D 30 2C 00 2A 8D 2B 3E 14 83 26 70 15 40 [Init]
-> 52 01 0C 0D 87 [Send REQA]
<- 44 03
-> 93 20 01 0C 0D 80 [Anticol]
<- 88 04 5E 6F BD
-> 93 70 88 04 5E 6F BD 01 03 01 00 [Calculate CRC]
-> A2 A1 [GET CRC]
<- 0E 60
-> 93 70 88 04 5E 6F BD 0E 60 01 0C 0D 80 [Select]
<- 24 D8 36
-> 95 20 01 0C 0D 80 [Anticol]
<- DA 49 34 80 27
-> 95 70 DA 49 34 80 27 01 03 01 00 [Calculate CRC]
-> A2 A1 [GET CRC]
<- A4 E1
-> 95 70 DA 49 34 80 27 A4 E1 01 0C 0D 80 [Select]
<- 20 FC 70
-> 0A 80 [Clear FIFO]
-> E0 20 01 03 01 00 [Calculate CRC]
-> A2 A1 [GET CRC]
<- 3B D6
-> E0 20 3B D6 01 0C 0D 80 [Send RATS]
<- 06 75 77 81 02 80 02 F0
-> 02 60 01 03 01 00 [Calculate CRC]
-> A2 A1 [GET CRC]
<- 16 4E
-> 02 60 16 4E 01 0C 0D 80 [Send]
<- 02 AF 04 01 01 01 00 18 05 88 B9

Сравните с логом сверху.
Разница проста:
Без обертки не фигурируют операции чтения 89 и записи байта данных 09.
Чистые куски лога требуются для общения в комьюнити MIFARE. Во всяком случае предполагается.

Если кто будет писать свой софт - сообщите. Хорошо бы на СИ все это дело завернуть.
Особенно, когда потребуются функции для побитовых операций XOR, калькуляции и работы с шифрованием.

Добавлено after 3 hours 36 minutes 25 seconds:
Эх, теперь все клеится к одному посту. Интересно, как долго движок форума будет клеить мессаги?
Ну, не суть. Продолжаем.
Сейчас будем пробовать листать ответ и поймем что он значит.
<- 02 AF 04 01 01 01 00 18 05 88 B9 crc
02 AF - AF означает что данные не переданы полностью и требуется листинг.
01 00 - тут должна быть версия (но не факт), вышло что версия карты 00 (такого не может быть).
18 - storage size is 18 (4096 bytes) - 4k - это факт, карта действительно 4k.
04 - я так понимаю что это количество байт в поле body ответа.
Поле body - 01 00 18 05
В общем без доки понятно что ничего не понятно, ничто не понято и интерпретировано из рук вон плохо!

Ковыряем тут. Много воды, но есть и много полезного - https://ridrix.wordpress.com/2009/09/19 ... n-example/

По поводу PPS Protocol Parameter Selection. Пока что есть надежда что все таки можно при помощи данной штуки переключить в ISO 7816
вряд-ли конечно.

Так, вот как листать многостраничные ответы.
Добавлено after 2 hours 52 minutes 22 seconds:
-> 02 60 01 03 01 00 [Calculate CRC]
-> A2 A1 [GET CRC]
<- 16 4E
-> 02 60 16 4E 01 0C 0D 80 [Send]
<- 02 AF 04 01 01 01 00 18 05 88 B9 DA DA DA
-> 03 AF 01 03 01 00 [Calculate CRC]
-> A2 A1 [GET CRC]
<- 35 69
-> 03 AF 35 69 01 0C 0D 80 [Send]
<- 03 AF 04 01 01 01 04 18 05 14 97 80 80 80
-> 02 AF 01 03 01 00 [Calculate CRC]
-> A2 A1 [GET CRC]
<- ED 70
-> 02 AF ED 70 01 0C 0D 80 [Send]
<- 02 00 04 5E 6F DA 49 34 80 BA 44 93 99 40 24 13 27 7D

Поясню
02 60 - запрос версии
02 AF - можно листать
03 AF - листаем далее
03 AF - есть еще страничка
02 AF - запрашивам еще одну страничку
02 00 - готово

Так, сейчас попробуем разобрать что это значит. Разбираем без нативной документации - не обессудьте.

02 AF 04 01 01 01 00 18 05 88 B9
01 00 - версия hardware 1.00
03 AF 04 01 01 01 04 18 05 14 97
01 04 - версия software - 1.04
02 00 04 5E 6F DA 49 34 80 BA 44 93 99 40 24 13 27
44 93 99 40 - серийный номер. Вообще он должен иметь пять байт, но не факт.
Если серийный номер пятизначный то тогда поменяли год и неделю местами в новых картах.
44 93 99 40 24 13 27 - 13 год 27 неделя.
Если не меняли ничего, то 24 13 - Карта произведена на 24-ю неделю 13 года. Но куда прилепить 27 ))
5E 6F DA 49 34 80 BA - UID


Так, еще кое что нашел на обертку:
https://www.nxp.com/docs/en/application ... pdf#page=9

Re: Ковыряем RFID Mifare и MFRC522

Чт окт 12, 2017 12:32:33

Авторизация.
Процедура:
1 - Выборали приложение.
Приложение на пустой карте только одно - 00 00 00
2 - Авторизовались.
Ключ 16 или 8 нулей, а то и 15. Будем посмотреть. Метод шифрования по умолчанию 3des

-> 02 5A 00 00 00 01 03 01 00 [Calculate CRC]
-> A2 A1 [GET CRC]
<- 66 1F
-> 02 5A 00 00 00 66 1F 01 0C 0D 80 [Send]
<- 02 00 10 2D
-> 03 64 00 01 03 01 00 [Calculate CRC]
-> A2 A1 [GET CRC]
<- 45 48
-> 03 64 00 45 48 01 0C 0D 80 [Send]
<- 03 00 00 70 4A

5A 00 00 00 - выбираем ApplicaionRoot (там хранится MasterKey)
64 00 - проверяем версию ключа
00 - 3DES или DES (пока не знаю).

Идем дальше.
-> 02 5A 00 00 00 01 03 01 00 [Calculate CRC]
-> A2 A1 [GET CRC]
<- 66 1F
-> 02 5A 00 00 00 66 1F 01 0C 0D 80 [Select App]
<- 02 00 10 2D
-> 03 64 00 01 03 01 00 [Calculate CRC]
-> A2 A1 [GET CRC]
<- 45 48
-> 03 64 00 45 48 01 0C 0D 80 [Key Version]
<- 03 00 00 70 4A
-> 02 45 01 03 01 00 [Calculate CRC]
-> A2 A1 [GET CRC]
<- B9 38
-> 02 45 B9 38 01 0C 0D 80 [Key Settings]
<- 02 00 0F 01 37 FD

Команда 45 показывает конфигурацию ключа (права доступа).
0F 01
01 - количество ключей доступное для данного приложения. Мастер ключ - только один.
- [00001111] - права.

Изображение
Как всегда биты читаются справа налево! Прям классик какой то :)
http://img.radiokot.ru/files/125705/1egyk5hdvl.png

Re: Ковыряем RFID Mifare и MFRC522

Чт окт 19, 2017 12:42:40

Так, продолжаем. Сегодня о принципах авторизации.
Вспомним для начала что там у нас на данный момент получилось.
-> B7 [Version]
<- 92
-> 01 0F 11 3D 2D 30 2C 00 2A 8D 2B 3E 14 83 26 70 15 40 [Init]
-> 52 01 0C 0D 87 [Send REQA]
<- 44 03
-> 93 20 01 0C 0D 80 [Anticol]
<- 88 04 5E 6F BD
-> 93 70 88 04 5E 6F BD 0E 60 01 0C 0D 80 [Select]
<- 24 D8 36
-> 95 20 01 0C 0D 80 [Anticol]
<- DA 49 34 80 27
-> 95 70 DA 49 34 80 27 A4 E1 01 0C 0D 80 [Select]
<- 20 FC 70
-> 0A 80 [Clear FIFO]
-> E0 20 3B D6 01 0C 0D 80 [Send RATS]
<- 06 75 77 81 02 80 02 F0
-> 02 5A 00 00 00 66 1F 01 0C 0D 80 [Select App]
<- 02 00 10 2D
-> 03 64 00 45 48 01 0C 0D 80 [Key Version]
<- 03 00 00 70 4A
-> 02 45 B9 38 01 0C 0D 80 [Key Settings]
<- 02 00 0F 01 37 FD

Re: Ковыряем RFID Mifare и MFRC522

Вс окт 22, 2017 20:05:01

Короч, че то у меня странно MFRC522 работает с i2c шиной. Не хочет антенна заводиться на 3 вольта. От слова вообще. Еле еле карта работает. Сегодня буду разбираться в чем может быть проблема.
Я подозреваю отсутствие подтяжки SDA и SCL линии.
Еще как вариант - проблема с Atmega2560.
В общем попробую сдуть чип с референса и настроить его. Если и там подобные проблемы будут, то буду пробовать другого зверька, затем подтягивать SDA.

Подал питание с другого источника, 3 вольта, все отлично. Короч плохое питание. Идем дальше.
Так же что странно, не хочет нормально HEX принимать зверек. Вроде как принимает полнотелый HEX, а вот если 0x00 отправить, то уходят 4 бита скорее всего только начальные. Не факт, но похоже на то.

Так, выяснился еще какая то хрень с i2c. Адрес скачет не смотря на то, что я его задаю уровнями. Все ADDR ноги выставляем в 0 допустим. Включаем один раз - адрес 0x1c. Опять вырубаем врубаем - уже 0x28. И так далее. Берем другой источник питания - адрес вообще получаем другой 0x7f допустим. И он уже не меняется. То-есть от источника питания зависит адрес шины.

Я ее уже и подтягивал, и что я только с ней не делал. Результат один.

В общем плохо все с i2c. Как то не стабильно работает. Если адресация и дальше будет прыгать, то работать со зверьком не получится в нормальном режиме. UART, SPI - все работает идеально, проблемы только с I2C.

Еще покручу, и если надоест то буду использовать SPI. Обидно конечно, так как i2c позволяет работать с несколькими устройствам более гибко, и при этом используется на две жили меньше для подключения. 7 жил на SPI, и 5 - I2C.
Вообще можно было бы использовать UART, с ним вообще все идеально, и жил только 5, и антенна пашет отлично, но 115200 все же недостаточно. Между антенной и картой 418 кбит, 115 будет сводить эту полосу в четыре раза. ИМХО.

Re: Ковыряем RFID Mifare и MFRC522

Пн окт 23, 2017 22:07:53

Проблему решил проверкой ComIrqReg.
Еще оч важную штукуковину откопал.

Антенна GAIN - всегда после инита. В самом самом конце после прочих параметров.
Write(0X26,0X50);

У меня предпоследний параметр
Write(0X15,0X40);
затем настраиваю антенну.
Write(0X26,0X50);

Поставьте вот так
Write(0X26,0X50);
Write(0X15,0X40);

И получите нестабильную работу антенны на Desfire. ИМХО. Не изучено!

Произвел замер по току.
18 ма - ожидание.
32 ма - чтение: 0.5см.
22 ма - чтение: 5 см.

Напомню, что стандартные индукторы всего 7мА, нужна замена.

Re: Ковыряем RFID Mifare и MFRC522

Чт окт 26, 2017 22:03:33

Код для arduino,- авторизация пока не работает, к ней я в настоящий момент подхожу.
Работает поверх i2c.

Потребуется ардуинка с хорошим регулятором питания на 3.3в. У меня AMS1117-3.3.
На моей atmega2560 плата с плохим стабилизатором и в i2c ведет себя крайне нестабильно. Адрес пляшет, антенна работает плохо.
Однако SPI режим на той же плате уже работает хорошо.

rc522 переведенный в режим I2C. Или вот такая штука - https://ru.aliexpress.com/item/Compact- ... 8.3.07CeYf
Как перевести rc522 в i2c описано тут - https://www.google.de/url?sa=i&rct=j&q= ... 9546652098
У меня данная методика сработала только для UART. А вот i2c вроде как не завелся. Хотя могу сказать что метод там верный, и моя отладочная плата переключает режимы по тому же принципу.

Код:
/*
 * MadDogMayCry aka ~O8o
 * General Public Licence (GNU)
 * Education Desfire EV1 lib for MFRC522 over i2c
 * http://radiokot.ru/forum/viewtopic.php?p=3216806#p3216806
 */

#include <Wire.h>
#define address 0x28
byte crc[2];

void