jueves, 25 de enero de 2024

Tarjetas Criptográficas

Las tarjetas criptográficas son un tipo de tarjeta inteligente que tienen un circuito integrado que permite almacenar certificados digitales con sus claves privadas y realizar operaciones criptográficas. Tener los certificados y sus claves privadas en la tarjeta ofrece mayor seguridad ya que las claves privadas no son accesibles desde el ordenador, es el circuito integrado de la tarjeta el que se encarga de realizar las operaciones de firma y descifrado con la clave privada. Esto permite que las tarjetas se puedan utilizar para la autenticación en cualquier ordenador o sistema de acceso.

Para utilizar tarjetas criptográficas es necesario tener un lector de tarjetas inteligentes como por ejemplo el SCR 3310v2. Este lector cumple con estándares como PC/SC y CCID para su utilización desde diferentes sistemas.

Hay múltiples fabricantes de tarjetas criptográficas, para este artículo voy a utilizar la tarjeta de la FNMT (Fabrica Nacional de Moneda y Timbre). Esta tarjeta también cumple estándares de comunicación como PC/SC y PKCS#11.


El circuito integrado de las tarjetas tiene 8 o 6 contactos para comunicarse con el lector. A continuación se indica la función de cada uno de ellos. En los circuitos con 6 contactos no se incluyen los contactos C4 y C8.

  • C1: Voltaje de alimentación del circuito integrado.
  • C2: Reinicio del circuito integrado.
  • C3: Señal de reloj para el circuito integrado.
  • C4: Otros usos.
  • C5: Conexión a tierra del circuito integrado.
  • C6: Alto voltaje para programación de memorias u otros usos.
  • C7: Entrada y salida de datos.
  • C8: Otros usos.

Windows es probable que detecte el lector y lo configure automáticamente, si no es así podemos descargar el controlador desde la web del fabricante. En Linux debemos instalar PCSC-Lite. Junto con este software se instalará también la biblioteca libccid. Con el comando pcsc_scan se pueden ver los lectores conectados al ordenador así como las tarjetas insertadas en los lectores.

# apt-get install pcscd pcsc-tools

# pcsc_scan 

PC/SC device scanner
V 1.6.2 (c) 2001-2022, Ludovic Rousseau <ludovic.rousseau@free.fr>
Using reader plug'n play mechanism
Scanning present readers...
0: SCM Microsystems Inc. SCR 3310 [CCID Interface] 00 00
 
Sun Jan 21 12:45:55 2024
 Reader 0: SCM Microsystems Inc. SCR 3310 [CCID Interface] 00 00
  Event number: 0
  Card state: Card inserted, 
  ATR: 3B 7F 96 00 00 00 6A 46 4E 4D 54 03 04 11 43 04 30 03 90 00

ATR: 3B 7F 96 00 00 00 6A 46 4E 4D 54 03 04 11 43 04 30 03 90 00
+ TS = 3B --> Direct Convention
+ T0 = 7F, Y(1): 0111, K: 15 (historical bytes)
  TA(1) = 96 --> Fi=512, Di=32, 16 cycles/ETU
    250000 bits/s at 4 MHz, fMax for Fi = 5 MHz => 312500 bits/s
  TB(1) = 00 --> VPP is not electrically connected
  TC(1) = 00 --> Extra guard time: 0
+ Historical bytes: 00 6A 46 4E 4D 54 03 04 11 43 04 30 03 90 00
  Category indicator byte: 00 (compact TLV data object)
    Tag: 6, len: A (pre-issuing data)
      Data: 46 4E 4D 54 03 04 11 43 04 30
    Mandatory status indicator (3 last bytes)
      LCS (life card cycle): 03 (Initialisation state)
      SW: 9000 (Normal processing.)

Possibly identified card (using /usr/share/pcsc/smartcard_list.txt):
3B 7F 96 00 00 00 6A 46 4E 4D 54 03 04 11 43 04 30 03 90 00
	CERES Spanish SmartCard from the "Fabrica Nacional de Moneda y Timbre" (FNMT) (eID)
	http://www.cert.fnmt.es/

