Manual de OpenSC


Tabla de contenidos

1. Introducción
2. Autores y Colaboradores
Agradecimientos
3. Licencia. Copyright
4. Introducción
Estructura de OpenSC
El módulo lector
5. Compilación e Instalación de libopensc
Linux
Windows
Windows con soporte OpenSSL
6. Estado del desarrollo
Tarjetas
Windows
Módulo PKCS #11 en Netscape y Mozilla
7. Uso de OpenSC
OpenSC y Netscape
OpenSC y Mozilla
OpenSC y OpenSSL
OpenSC y OpenSSH
Pluggable Authentication Module
eid based authentication
Autenticación basada en LDAP
8. The OpenSC PKCS #11 library
Qué es PKCS #11
Slots Virtuales
9. Seguridad
Ordenes desde línea de Comandos
Acceso a la card
Protegiendo tarjetas con la utilidad pkcs15-init
Protección de los ficheros de configuración, profiles, y caché
Acceso como administrador (root)
10. Tareas pendientes de desarrollo
General
Windows
11. Resolución de problemas
12. Recursos y enlaces
13. Modulo de firmado
Compilando e instalando el Módulo signer
14. Notas sobre DocBook

Capítulo 1. Introducción

libopensc es una biblioteca de acceso a dispositivos tipo Tarjeta Inteligente (smart cards). Cualquier tarjeta que soporte el estandard ISO 7816-4 deberia poder ser utilizada para las funcionalidades básicas ( manejo de ficheros ). Si además la tarjeta es compatible con el standard PKCS#15, la biblioteca ofrece a estas tarjetas el soporte de diversas funciones criptográficas

Capítulo 2. Autores y Colaboradores

Tabla de contenidos

Agradecimientos

Se adjunta la lista de todos los autores y colaboradores de OpenSC en orden alfabético

Agradecimientos

Las siguientes personas an aportado ideas, apoyo y/o información para el desarrollo de OpenSC

OpenSC no ha inventado la rueda ni escrito el código desde cero. Se ha usado código de otros proyectos, principalmente para desarrollar el interfaz con éstos. Los autores originales son:

Capítulo 3. Licencia. Copyright

OpenSC smart card library
Copyright (C) OpenSC developers 

This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 
02111-1307  USA

Capítulo 4. Introducción

OpenSC está basado en diversos componentes. El principal es la biblioteca OpenSC, a su vez dividida en tres capas, cada una con diversos drivers Otros componentes son: la biblioteca PKCS#11, el módulo PAM, diversos plugins para OpenSSL... Adicionalmente, se incluyen diversas utilidades y aplicaciones de test que usan estas bibliotecas

El objetivo de este capítulo es proporcionar información sobre el funcionamiento interno de la biblioteca OpenSC, cómo funciona, y finalmente qué ofrecen las utilidades. Cada una de éstas, así como las bibliotecas, tienen su propia pagina de manual, y su sección en este documento

Estructura de OpenSC

La biblioteca básica de OpenSC es libopensc. Ofrece tanto funcionalidades básicas para la comunicación con las tarjetas inteligentes, como avanzadas, (eg. generar claves RSA en una tarjeta)

Para ello, libopensc está estructurado en diversas capas, a su vez implementadas mediante uno o más drivers. Estas capas son:

Lector
OpenSc necesita poder enlazar con los diversos manejadores de lectores de tarjetas. Dado que cada uno tiene su propio software (CT-api, PC/SC, etc), OpenSC provee un módulo específico para cada uno
Tarjetas
Idealmente, todas las tarjetas inteligentes, de berían implementar el standard ISO 7816 de la misma forma, y aceptar y generar los mismos comandos y respuestas. Desafortunadamente, este no es el caso. OpenSC ofrece pues un módulo específico por cada tarjeta (o familia de tarjetas)
pkcs15init
Las tarjetas inteligentes suelen incorporar un sistema de ficheros, donde almacenar claves y certificados. Asímismo incorporan comandos para crear directorios y ficheros, ajustar permisos y seguridad, etc. En función de la tarjeta no solo los comandos son distintos, sino que incluso la estructura de ficheros y modelo de seguridad difieren. El módulo pkcs15init esconde estas diferencias al resto de la aplicación
La infraestructura PKCS #15

