Процесс аутентификации Mifare Ultralight C с использованием PN532

Нам известен процесс аутентификации в Mifare Ultralight C, но мы не можем выполнить аутентификацию с помощью чипа PN532. Мы следуем шагам, как показано в наборах команд, но мы не можем получить точный результат. Нам нужна помощь, чтобы выполнить процесс аутентификации для Mifare Ultralight C. Пожалуйста, дайте какое-нибудь предложение или кто-нибудь, кто работал над этой картой, может помочь.

Откройте тег и получите UID

Command:  00 00 FF 05 FB D4 60 01 01 00 CA 00
Response: 00 00 ff 11 ef d5 61 01 10 0c 01 00 44 00 07 04 54 ad f2 ef 45 80 b6 00

Начать аутентификацию (Auth0)

Command:  00 00 FF 04 FC D4 42 1A 00 D0 00
Response: 00 00 ff 0c f4 d5 43 00 af 22 f5 ec 57 19 7f 44 72 91 00

Расшифровать RndB и повернуть на RndB':

Key =                49454D4B41455242214E4143554F5946
enc(RndB) =          22 f5 ec 57 19 7f 44 72
decrypt(enc(RndB)) = d1 f4 00 d1 13 bd ef 04
RndB' =              04 f4 00 d1 13 bd ef d1

Генерация RndA и сборка RndA || RndB':

RndA =          74 bd 85 75 7b d2 8b 77
RndA || RndB' = 74 bd 85 75 7b d2 8b 77   04 f4 00 d1 13 bd ef d1

Зашифровать RndA || RndB':

IV = 22F5EC57197F4472
encrypt(RndA || RndB') = 98 70 67 11 40 8F 73 B1 1C 11 15 6A 30 47 ED 58

Второй этап аутентификации (Auth1)

Теперь мы должны передать это encrypt(RndA || RndB') на карту с помощью команды AFh Mifare Ultralight C следующим образом:

Command:  00 00 FF 13 ED D4 42 AF 98 70 67 11 40 8F 73 B1 1C 11 15 6A 30 47 ED 58 60 00
Response: 00 00 ff 03 fd d5 43 01 e7 00

Это приводит к коду ошибки 01h.


person user3450057    schedule 02.02.2016    source источник
comment
UID 1-го шага: 00 00 FF 05 FB D4 60 01 01 00 Ответ CA 00:   -  person user3450057    schedule 03.02.2016
comment
Привет, Роланд, я отредактировал сам основной вопрос, пожалуйста, проверьте и дайте мне любое предложение.   -  person user3450057    schedule 03.02.2016


Ответы (1)


Проблема в том, что вы вращаете RndB в неправильном направлении. Если у вас есть RndB, как

RndB = decrypt(enc(RndB)) = d1 f4 00 d1 13 bd ef 04

тогда RndB' должен быть

RndB' = rotate_left(RndB) = f4 00 d1 13 bd ef 04 d1
person Michael Roland    schedule 03.02.2016
comment
Я использую следующий APDU для (Auth0): FF00000004D4421A00 Но получаю: D543019000, пока я не попытаюсь 4-5 раз, после чего все получится, не могли бы вы помочь мне с этим? - person FaizanHussainRabbani; 11.04.2016
comment
@FaizanRabbani: третий байт в ответе — это байт «статуса», а 0x01 означает «TimeOut». Подробности в разделе 7 Руководства пользователя PN532 (nxp.com/documents/user_manual/141520.pdf ) - person Yash; 08.09.2016