Как проверить карту Smart/CAC, используя данные Precise Biometrics Tactivo

Я могу прочитать смарт-карту с помощью устройства чтения смарт-карт PB Tactivo на Android, однако я не знаком с процессом проверки. Вот пример того, что я должен прочитать ввод:

...
channel = card.getBasicChannel();

        // See www.globalplatform.org for more information about this command.
        // CLA = 0x80
        // INS = 0xCa
        // P1 = 0x9F
        // P2 = 0x7F
        // Le = 0x00
        CommandAPDU GET_DATA_CardProductionLifeCycle = new CommandAPDU(0x80, 0xCA, 0x9F, 0x7F, 0x00);

        ResponseAPDU cardResponse;

        // Send the command to the card
        cardResponse = channel.transmit(GET_DATA_CardProductionLifeCycle);

        // Check SW1 if we provided wrong Le
        if (cardResponse.getSW1() == 0x6C) {
            // Modify the command with correct Le reported by the card in SW2.
            GET_DATA_CardProductionLifeCycle = new CommandAPDU(0x80, 0xCA, 0x9F, 0x7F, cardResponse.getSW2());
            // Re-send the command but now with correct Le
            cardResponse = channel.transmit(GET_DATA_CardProductionLifeCycle);
        }

        // Check if the card has data for us to collect
        if (cardResponse.getSW1() == 0x61) {
            // Issue a GET RESPONSE command using SW2 as Le
            CommandAPDU GET_RESPONSE =  new CommandAPDU(0x00, 0xC0, 0x00, 0x00, cardResponse.getSW2());
            cardResponse = channel.transmit(GET_RESPONSE);
        }

        // Check the final result of the GET DATA CPLC command
        if (cardResponse.getSW() != 0x9000) {
            // The card does not support Global Platform
            System.out.println(String.format("8Card responded with SW:%04x", cardResponse.getSW()));// some sort of SW from the card here... Read as "SW: 6a82
            System.out.println("9This card does not support the Global Platform " + "GET CPLC command");

            return;
        }

        // we do not validate the data in this example - we assume that it is
        // correct...
...

Если у кого-то есть опыт работы с проверкой/аутентификацией смарт-карт/карт CAC, пожалуйста, дайте мне несколько рекомендаций, пример или что-то, с чем можно работать. Потому что очень мало документации по этому поводу.

ОБНОВЛЕНИЕ: у меня есть приложение для Android, которое я хочу защитить с помощью смарт-карты. Я могу прочитать ввод любой смарт-карты с помощью устройства чтения смарт-карт Precise Biometrics Tactivo. Как я могу проверить/аутентифицировать этот ввод, чтобы разрешить доступ к приложению только определенным пользователям?


person now_world    schedule 11.06.2015    source источник
comment
Я не понимаю тег android. Пожалуйста, также постарайтесь конкретизировать свой вопрос, чтобы избежать отрицательных голосов или закрытых запросов: это считыватель, приложение CAC, смарт-карты в целом? Какой ввод вы имеете в виду (PIN, отпечаток пальца)? И что вы подразумеваете под валидацией?   -  person guidot    schedule 12.06.2015
comment
Смотрите обновление. Ввод, о котором я говорю, — это ввод, который я получаю, когда подключаю смарт-карту к устройству чтения карт. Я могу получить ввод с помощью: String UID = card.getATR().toString(); Как я могу проверить это? Или это неправильная переменная для проверки в первую очередь?   -  person now_world    schedule 15.06.2015


Ответы (1)


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

Хотя карты имеют уникальный идентификатор (зависит от производителя), его можно легко подделать после того, как будет обнаружен действительный идентификатор.

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

person guidot    schedule 15.06.2015
comment
дорогой гвидо, ради бога, пожалуйста, смени аватарку на более дружелюбную картинку :( Скалистый человек, лицо которого испортил кислотный дождь? :( почему? (Временный комментарий) - person Ebrahim Ghasemi; 17.06.2015