Manual de OpenSC OpenSC Development Team opensc-devel@opensc.org Traducción: Juan Antonio Martínez jonsito@teleline.es Introducción libopensc es una biblioteca de acceso a dispositivos tipo Tarjeta Inteligente (SmartCards). 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 Autores y Colaboradores Se adjunta la lista de todos los autores y colaboradores de OpenSC en orden alfabético Robert Bihlmeyer robbe@orcus.priv.at Stef Hoeben Hoeben.S@Zetes.com Andreas Jellinghaus aj@dungeon.inka.de Olaf Kirch okir@suse.de Nils Larsch larsch@trustcenter.de Juan Antonio Martinez jonsito@teleline.es Ville Skyttä Kevin Stefanik kstef@mtppi.org Antti Tapaninen aet@cc.hut.fi Timo Teräs timo.teras@iki.fi Juha Yrjölä juha.yrjola@iki.fi Jörn Zukowski zukowski@trustcenter.de
Agradecimientos Las siguientes personas an aportado ideas, apoyo y/o información para el desarrollo de OpenSC Antti Partanen antti.partanen@vrk.intermin.fi David Corcoran corcoran@linuxnet.com 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: Matthias Brüstle Markus Friedl Geoff Thrope geoff@geoffthorpe.net
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 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 #15 Es 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: . PC/SC Lite es la implementación del estandard PCSC para sistemas Linux, Unix, Windows y MacOS X, realizada por David Corcoran corcoran@linuxnet.com. 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 SmartCards en Entornos Linux ( M.U.S.C.L.E ) . 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 . Para dudas y consultas acudan a la lista de correo opensc-devel@opensc.org 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: . 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.conf para saber como configurar el driver CT-API bajo OpenSC
Compilación e Instalación de libopensc
Linux Lea el fichero INSTALL para 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 Copiar opensc.conf al directorio Windows ( generalmente C:\WINDOWS o C:\WINNT). Esta operación es opcional Copiar opensc.dll y opensc-pkcs11.dll a una ubicación dentro del path 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 Descargar y compilar los fuentes de OpenSSL de: 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 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) En el fichero src\libopensc\Makefile.mak, añadir "libeay32.dll" y "gdi32.dll" a la línea marcada como "link" (enlace) Realizar la misma inclusión en el fichero src\pkcs11\Makefile.mak en las entradas "link" de las secciones "TARGET" y "TARGET3" 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
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
Uso de OpenSC
OpenSC y Netscape Seleccionar: Communicator -> Tools -> Security Info Seleccionar: Cryptographic Modules Pulsar: Add 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 Asegurese que el Personal Security Manager (PSM) está instalado (paquete mozilla-psm) Seleccionar menú: Edit -> Preferences Seleccionar Categoría: Privacy & Security -> Certificates Pulsar en: "Manage Security Devices" Seleccionar: Load 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.so y 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 ][-][id_]]]>, 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 -l le proporcionará la lista de lectores disponibles. Añada el identificador del certificado en caso necesario ( por defecto ID=45 ). El comando pkcs11-tool -O le 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_keys tal 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 .eid en su directorio raíz y copie su certificado (en formato PEM) en el fichero .eid/authorized_certificates. Nota: pkcs15-tool -c le mostrará los certificados y sus identificadores. El comando pkcs15-tool -r ID -o ~/.eid/authorized_certificates le 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
The OpenSC PKCS #11 library
Qué es PKCS #11 PKCS #11 es 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 SmartCard (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
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
Tareas pendientes de desarrollo
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
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 -a deberí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 Recursos y enlaces La página web del proyecto OpenSC Información sobre los proyectos Assuan y Ägypten: 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
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 project en 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 Guide Contiene 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!