PKCS #15Es el estandard de manejo y almacenamiento de claves y certificados en un dispositivo criptográfico. A pesar de ello, muchos fabricantes de tarjetas implementan sus propios mecanismos, por ejemplo especificando diferentes directorios. OpenSC implementa el estandard PKCS#15, existiendo un módulo de emulación para aquellas tarjetas que se apartan del estandard

De hecho es posible elaborar una infraestructura nueva para implementar compatibilidad con sistemas que no cumplan dicho estandard

El módulo lector

PC/SC Lite es una aplicación middleware que sirve para interactuar, por un lado con los drivers para lectores de tarjetas, y por otro con las aplicaciones que las manejan. OpenSC puede usar PC/SC Lite mediante el modulo lector pcsc, aunque soporta otras alternativas

PC/SC es un API estandard entre aplicaciones, como gestor de recursos para lectores de tarjetas inteligentes. Es muy popular en el entorno operativo Windows. La documentación está disponible en: http://www.pcscworkgroup.com/.

PC/SC Lite es la implementación del estandard PCSC para sistemas Linux, Unix, Windows y MacOS X, realizada por David Corcoran . La aplicación está disponible como software libre y gratuíto. Para descargar esta aplicación, refierase a la página web del Movimiento para el Uso de smart cards en Entornos Linux ( M.U.S.C.L.E ) http://www.linuxnet.com/.

Para instalar el soporte de OpenSC para pcsc-lite, es necesario instalar PCSCLite primero, y seguidamente configurar OpenSC especificando la ubicación de la instalación de PCSC

$ cd opensc-<version>
$ ./configure --with-pcsclite=/path/to/pcsclite
                                

OpenCT es una nueva aplicación para manejo de tarjetas inteligentes, lectores y terminales de acceso. OpenCT ha sido escrito desde cero , constituyendo un entorno muy ligero, e incluyendo todos los drivers. Está dispobible para sistemas Linux, pero si se desea su uso en otros entornos Unix o BSD, por favor consulte en la lista de correo de opensc-devel

OpenCT es software libre. El código fuente está disponible de manera gratuita. OpenCT es desarrollado conjuntamente con OpenSC y se recomienda su uso preferente para entornos Linux. OpenCT está disponible en la página web de OpenSC http://www.opensc.org/. Para dudas y consultas acudan a la lista de correo

Para compilar OpenSC con soporte OpenCT, es necesario tener instalado éste primero. La documentación de OpenCT está incluída en el código fuente, así como disponible en línea a través del enlace: http://www.opensc.org/files/doc/openct.html. Una vez instalado OpenCT, recompile OpenSC indicando la ubicación de las bibliotecas OpenCT

$ cd opensc-<version>
$ ./configure --with-openct=/path/to/openct
                                

CT-API es un estandard para manejadores de tarjetas inteligentes. Fué desarrollado en la década de los 80, para aplicaciones MS-Dos, y quizás no sea muy conocido en los ambientes multi-usuario y multi-tarea de la actualidad. Sin embargo, CT-API está muy extendido y muchos lectores proveen soporte para este estándard incluso bajo Linux.

OpenSC puede usar drivers CT-API directamente. No obstante su uso se reserva para aplicaciones de depuración y no se recomienda en instalaciones multi-usuario o con múltiples aplicaciones que usen el lector

El soporte CT-API en OpenSC no necesita párametros especiales a la hora de recompilar. Léase el fichero de configuración opensc.confpara saber como configurar el driver CT-API bajo OpenSC

Capítulo 5. Compilación e Instalación de libopensc

Linux

Lea el fichero INSTALLpara ver las instrucciones de compilación. Si se está partiendo de una versión descargada del CVS, necesitará ejecutar previamente el script 'bootstrap' antes de ejecutar 'configure'. Del mismo modo, deberá tener versiones actualizadas de Autoconf, Automake, y Libtool

Windows

Ejecute "nmake -f makefile.mak" en el directorio opensc para compilar

Además de nmake, deberá tener perl y flex instalados para poder realizar la compilación

El fichero Makefile.mak no incorpora mecanismos para "make install", por lo que deberá realizar la instalación de manera manual

  1. Copiar opensc.conf al directorio Windows ( generalmente C:\WINDOWS o C:\WINNT). Esta operación es opcional
  2. Copiar opensc.dll y opensc-pkcs11.dll a una ubicación dentro del path
  3. Si se quiere utilizar el comando pkcs15-init.exe, asegurese de que los ficheros *.profile residentes en el directorio src\pkcs15init\ están en el mismo directorio que pkcs15-init.exe, o en el directorio Windows

