Я пробовал больше недели, чтобы сделать Android-телефон аутентифицированным с Mifare Ultralight C. Я подтвердил, что могу писать в тег (путем записи на незащищенную страницу памяти, а затем чтения того, что я написал). Я также могу написать на ключевые страницы (44-47) и написать 0x00 для всех 16 ключевых байтов.
Когда я пытаюсь выполнить аутентификацию, ниже приведен пример данных, используемых во время одного обмена - это из журнала, написанного моим приложением. Может ли кто-нибудь сказать мне, что я делаю что-то неправильное? я AM при неразглашении и иметь доступ к полным данным. Обратите внимание, что шестнадцатеричные строки ниже являются, очевидно, читаемыми человеком версиями отправляемых и полученных данных, которые в коде состоят из массивов байтов.
Отправить команду аутентификации
Received rndB: 8A5735694D9D7542
Key: 00000000000000000000000000000000
IV: 0000000000000000
Decrypted rndB: EF340C62E1B866D4
rndB': 340C62E1B866D4EF
rndA: 6E262630E299F94F
rndA+rndB': 6E262630E299F94F340C62E1B866D4EF
Key: 00000000000000000000000000000000
IV: 8A5735694D9D7542
ek(RndA+rndB'): E36C6C46FAAC60BA45DDF5F5A0802C79
После отправки 0xAF + E36C6C46FAAC60BA45DDF5F5A0802C79
я сразу же потеряю соединение с тегом. Я просмотрел лист данных и прочитал каждый пост, который я могу найти здесь. Я также посмотрел код libfreefare, и я честно не могу понять, что я делаю неправильно.
Техническая поддержка NXP была полностью невосприимчива.
Любые идеи? Я в недоумении.