Foros de consultas y discusión

Validación de huella digital

Diego Giusso, modificado hace 7 años.

Validación de huella digital

Youngling Mensaje: 1 Fecha de incorporación: 28/12/16 Mensajes recientes
Estimados;

Estoy viendo la parte de validar la huella digital primero que nada utilizando minucias ya dadas para luego avanzar y ver un caso real integrándolo con algún lector de huellas. Para realizar las pruebas estoy utilizando como base el proyecto de referencia (https://github.com/eIDuy/apdu-services ).
Mirando la clase SmartcardTest veo que hay una serie de minucias, realizando pruebas con esta clase y con el código tal como está en github me surgen algunas consultas:
  •           esas minucias corresponden a la cedula de prueba (espécimen)?
  •           al ejecutar la opción 2 (Card authentication FP) me da una excepción de outofboundsexception, se debe al formato de la minucia utilizada o simplemente error al parsear? El indice que da el error es el de la línea 112 de Utils.java (command[261] = intToByteArray(le)[0];), probé modificar esa línea para solucionar esa excepción pero me dio otros errores de formato al ejecutar (apdu 6A80 por ej).
 
Por último, algo que me paso entre tantas pruebas fue que en un momento se me bloqueo la validación de FP (agote el contador de intentos), intente resetear el contador siguiendo la documentación (IAS Classic Applet V4.pdf, comando Reset Retry Counter) pero no pude, es posible realizar el desbloqueo en caso de que pase eso o cómo funciona?
 
Gracias y saludos,
Diego
thumbnail
Guillermo Dotta, modificado hace 7 años.

RE: Validación de huella digital

Youngling Mensajes: 12 Fecha de incorporación: 29/09/16 Mensajes recientes
Diego, cómo estás?

Las minucias en el ejemplo publicado corresponden a algunas cédulas de prueba (están identificadas en el nombre de las variables) pero no necesariamente son las mismas ni se corresponden con la cédula de pruebas que tienes tú. No obstante, ahora contamos con un nuevo lote de pruebas en el cual las cédulas tienen identificada cuáles son las minucias correspondientes con que fueron personalizadas, con lo cual se puede probar con seguridad el Match-On-Card.

Contamos con las minucias para probar solamente el acceso a los comandos de la cédula, y contamos con las imágenes de las huellas para probar también la extracción. Están a disposición para pedirlas.

Por otra parte, el error que mencionas es de un buffer de nuestra implementación. Al ser una implementación de ejemplo y no una biblioteca para reutilizar directamente, puede que hayan algunas cosas que no estén del todo prolija. Nuevamente, su objetivo es ser un ejemplo y orientar la implementación, no ser una biblioteca cerrada y testeada. No me detendría mucho en ese error, porque puede ser un problema de que la tarjeta contesta algo que no estaba esperado nada más... Aquí te pongo el código de una implementación derivada del apdu-services que está probado que funciona. No contiene la parte de extracción de la minucia porque eso depende de qué proveedor de biometría estés usando, pero asumiendo que en el parámetro minutiae viene un string hexa con los bytes de la minucia ya extraída (formato ISO CC), funciona.

​​​​​​​private static boolean verifyFP(String minutiae) throws CardException, FileNotFoundException, UnsupportedEncodingException {
        
        //Inicializacion de la tarjeta
        TerminalFactory factory = TerminalFactory.getDefault();
        List<CardTerminal> terminals = factory.terminals().list();
        CardTerminal terminal = terminals.get(3);
        System.out.println(terminal.getName());
        Card card = terminal.connect("T=0");
        CardChannel channel = card.getBasicChannel();
        
        //select IAS
        selectIAS(channel);
        
        String CLASS = "00";
        String INSTRUCTION = "21";
        String PARAM1 = "00";
        String PARAM2 = "21";

        String dataIN = "";
        dataIN += "7F2E"; // TAG del TLV para llevar las minucias
        // Como el TLV hijo es minucias + length + value, entonces el largo de
        // este es largo(minucias) + 2
        int largo_value = 2 + minutiae.length() / 2;
        if (largo_value > 0x7F) {
            dataIN += "81";
            //Esto es porque dice que es una estructura BER-TLV, y se codificaria asi.
            //Cuando el largo pasa 0x7F, se tiene que poner el largo como 0x81XX, siendo XX el largo efectivo del contenido.
        }
        dataIN += Utils.byteArrayToHex(Utils.intToByteArray(largo_value));

        // 81 aca es el tag del proximo TLV, y el length es el largo de las
        // minucias, que es el value
        // Puede que si el largo supera 0x7F también haya que poner el largo como 0x81XX por ser un BER-TLV.
        // Si falla con error 6A80, probar codificar el largo como 0x81XX (y cuidado que hay que ajustar el largo del TLV padre).
        dataIN += "81"
                + Utils.byteArrayToHex(Utils.intToByteArray(minutiae.length() / 2));
        dataIN += minutiae;

        byte CLASSbyte = Utils.hexStringToByteArray(CLASS)[0];
        byte INSbyte = Utils.hexStringToByteArray(INSTRUCTION)[0];
        byte P1byte = Utils.hexStringToByteArray(PARAM1)[0];
        byte P2byte = Utils.hexStringToByteArray(PARAM2)[0];
        ResponseAPDU r = Utils.sendCommand(channel, CLASSbyte, INSbyte, P1byte, P2byte, Utils.hexStringToByteArray(dataIN),0);
        
         // disconnect
        card.disconnect(false);
        
        return (r.getSW1() == (int) 0x90 && r.getSW2() == (int) 0x00);  
    }
​​​​​​​
En caso de bloqueo de la huella dactilar por reintentos, no se puede desbloquear, el perfil de la tarjeta no lo permite por seguridad. Es por eso que hay que tener mucho cuidado en las pruebas de implementación del MOC y se recomienda usar cédulas de prueba.
En caso de bloqueo de PIN numérico para firma digital, se puede desbloquear pero no sin la ayuda de la DNIC, nuevamente por seguridad. Si sucede esto con una cédula propia, se puede ir a cualquier DNIC a pedir un desbloqueo de PIN, es un trámite de 2 minutos. Si sucede con cédulas de prueba, se puede también pero en DNIC no te lo van a hacer. En ese caso hay que ponerse en contacto con nosotros para cambiar esa cédula por otra.

Saludos,
​​​​​​​Guillermo
Osvaldo Grasso, modificado hace 5 años.

RE: Validación de huella digital

Youngling Mensaje: 1 Fecha de incorporación: 23/06/18 Mensajes recientes
hola, tengo exactamente el mismo problema, y queria validar que la huella funciona bien...  será posible que corrijan el codigo que está subido en github (https://github.com/eIDuy/apdu-services)? 

​​​​​​​tengo una tarjeta Especimen V3.