如何使用 Precise Biometrics Tactivo 的输入验证 Smart/CAC 卡

How to validate a Smart/CAC card using input from Precise Biometrics Tactivo

我能够在 Android 上从 PB 的 Tactivo 智能卡 reader 读取智能卡,但是我不熟悉验证过程。这是我必须读取输入的示例:

...
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...
...

如果有人有使用智能 card/CAC 卡的经验 valitaion/authentication 请给我一些指导、示例或其他可以解决的问题。因为那里的文档很少。

更新: 我有一个 Android 应用程序,我想用智能卡保护它。我可以使用 Precise Biometrics Tactivo 智能卡 reader 读取任何智能卡的输入。我怎样才能 validate/authenticate 这个输入只允许某些用户访问应用程序?

ATR 不适用于任何类型的验证,因为它通常由数千张卡片共享。

虽然卡片有一个唯一的标识符(特定于制造商),但在找到有效的卡片后很容易伪造。

要求特定卡的典型方法(作为双因素授权的一个组成部分,将你拥有的东西添加到你知道的东西 例如 PIN、密码)是执行 外部身份验证 。因为为此你需要在卡上存储你自己的密钥,所以它不是你恰好拥有的卡的选项。