Smart cards: normas y comunicación con el terminal
Vamos a seguir comentando un poquito más acerca de las smart cards, las tarjetas inteligentes de las que empecé a hablar hace casi un mes. En este post voy a comentar algo que en principio no tiene mucho que ver con la seguridad de los sistemas con estas tarjetas, pero que conviene conocer: los estándares que definen las características de estas tarjetas y la forma de comunicarse con el exterior.
El estándar actual de smart cards (de contacto, para RFID hay otros estándar) es la familia ISO 7816, que define básicamente todo lo que se pueda imaginar relacionado con las tarjetas:
- 7816-1: Carcaterísticas físicas
- 7816-2: Dimensiones y contactos de las tarjetas
- 7816-3: Señales eléctricas y protocolos de transmisión.
- 7816-4:Conjunto de comandos estándar
- ...
Hay más, hasta 15 según la wikipedia, pero aquí simplemente voy a comentar ciertas características y el formato de los mensajes.
En primer lugar, las smart card tienen actualmente 5 contactos usados, como se puede ver en la siguiente imagen:
Anteriormente el contacto C6 de la imagen era para programar la EEPROM mediante una tensión de programación (Vpp) bastante más elevada que la de alimentación, Vcc.
Se puede observar que la tarjeta no tiene alimentación propia, ni siquiera reloj propio, sino que todo ello le es proporcionado por el terminal/lector. Esto es importante porque puede llevar implicaciones de seguridad como veremos más adelante. Además, se ve que se trata de una interfaz de comunicación serie bit a bit a través del pin I/O.
En cuanto a la comunicación entre terminal y tarjeta, el terminal activa la tarjeta mediante un proceso definido en ISO 7816-3: activa las líneas tierra, tensión, reloj y reset. A esto la tarjeta responde con un ATR (Answer To Reset) y se da por iniciada la comunicación.
Cualquier comunicación SIEMPRE es iniciada por el terminal, enviando comandos a la tarjeta, y ésta realiza los cálculos o acciones que deba realizar y responde. Estos comandos son las llamadas APDU, Application Protocol Data Unit. La trama APDU de tipo comando consta de los siguientes campos:
- CLA : Byte de clase
- INS : Byte de instrucción
- P1,P2: Parámetros
- Lc : tamaño del bloque de datos
- Bloque de datos
- Le : Tamaño de la respuesta esperada
Los 4 primeros son obligatorio, mientras que los relacionados con los datos y la respuesta esperadas son opcionales. A partir del byte de instrucción, la tarjeta sabe qué es lo que se le pide y responde con una APDU de respuesta, que consta de los campos:
- Datos
- SW1 y SW2: Palabra de estado, dónde se codifica el estado de la operación (correcta, error criptográfico, error general...).
Una vez más, los datos son opcionales pero el código de estado es obligatorio.
Mediante este sencillo mecanismo se comunican hoy en día todas las smart cards disponibles. Con esto ya sabemos cómo se le ordena a una smart card que realice una acción determinada y en qué formato viajan esos datos. En próximos posts hablaremos de la evolución de los SO para smart cards, una pequeña introducción a Java Card y de ataques que se suelen realizar a este tipo de dispositivos... aunque no necesariamente en este orden, seguramente primero de ataques que es más interesante ;-).
December 15th, 2007 - 02:18
Estaré atento a los posts venideros 😉
December 18th, 2007 - 10:16
muy guai , espero que continue esta singladura en el mundo smardcard
April 8th, 2016 - 21:53
Hola
Primero te felicito por tu Post Muy Bueno…
Estoy desarrollando una aplicacion en C# para Read/Write SmartCard y ya e avanzado mucho pero no conozco los comandos para Leer y Escribir en estas ya establesco el contexto , la conexion con el lector pero me falta eso…Si puedes ayudarme lo agradeceria efrainmejias@hotmail.com