Lectura DNIe

Hola, muy Buenas.

Abro este post por que necesito un primer empujoncillo para leer los datos públicos de un DNIe.
Llevo mucho tiempo buscando por internet y lo único semi-relacionado que he visto es esto.

Para mas info sobre lo estándares tenemos esto:

Lo único que he encontrado al respecto es esto:
http://www.makomk.com/2011/02/25/iso-7816-smartcard-interface-for-arduino/

que contiene este código .pde:
http://www.makomk.com/~aidan/iso7816_interface.pde

Lo he cargado y he realizado decenas de pruebas conectando un smartcard haciendo coincidir los pines tal y como pone en el código.

Parece ser que hace falta un circuito intermedio que traduzca las comunicaciones entre el Chip del DNIe y el Arduino, esto es lo que he visto al respecto:
http://www.elettroinnova.it/english
pero parece ser que es para un chip de tarjeta distinto a este.

Uf... menudo berenjenal...

te dejo de aperitivo datos de lo que te va a hacer falta para el dnie :

1.- Que cumpla el estandar ISO 7816 (1, 2 y 3).
2.- Que soporte tarjetas asincronas basadas en protocolos T=0 (y T=1).
3.- Que soporte los estandares:
– API PC/SC (Personal Computer/Smart Card)
– CSP (Cryptographic Service Provider, Microsoft)

  • API PKCS#11

Y ademas te haran falta modulos criptograficos

Con el tema de velocidad serie, 9600 en adelante.

Si ya me peleo para instalarlo con un lector especifico y windows... no te digo para intentar leer por tu cuenta informacion encriptada...

Pues si que parece que tiene tela el asunto.

Meses buscando en Internet y cuando vengo al foro a preguntar me topo de casualidad con esto:
http://sourceforge.net/p/arduinosclib/wiki/Home/

Tiene buena pinta y si funciona (Envia comandos APDU) solo tendría que implementar los paquetes específicos del DNIe y listo.
Cuando tenga tiempo lo probare.

Si alguien se anima se agradece.

Hola rfken,
Yo también llegué a ese mismo site (no me acuerdo cómo hace unos días) y sinceramente creo que soy más novato así que lo que vengo a pedir es ayuda. Aunque en tu caso (DNIe) necesitas protocolo asincrónico, en mí caso, yo necesito el otro protocolo. Aunque entiendo que la base permite leer y escribir, debo admitir que no se suficiente de programación para implementarlo.

Actualmente tengo dos motores (via motor shield), dos LCDs y un montón de botones vía analógica conectados al Arduino. Todo funciona excepcional salvo que me gustaría incluir un módulo de Smart Card para evitar la supervisión constante del Arduino. Lo que me gustaría controlar es:

  1. Leer si la tarjeta introducida fue programada para tal fin.
  2. Leer cuando fue la última activación (quiero limitar el uso).
  3. Escribir en la tarjeta en los espacios disponibles (o en los más antiguos) los eventos (registrar).

Ya conecté el circuito y ya soy capaz (con el ejemplo SCTest) de leer el ATR de distintas tarjetas.

Se agradece cualquier tipo de ayuda o dirección!!

PS: Aunque pudiera cambiar de tarjetas si es más fácil, me regalaron unas SLE4428 que son de 1Kbyte con protección de 1024x1 bit (adjunto la hoja técnica)

SLE4428.pdf (385 KB)

Para mi caso tal y como comentaba el compañero Heke es un berenjenal, algo casi imposible.
Con el arduinosclib he conseguido ller el ATR de decenas de tarjetas pero de un DNIe no he podido.
Me harias un favor probándolo tu a ver si a ti te lo lee.

Pero lo que tu estas buscando es algo mas normal aunque costoso, eso si.
He encontrado esta información al respecto.

En el peor de los casos existen tarjetas tipo eeprom que es como si conectaras un chip 24cxxx (eeprom) directamente al arduino para escribir y leer en el, para hacerlo mas seguro se podría implementar una rutina que cada vez que se use la tarjeta se vuelva a escribir entera de punta a punta con otros datos cifrados para que el usuario que intente experimentar no encuentre diferencia alguna.

@rfken acabo de probar con mi DNIe y el ATR que me deja tanto en SCTest como en SCTest2 (el segundo sólo sirve para tarjetas asíncronas) es un sólo byte en mi caso 3B. Las tarjetas SIM son de este tipo (asíncronas) y esta librería logra leer 22 bytes de ATR en ella.

Según el autor, el la librería esta todo lo que necesito para poder leer y escribir en ella, pero realmente me supera el código y no se cómo implementarlo. Con respecto al post que compartes, ya lo había visto. Intenté usar su código, pero lo único que recibo son puros bytes FF. Puede ser que él lo ha diseñado para 3 tipos de tarjetas (ninguna tan grande como la mía), que usa directamente un hardware más costoso (que no se si es un socket sobre un PCB o tiene algo escondido) o una combinación de ambas. Nuevamente, si supiera como ver las diferencias en el código lo intentaría.

Seguiré intentando a ver hasta donde llego...

Creo que la opción que me indicas es muy válida, la del EEPROM, de hecho, la descripción del producto dice "Intelligent 1-KByte EEPROM with Write Protect Function and Programmable Security Code (PSC)" así que supongo que si se podría. Si sabes de algún tutorial al que pueda hacer referencia (español o inglés) te lo agradecería. Dejo copia de las tarjetas que tengo!

SLE4428.pdf (385 KB)

Vuelvo a subir el hilo para ver si alguien ha podido avanzar algo sobre lectura de algún dato publico del DNIe mediante lector de tarjetas.

Te aseguro que desde el 2014 nadie ha comentado nada al respectos salvo consultas varias sobre tarjetas RFID que no es tu caso.

No se si sólo quieres leer los datos públicos, pero si lo consigues y quieres ir más allá (firmar, por ejemplo) piensa que necesitarás establecer un canal seguro con el DNIe y para ello necesitarás realizar firmas y verificaciones RSA de (creo) 2048 bits. Según esté enlace con arduino puedes conseguir RSA de 1024 en unos 200s

Si al final vas a querer firmar con el DNIe creo que tendrías que pensar en otro procesador más potente.

Hilo cerrado porque el autor no lo ha continuado.
Los interesado deben crear un hilo nuevo y debatir en el.
Todo hilo que tenga ms de 120 dias no debe ser respondido mas que por su autor o sus interlocutores iniciales.
No veo a nadie que lo hiciera en 4 años.
Por eso cierro el hilo y los insto a que creen un hilo nuevo y ahi continuen su tema.