La tarjeta también necesita un controlador que podemos descargar de la web del fabricante. Para Debian y otras distribuciones Linux podemos descargar un paquete en el que se encuentra la biblioteca libpkcs11-fnmtdnie.so. Esta biblioteca la podrán utilizar los programas para comunicarse con la tarjeta. Es necesario instalar el paquete pinentry-gtk2.

# wget https://www.sede.fnmt.gob.es/documents/10445900/11635653/libpkcs11-fnmtdnie_1.6.9_amd64.deb
# apt-get install pinentry-gtk2
# dpkg -i libpkcs11-fnmtdnie_1.6.9_amd64.deb

En la web de la FNMT también se encuentran varios programas para manejar la tarjeta. Por ejemplo con el programa "Importador de Certificados" podremos importar en la tarjeta certificados y claves privadas contenidos en archivos PKCS#12. En los certificados va incluida la clave pública.

Los archivos EXE disponibles para Windows en realidad son archivos JAR de Java y los podremos ejecutar también en Linux. Es posible que al ejecutarlos recibamos el error "VERSIÓN DE VM NO COMPATIBLE". En este caso es necesario usar una versión de la máquina virtual Java anterior.

# apt-get install openjdk-8-jre

# /usr/lib/jvm/java-8-openjdk-amd64/bin/java -jar Importador\ de\ Certificados.exe

Para poder utilizar el lector de tarjetas en un navegador como Firefox debemos configurar un "Dispositivo de Seguridad". En Menú -> Ajustes -> Privacidad & Seguridad -> Certificados -> Dispositivos de Seguridad -> Cargar tenemos que seleccionar la biblioteca /usr/lib/libpkcs11-fnmtdnie.so. En el administrador de certificados podremos ver los certificados de la tarjeta. Para ello se nos pedirá la contraseña que protege el acceso a la tarjeta. Cuando conectemos a una web con uno de esos certificados, la tarjeta se encargará de realizar las operaciones criptográficas que sea necesario hacer con las claves privadas.





Otro software que nos puede resultar útil es OpenSC. Con el comando pkcs11-tool podemos administrar los certificados y claves de la tarjeta. Con el parámetro --list-objects podemos ver como en la tarjeta hay un certificado, una clave privada y una clave pública. En las claves se indica su uso y acceso. La clave privada se usa para descifrar y firmar, la clave pública para cifrar y verificar la firma. La clave privada no se puede extraer de la tarjeta y la pública si.

# apt-get install opensc

# pkcs11-tool --module /usr/lib/libpkcs11-fnmtdnie.so --list-objects --pin aaaaaa

Using slot 0 with a present token (0x10000)

Certificate Object; type = X.509 cert
  label:      Alejandro Sánchez
  subject:    DN: C=ES, ST=Madrid, O=Cuaderno Inform\xC3\xA1tica, CN=Alejandro S\xC3\xA1nchez/emailAddress=alejandro@cuadernoinformatica.com
  ID:         f53769e8d42bb477e9fdc0126a4939e7fb3fc7a8

Private Key Object; RSA 
  label:      Alejandro Sánchez
  ID:         f53769e8d42bb477e9fdc0126a4939e7fb3fc7a8
  Usage:      decrypt, sign
  Access:     sensitive, always sensitive, never extractable

Public Key Object; RSA 2048 bits
  label:      Alejandro Sánchez
  ID:         f53769e8d42bb477e9fdc0126a4939e7fb3fc7a8
  Usage:      encrypt, verify
  Access:     none

Esto es lo básico que necesitamos saber para utilizar tarjetas criptográficas. Si tenemos alguna necesidad especial podemos investigar los protocolos y software mencionados. Para saber más sobre certificados digitales se puede leer el artículo Autoridad de Certificación con OpenSSL.

No hay comentarios:

Publicar un comentario