Windows con soporte OpenSSL

Esta opción añade funcionalidad extra (por ejemplo PKCS#11 hash y mecanismos de firmas pkcs#11 adicionales

  1. Descargar y compilar los fuentes de OpenSSL de: http://www.openssl.org/source/
  2. Añadir el directorio \inc32 al include_path, y el \out32dll al library_path y exec_path
    set include=%include%;.....\inc32
    set lib=%lib%;.....\out32dll
    set path=%path%;....\out32dll
                                            
    
  3. En el fichero src\tools\Makefile.mak descomentar "pkcs15-init.exe en la línea "TARGETS", y (opcionalmente) añadir "libeay32.lib" y "gdi32.lib" al la línea marcada como "link" (enlace)
  4. En el fichero src\libopensc\Makefile.mak, añadir "libeay32.dll" y "gdi32.dll" a la línea marcada como "link" (enlace)
  5. Realizar la misma inclusión en el fichero src\pkcs11\Makefile.mak en las entradas "link" de las secciones "TARGET" y "TARGET3"
  6. En el fichero win32\Make.rules.mak, añadir /DHAVE_OPENSSL a la línea "COPTS"

Para no necesitar las librerías dinámicas: compilar OpenSSL estáticamente y substituír los ficheros gdi32.dll y libeay32.dll por los ficheros gdi32.lib t libeay32.lib, respectivamente, en los tres ficheros Makefile.mak anteriormente indicados

Capítulo 6. Estado del desarrollo

Tarjetas

CryptoFlex

Soporta firma/desencriptación e inicialización

Gemplus PK 4K, 8K, 16K

Soporta firma/desencriptación e inicialización

Nota: no le será posible inicializar una tarjeta GemSafe - estas tarjetas vienen personalizadas por GemPlus y no se pueden borrar o añadir nuevos ficheros de claves en ellas

Aladdin eToken PRO

Soporta firma/desencriptación e inicialización

Nota: CardOS solo soporta claves para firmado, o desencriptación, pero no para ambas. Esta limitación puede ser evitada creando/almacenando claves con la opción "--split-keys"

Eutron CryptoIdendity IT-SEC

Soporta firma/desencriptación e inicialización

Nota: CardOS solo soporta claves para firmado, o desencriptación, pero no para ambas. Esta limitación puede ser evitada creando/almacenando claves con la opción "--split-keys"

Micardo

Soportada ( TODO: incluir detalles )

Miocos

Soportada ( TODO: incluir detalles )

Setcos

Soportada ( TODO: incluir detalles )

Tcos

Soportada ( TODO: incluir detalles )

Windows

Actualmente, solo han sido portados a Windows: libopensc.dll, pkcs11-spy.dll, opensc-pkcs11.dll y la mayor parte de los ejecutables del directorio \tools y \tests. Estas bibliotecas han sido testeadas en Win98, WinNT, Win2000 y WinXP

Módulo PKCS #11 en Netscape y Mozilla

Netscape parece mostrar más información acerca de sus módulos de seguridad que Mozilla. No obstante el soporte no ha sido testeado

Notas sobre threads en Linux y MacOS X: Netscape y Mozilla usan el parámetro CKF_OS_LOCKING_OK en la función C_Initialize(). Como resultado, el thread del navegador no termina cuando se cierra éste, y debe ser abortado manualmente. Esto es debido a que el navegador no invoca C_Finalize, que liberaría los locks, tal y como especifica el estandard

Por consiguiente OpenSC no utiliza los mecanismos de bloqueos de threads, incluso aunque sean solicitados. Esto parece funcionar en Mozilla, pero puede causar problemas en aplicaciones que utilicen múltiples hilos que accedan simultáneamente a la librería pkcs11

Si se desea utilizar los mecanismos de threading, recompilar con la opción -DPKCS11_THREAD_LOCKING. En Windows no se usan hilos, y por consiguiente este problema no existe, por lo que se usa el mecanismo de bloqueos del sistema

Capítulo 7. Uso de OpenSC

OpenSC y Netscape

  1. Seleccionar: Communicator -> Tools -> Security Info
  2. Seleccionar: Cryptographic Modules
  3. Pulsar: Add
  4. Indicar nombre del módulo: "OpenSC PKCS #11 Module" Indicar ubicación del fichero: /path/to/opensc/lib/pkcs11/opensc-pkcs11.so

Para que el módulo funcione adecuadamente, es necesario activarlo: En el Menú "Cryptographic Modules" Seleccionar la tarjeta OpenSC, y pulsando en "Config", activar los botones "Enable this token" y "Publicly readable Certs"

Con esto se garantiza que Netscape utilizará la tarjeta cuando intente mostrar mensajes encriptados en el Netscape Messenger. Del mismo modo habilitar "Publicly readable Certs" evitará que Netscape nos pida el PIN cada vez que se acceda a una página que requiera autenticación del Cliente

El boton "RSA" NO DEBE ser activado. En caso contrario, Netscape intentará usar la tarjeta cada vez que vaya a generar claves públicas, y fallará (no todas las tarjetas soportan esta funcionalidad)

FIXME: Especificar versión de Netscape a la que se aplican estas instrucciones

OpenSC y Mozilla

  1. Asegurese que el Personal Security Manager (PSM) está instalado (paquete mozilla-psm)
  2. Seleccionar menú: Edit -> Preferences
  3. Seleccionar Categoría: Privacy & Security -> Certificates
  4. Pulsar en: "Manage Security Devices"
  5. Seleccionar: Load
  6. Indicar nombre del módulo: "OpenSC PKCS #11 Module" y ubicación del fichero: /path/to/opensc/lib/pkcs11/opensc-pkcs11.so

OpenSC y OpenSSL

OpenSSL es una potente utilidad que implementa los protocolos SSL, así como una biblioteca criptográfica de uso general. Entre sus características, se incluye la posibilidad de incluir "al vuelo" capacidades criptográficas adicionales (engines), como pueda ser la adicción de hardware criptográfico

OpenSC incluye dos "engines" para OpenSSL. Esto permite el uso de OpenSSL y sus diversas utilidades asociadas en combinación con las capacidades criptográficas de las tarjetas inteligentes

Para utilizar estas habilidades, es preciso cargar el "engine" dentro de OpenSSL, y luego utilizar de la manera habitual las aplicaciones. He aquí un ejemplo de utilización desde el comando openssl :

Ejemplo de cómo cargar el "engine" OpenSC

aj@simulacron:~$ openssl
OpenSSL> engine dynamic -pre
SO_PATH:/home/aj/opensc/lib/opensc/engine_opensc.so -pre ID:opensc
-pre LIST_ADD:1 -pre LOAD
(dynamic) Dynamic engine loading support
[Success]: SO_PATH:/home/aj/opensc/lib/opensc/engine_opensc.so
[Success]: ID:opensc
[Success]: LIST_ADD:1
[Success]: LOAD
Loaded: (opensc) opensc engine
OpenSSL> 
                                

Un comando OpenSSL típico puede ser la recuperación de un certificado: req -engine opensc -new -key key -keyform engine -out req.pem -text. Consulte la documentación de OpenSSL para detalles adicionales

- key Especifica el identificador de una clave en Hexadecimal. - por ejemplo "45" corresponde al la clave con ID="0x45"

OpenSC incluye dos "engines" para OpenSSL: engine_opensc.soy engine_pkcs11.so.

El módulo engine_opensc.so sólo funciona bajo OpenSC, y no funcionará cuando haya múltiples aplicaciones accediendo concurrentemente a la tarjeta, o existan en la tarjeta varios certificados. Pero en los casos simples: (una aplicación, una tarjeta, un certificado) es el módulo indicado por su simplicidad

El módulo engine_pkcs11.so es mucho mas genérico y flexible. funcionará en todos los casos, incluídos aquellos en que existan múltiples tarjetas, claves, certificados, con aplicaciones concurrentes. Además está basado en el estandard PKCS#11, por lo que no solo puede usar la biblioteca OpenSC (como hace por defecto), sino cualquier otra implementación de PKCS#11

Para cargar dicho "engine", ejecutar el comando:

aj@simulacron:~$ openssl
OpenSSL> engine dynamic -pre
SO_PATH:/home/aj/opensc/lib/opensc/engine_pkcs11.so -pre ID:pkcs11
-pre LIST_ADD:1 -pre LOAD -pre
MODULE_PATH:/home/aj/opensc/lib/pkcs11/opensc-pkcs11.so
(dynamic) Dynamic engine loading support
[Success]: SO_PATH:/home/aj/opensc/lib/opensc/engine_pkcs11.so
[Success]: ID:pkcs11
[Success]: LIST_ADD:1
[Success]: LOAD
[Success]: MODULE_PATH:/home/aj/opensc/pkcs11/opensc-pkcs11.so
Loaded: (pkcs11) pkcs11 engine
OpenSSL> 
                                

Y luego proceda normalmente

Un comando típico OpenSSL puede ser la recuperación de un certificado: req -engine pkcs11 -new -key key -keyform engine -out req.pem -text. Consulte la documentación de OpenSSL para más detalles

key tiene el formato [slot_<slotNr>][-][id_<keyID>], donde

  • El parámetro (opcional) slotNr indica el slot PKCS#11 a usar (empezando por cero, que es el valor por defecto
  • keyID es el identificador de clave en notación hexadecimal

Ejemplos:

  • id_45 => clave privada con ID = 0x45 en el primer slot disponible
  • slot_2-id_46 => clave privada con ID = 0x46 en el tercer slot

En sistemas Windows, solo está portado el módulo pkcs11. Al cargar dicho engine, utilize el nombre "engine_pkcs11" en lugar de "engine_pkcs11.so"

OpenSC y OpenSSH

La versión 3.6.1p2 de OpenSSH necesita un parche para compilar con soporte OpenSC. Encontrará dicho parche en el directorio src/openssh

Para compilar OpenSSH, ejecute el comando "configure" de la siguiente manera: ./configure --with-opensc=/path/to/opensc

Necesitará tener certificados en su tarjeta: un par de claves no es suficiente. Descargue el certificado en formato OpenSSH con el comando: ssh-keygen -D reader [ : certificate ID ] > file

Reemplace reader con el número del lector que desea ( por defecto 0). El comando opensc-tool -lle proporcionará la lista de lectores disponibles. Añada el identificador del certificado en caso necesario ( por defecto ID=45 ). El comando pkcs11-tool -Ole indica la lista de certificados y sus identificadores

Una vez realizada la extracción del certificado, copielo al servidor e incluyalo en el fichero ~/.ssh/authorized_keystal y como se hace habitualmente

Para usar una tarjeta con OpenSSH, ejecute: ssh -I reader [ : certificate ID ]

Del mismo modo se puede usar la utilidad ssh-agent con OpenSC. para ello use el comando: ssh-add -s reader

Pluggable Authentication Module

El sistema PAM (Pluggable authentication modules) es el mecanismo por el que Linux, y otros sistemas Unix utilizan para los procedimientos de autentificación de usuarios. OpenSC incluye un módulo que permite añadir la autentificación mediante tarjetas inteligentes: "pam_opensc"

pam_opensc identifica las siguientes opciones:

debug
registra información para depuración
audit
registra información sobre trazas
use_first_pass
No solicita contraseñas al usuario, sino que utiliza los elementos definidos en la configuración de los módulos PAM
try_first_pass
No solicita contraseña, a menos que la opción PAM_(OLD)AUTHOK esté especificada
use_authtok
Exige la opción PAM_AUTHOK, fallando en caso contrario
set_pass
Ajusta las opciones PAM_ con las contraseñas usadas en éste módulo
nodelay
Elimina el retardo de un segundo en caso de autenticación fallida
auth_method=X
Selecciona entre pkcs15-ldap o pkcs15-eid (opción por defecto) como modo de funcionamiento del módulo

Opciones Genéricas:

-h
muestra ayuda
-r reader
Nombre del lector (FIXME: not number?)

eid based authentication

Este es el método de autentificación por defecto: Cree un directorio .eiden su directorio raíz y copie su certificado (en formato PEM) en el fichero .eid/authorized_certificates.

Nota: pkcs15-tool -cle mostrará los certificados y sus identificadores. El comando pkcs15-tool -r ID -o ~/.eid/authorized_certificatesle permitirá recuperar y guardar el certificado en el fichero deseado

Autenticación basada en LDAP

Si escogemos la opción auth_metod=pkcs15-ldap, se activará el soporte LDAP para autenticación a través de OpenSC. Las siguientes opciones están contempladas:

-L ldap.conf
especifica el fichero de configuración a usar
-A entry
Añadir nueva entrada
-E entry
Activar entrada actual
-H hostname
Nombre del servidor LDAP
-P port
Puerto en el que el servidor está escuchando
-S scope
Ambito (scope) del servidor
-b binddn
binddn de la conexión
-p passwd
contraseña del binding LDAP
-B base
base del binding LDAP
-a attributes
Atributos a recuperar
-f filter
filtro de búsqueda

FIXME: incluir un ejemplo de estructura de datos LDAP: fichero de configuración, etc

Capítulo 8. The OpenSC PKCS #11 library

Tabla de contenidos

Qué es PKCS #11
Slots Virtuales

Qué es PKCS #11

PKCS #11es el API estandard para el acceso a dispositivos criptográficos, tales como tarjetas inteligentes, modulos de seguridad hardware, etc... El API está definido mediante funciones como: C_GetSlotList(), C_OpenSession(), C_FindObjects(), C_Login(), C_Sign(), C_GenerateKeyPair(), ...

Algo de terminología básica de PKCS #11

  • Slot: ubicación en la que se puede insertar una tarjeta inteligente. Normalmente se corresponde con un lector de tarjetas ( ver "slots virtual" )
  • Token: elemento que se sitúa en un slot. Habitualmente se refiere a una smart card (ver slots virtual)
  • Objeto (Object) una clave, certificado, datos, etc. Puede ser un objeto referido a un token (eg. un certificado residente en la tarjeta) o bien un objeto referido a la sesion (eg. un dato a firmar/encriptar )
  • Sesión: antes de poder operar con un token, es necesario abrir una sesión y asociarla con él
  • Operación: una firma, una desencriptación, etc que puede conllevar una o varias llamadas a la biblioteca. Solo se puede realizar una operación por cada sesion, pero pueden ser abiertas múltiples sesiones sobre el mismo token

Slots Virtuales

PKCS#11 define que cada token tiene asociado dos PIN's (Personal Identification Number): el del usuario (User PIN) y el del administrador (Security Officer PIN). A pesar de ello muchas tarjetas soportan más de un PIN de usuario (eg PIN1 y PIN2 en tarjetas de telefonos móviles). La manera de resolver este problema es la de proveer de múltiples "slots virtuales" ( definidos en el apéndice D del estándard PKCS #11. Por ello cada lector simula uno o varios slots. Si se inserta una tarjeta, aparecerán tantos slots como PIN's disponibles. En cada slot aparecerá un token que contiene los objetos asociados a cada PIN. Es el equivalente a disponer de "varias tarjetas en una", cada una con su PIN

OpenSC puede trabajar simultáneamente con varias tarjetas, y no sabe a priori cuantos slots se crean por cada tarjeta. Por ello se crean por defecto 4 slots virtuales. Se puede cambiar dicho número en el parámetro "num_slots" del fichero /etc/opensc.conf

Para numerar los slots, OpenSC adopta el siguiente convenio: por cada PIN, sus claves, y certificados, se le asigna un slot virtual. Si hay más objetos son asignados al siguiente slot libre. Si quedan slots libres se crean en ellos slots adicionales marcados como vacíos donde pueden ser insertados tanto un nuevo PIN como sus objetos asociados. Si no se desea añadir nuevos objetos, la directiva "hide_empty_tokens" del fichero de configuración esconde los slots libres

Ejemplo. Sea un sistema con dos lectores. Sea una tarjeta con dos PINs. Cada PIN proteje una clave privada y un certificado. Además existen tres certificados raíz no asociados a dicho PIN. Si tenemos la configuracion num_slots=4 , hide_empty_tokens=false, e insertamos la tarjeta en el segundo lector, obtendremos lo siguiente:

  • token en slot 4: PIN 1, key 1, cert 1
  • token en slot 5: PIN 2, key 2, cert 2
  • token en slot 6: los 3 certificados raíz
  • token en slot 7: vacío

Si se hubiera especificado "hide_empty_tokens=false", el slot 7 no contendría ningún token

Nota: si en el anterior ejemplo, la cadena de certificados contuviera algún certificado común, dicho certificado aparecería duplicado en los slots 4 y 5 (lo que causaría problemas si se intentara borrar. Este problema no está aún resuelto en OpenSC )

Otra cosa a recordar: OpenSC tiene prefijado el número máximo de slots virtuales a 8. por ello, si se selecciona "num_slots = 4" solo se podrán manejar dos lectores. O, por ejemplo, si se seleciona "num_slots = 3", los dos primeros lectores verán 3 slots, mientras que el tercero verá solo 2

Capítulo 9. Seguridad

Ordenes desde línea de Comandos

OpenSC permite especificar el PIN y las claves como argumentos en la línea de comandos. Esta operación sólo es recomendable en casos de test o cuando se es el único usuario del sistema. En sistemas multiusuario, los otros usuarios pueden ejecutar comandos como "ps" o "top", y probablemente puedan ver los argumentos asociados al comando en ejecución. Del mismo modo, dichos comandos suelen quedar registrados en los archivos "history"

La solución pasa por usar un script, o en el caso del comando pkcs15-init, especificar los PINS y claves en un fichero, e indicar el nombre de éste con la opción "--options-file"

Acceso a la card

Pueden aparecer otros problemas en entornos multiusuario donde más de un usuario tenga acceso al lector:

  • Si el usuario deja la tarjeta insertada con la sesion abierta, otro usuario podría modificar el pin, bloquearlo, o incluso anular la tarjeta
  • Si la sesión realiza caché de PIN's o claves, otro usuario podría usar nuestra tarjeta y suplantar nuestra personalidad

Una solución puede ser crear un usuario/grupo "scard/scard" bajo el que se ejecuta el servidor pcscd y al que solo se puede acceder desde xdm. No es una solución perfecta, pero funciona en estaciones que solo disponen de un lector

En el caso de que las aplicaciones utilicen la biblioteca PKCS#11, el sistema garantiza acceso exclusivo una vez que se proporciona el PIN. Esta es la configuración por defecto. Si se desea que múltiples aplicaciones puedan trabajar a la vez con dicha biblioteca, es necesario especificar la opción "lock_login = false" en el fichero /etc/opensc.conf; pero en este caso la tarjeta quedará accesible por terceros

Las otras aplicaciones OpenSC no garantizan el acceso exclusivo

Protegiendo tarjetas con la utilidad pkcs15-init

Muchas tarjetas incorporan una clave "de fábrica", que se usa para crear el sistema de ficheros inicial en la tarjeta. Una vez creado el sistema de ficheros se protege mediante PIN, con lo que dicha clave ya no es válida

Esto significa que los datos del usuario no son accesibles para nadie que posea la clave de fábrica, en el sentido de que no pueden ser accedidos o usados

No obstante, con dicha clave, otro usuario podría destruír el sistema de ficheros, borrando todo su contenido

En si mismo esto es positivo: en el caso de pérdida de tarjeta, los datos solo pueden ser destruídos, no leídos. Pero puede darse otro problema: los certificados pueden ser substituídos por otros falsos. Por consiguiente: sea muy cuidadoso cuando utilice las tarjetas en entornos hostiles, y proteja SIEMPRE los certificados con PIN

Protección de los ficheros de configuración, profiles, y caché

Aunque por sí mismos, los ficheros opensc.conf y xxx.profile no contienen información sensible, es muy importante garantizar que no son modificados

Algunos ejemplos de lo que se puede hacer modificando dichos ficheros:

  • Ajustar el nivel de depuración a un nivel mayor o igual a 6, con lo que la información sensible (PINs) queda registrada
  • Cambiar los permisos de acceso del sistema de ficheros, con lo que la tarjeta quedaría "abierta"
  • Cambiar los certificados en el directorio caché

Por defecto, el fichero de configuración y los ficheros profiles deberían ser propiedad del administrador, con permisos 644. Del mismo modo, el caché de certificados debería residir en el directorio $HOME del usuario con permisos 600. No obstante, si el directorio en el que se ejecutan tiene ficheros profile, estos toman precedencia sobre los del sistema

Acceso como administrador (root)

De lo anterior se deduce que no se puede proteger la tarjeta ante alguien que tenga permisos de root, que pueda cambiar los profiles, o que pueda modificar los ejecutables o supervisar las comunicaciones con las tarjetas

Capítulo 10. Tareas pendientes de desarrollo

Tabla de contenidos

General
Windows

General


* Generación de paquetes Debian
* Aplicaciones gráficas
* Soporte de tarjetas EMV, GSM y JavaCards ( algún voluntario? )
                        

* incluir funciones de (de)codificación PEM en LibOpenSC
* pkcs11: soporte de desencriptación en aquellas tarjetas que lo
soportan
* pkcs11: asegurarse que todas las operaciones de manejo de PIN se
gestionan a través del API pkcs11
* pkcs11: gestion de desbloqueo de PIN's mediante PUK
* general: soporte de operaciones RSA-PSS
* pkcs15-init: soporte de SOPIN en CryptoFlex
* pkcs15-init: al generar claves, comprobar que las claves son
correctas
* pkcs15-init: al manejar PUK crear la entrada AODF asociada
 ( alternativamente, ajustar unblockDisabled para aquellos PIN's
sin PUK )
* pkcs15: corregir sc_pkcs15_change_reference_data: añadir funcion
de desbloqueo

                        

Windows

Toda la funcionalidad de OpenSC debería ser portada a Windows. Del mismo modo se debería implementar una biblioteca para que OpenSC actue como CryptoAPI Provider, implementar mecanismos de autenticación (login), y controles ActiveX para que Internet Explorer pueda realizar signados

Capítulo 11. Resolución de problemas

Existe una lista de correo para soporte y discusión en el proyecto OpenSC. Información adicional sobre el proyecto se puede encontrar en el sitio Web.

Se pueden seguir los siguientes procedimientos para comprobar qué es lo que falla:

  • Comprobar que se encuentra el lector opensc-tool -l
  • Comprobar que se reconoce la tarjeta: opensc-tool -adebería mostrar el ATR de ésta
  • Comprobar que la tarjeta soporta el estandard pkcs15, obteniendo la lista de objetos almacenados: pkcs15-tool -C -c -k --list-public-keys

Ajustando el nivel de depuración a valores superiores a 5, y especificando los ficheros de error y log en el fichero de configuración

Capítulo 12. Recursos y enlaces

La página web del proyecto OpenSC http://www.opensc.org/

Información sobre los proyectos Assuan y Ägypten: http://www.gnupg.org/aegypten/

Capítulo 13. Modulo de firmado

OpenSC Signer es un plugin para Netscape/Mozilla, que puede generar firmas digitales a partir de tarjetas inteligentes. Se utiliza para el firmado de páginas web ( mimetype .sgn )

Compilando e instalando el Módulo signer

Especifique el directorio de instalación para el módulo al ejecutar "configure": $ configure --with-plugin-dir= <directory>

Directorios típicos son /usr/lib/mozilla/plugins y /usr/lib/netscape/plugins.

Consulte el fichero INSTALL para instrucciones adicionales

Nota: este módulo necesita abrir ventanas de diálogo para introducir el PIN. Dichas ventanas se generan con la biblioteca libassuan, del proyecto Ägypten. Si no las tiene instaladas, deberá hacerlo antes de proceder a compilar OpenSC

Capítulo 14. Notas sobre DocBook

Este documento está realizado y mantenido con DocBook XML. A continuación se indican algunos enlaces de introducción

Este documento ha sido escrito como XML, no SGML. Para convertirlo, utilice una hoja de estilo XSL, no DSSSL. Rechace el uso de utilidades que manejen SGML o DSSSL. Ya no son usadas y se consideran obsoletas

El enlace DocBook Open Repository projecten SourceForge, contiene las hojas de estilo necesarias para convertir este documentos a otros formatos

El libro DocBook: The Definitive Guide (O'Reilly Book)ilustra DocBook, es muy manejable, y puede ser utilizado como herramienta en línea de manera gratuita

El libro DocBook XSL: The Complete GuideContiene una buena introducción sobre como crear y manejar documentos, dónde obtener el software y las utilidades, y como procesar los textos. Es un libro muy recomendable

Este documento es demasiado engorroso. Si sabe HTML, por favor ayúdenos a mejorarlo. Algunas partes deberían ser ajustadas mediante hotas de estilo ( Reference for the HTML stylesheet parameters), pero la mayor parte puede ser hecha con CSS. !Ayúdanos!