Я недавно перешел на программирование смарт-карт.Как получить доступ к блокам памяти MIFARE 1k с помощью считывателя Gemalto Prox-SU?
Я использую считыватель Gemalto Prox-SU и имею несколько доступных карт MIFARE Classic 1k на машине Ubuntu 16.04. Я установил считыватель Gemalto Prox-SU и заставил читателя обнаружить карту через скрипт на python, используя Ludovic Russeau's pyscard.
Мне удалось написать сценарий, который отправляет APDU на подключение считывателя/карты. Я могу прочитать ATR, отправить команду GetData, чтобы прочитать серийный номер карты и пытались отправить несколько APDU на карту, чтобы попытаться прочитать блоки памяти карты. Однако, помимо команд LoadKey, все остальное возвращается «0x6982: состояние безопасности не удовлетворено»
Я знаю, что я должен отправить команду общей аутентификации перед каждым чтением и записью, как указано в руководстве, но даже с общей аутентификацией команда возвращает «статус безопасности не удовлетворен». Из того, что я читал, это должно быть очень просто. Что мне не хватает? Как настроить мой сценарий, чтобы проверка подлинности прошла успешно, и я могу читать данные из блоков памяти?
Вы сказали: «Если ваша карта читается с помощью клавиши A со значением по умолчанию (« транспортный ключ ») FF FF FF FF FF FF, вы должны использовать следующую команду LOAD KEY». Это сработало, и, насколько мой первоначальный вопрос был задуман, это решило проблемы. Однако, если возникла новая проблема. Как узнать, читается ли карта только с помощью ключа А? Возможно ли это позже? –
@GugaFigueiredo В каждом секторе есть две клавиши (клавиша A и клавиша B). Блоки в каждом секторе могут быть сконфигурированы так, чтобы быть читаемыми и/или записываться с помощью любой клавиши A или клавиши B. Клавиши и биты, которые конфигурируют условия доступа, сохраняются в последнем блоке каждого сектора («трейлер сектора»). Трейлер сектора доступен так же, как и любой другой блок (за исключением того, что значение ключей замаскировано из данных, возвращаемых во время команды чтения). –