Чтение карты Mifare 1k с ключом A и B

Я новичок в чтении карт MIFARE Classic и задаюсь вопросом, как получить доступ к каждому сектору с помощью ключа A (A0A1A2A3A4A5) и заданного ключа B (который остается секретным).

У меня есть настройка метода, которая загружает каждый ключ в считыватель (OMNIKEY 5421):

  • для ключа A: keyNo = 20 (0x14)
  • для ключа B: № ключа = 27 (0x1B)

Затем ключи авторизуются в цикле:

while (loops > 0)
{
    if (mifareCard.Authenticate(blockAddress, keyTypeA, keyNumberA) == false)
    {
        //throw new Exception("Can't authenticate under key 0 (key type A)");
        //DisplayText("WARNING: authentication under transport key failed. Ending test sequence.");
        Debug.WriteLine("WARNING: authentication under transport key A failed. Ending test sequence.");

        return;
    }

    if (mifareCard.Authenticate(blockAddress, keyTypeB, keyNumberB) == false)
    {
        //throw new Exception("Can't authenticate under key 0 (key type A)");
        //DisplayText("WARNING: authentication under transport key failed. Ending test sequence.");
        Debug.WriteLine("WARNING: authentication under transport key B failed. Ending test sequence.");

        return;
    }

    loops--;
    loopsDone++;
    DisplayText("OK-authenticate(loop #" + loopsDone + ") for access to sector " + sector + ", block " + blockWithinSector);
}
  • blockAddress — номер блока
  • keyTypeA является типом ключа. Например. 96 (0x60) для А и 97 (0x61) для В
  • keyNumberA это слот от ридера

Однако, когда ключ B авторизуется, он возвращает SW 69 82, что означает «Условия доступа не выполнены».

Есть ли способ аутентифицировать оба ключа?


person This Name    schedule 06.08.2015    source источник


Ответы (2)


Совершенно нормально пытаться аутентифицироваться обоими ключами друг за другом. Обе попытки аутентификации будут успешными, если ключи верны.

С практической точки зрения мне непонятно, почему вы хотите аутентифицироваться с обоими ключами. В типичном сценарии приложения MIFARE Classic вы будете использовать только один ключ на каждом конце, например.

  • Клавиша A для чтения секторов на менее доверенных машинах в поле ‹=> Клавиша B для записи секторов на доверенных машинах, используемых для персонализации
  • Клавиша A для уменьшения баланса карты в POS/вендинговых автоматах в поле ‹=> Клавиша B для увеличения баланса карты в надежных/более безопасных точках пополнения

Что касается того, почему аутентификация не удалась в вашем случае, трудно/невозможно сказать, поскольку мы не знаем

  • как вы реализовали mifareCard.Authenticate и какие значения вы на самом деле предоставляете в качестве параметров (хотя, поскольку вы преуспели с ключом A, они, вероятно, верны)
  • как вы настроили свою карту (правильно ли настроены биты доступа, чтобы разрешить аутентификацию с помощью ключа B? Вы используете правильное значение для ключа B?)
person Michael Roland    schedule 07.08.2015

http://cache.nxp.com/documents/data_sheet/MF1S50YYX_V1.pdf проверьте условия доступа. по умолчанию любая новая метка RFID mifare classic 1k находится в транспортной конфигурации. обратитесь к поставщику API. они отправят вам обновленную DLL, включая метод для изменения условий доступа и аутентификации/изменения обоих ключей. по умолчанию значения ключа для обоих ключей A|B равны «FFFFFFFFFFFF» (12 байт)

person Shubham Jha    schedule 22.07.2016