opensc/docs/opensc-es.html

2052 lines
77 KiB
HTML

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8" />
<title>Manual de OpenSC</title>
<link rel="stylesheet" href="opensc.css" type="text/css" />
<meta name="generator"
content="DocBook XSL Stylesheets V1.66.1" />
</head>
<body>
<div class="book" lang="es">
<div class="titlepage">
<div>
<div>
<h1 class="title">
<a id="opensc"></a>Manual de OpenSC</h1>
</div>
<div>
<div class="author">
<h3 class="author"></h3>
<tt class="email">&lt;
<a href="mailto:opensc-devel@opensc.org">
opensc-devel@opensc.org</a>&gt;</tt>
</div>
</div>
<div>
<div class="author">
<h3 class="author"></h3>
<tt class="email">&lt;
<a href="mailto:jonsito@teleline.es">
jonsito@teleline.es</a>&gt;</tt>
</div>
</div>
</div>
<hr />
</div>
<div class="toc">
<p>
<b>Tabla de contenidos</b>
</p>
<dl>
<dt>
<span class="chapter">
<a href="#opensc.intro">1. Introducción</a>
</span>
</dt>
<dt>
<span class="chapter">
<a href="#opensc.authors">2. Autores y
Colaboradores</a>
</span>
</dt>
<dd>
<dl>
<dt>
<span class="section">
<a href="#opensc.authors.thanks">
Agradecimientos</a>
</span>
</dt>
</dl>
</dd>
<dt>
<span class="chapter">
<a href="#opensc.license">3. Licencia. Copyright</a>
</span>
</dt>
<dt>
<span class="chapter">
<a href="#opensc.overview">4. Introducción</a>
</span>
</dt>
<dd>
<dl>
<dt>
<span class="section">
<a href="#opensc.overview.layers">Estructura de
OpenSC</a>
</span>
</dt>
<dt>
<span class="section">
<a href="#opensc.overview.readers">El módulo
lector</a>
</span>
</dt>
</dl>
</dd>
<dt>
<span class="chapter">
<a href="#opensc.install">5. Compilación e
Instalación de libopensc</a>
</span>
</dt>
<dd>
<dl>
<dt>
<span class="section">
<a href="#opensc.install.linux">Linux</a>
</span>
</dt>
<dt>
<span class="section">
<a href="#opensc.install.windows">Windows</a>
</span>
</dt>
<dt>
<span class="section">
<a href="#opensc.install.windowsopenssl">Windows
con soporte OpenSSL</a>
</span>
</dt>
</dl>
</dd>
<dt>
<span class="chapter">
<a href="#opensc.status">6. Estado del desarrollo</a>
</span>
</dt>
<dd>
<dl>
<dt>
<span class="section">
<a href="#opensc.status.cards">Tarjetas</a>
</span>
</dt>
<dt>
<span class="section">
<a href="#opensc.status.windows">Windows</a>
</span>
</dt>
<dt>
<span class="section">
<a href="#opensc.status.pkcs11">Módulo PKCS #11
en Netscape y Mozilla</a>
</span>
</dt>
</dl>
</dd>
<dt>
<span class="chapter">
<a href="#opensc.using">7. Uso de OpenSC</a>
</span>
</dt>
<dd>
<dl>
<dt>
<span class="section">
<a href="#opensc.using.netscape">OpenSC y
Netscape</a>
</span>
</dt>
<dt>
<span class="section">
<a href="#opensc.using.mozilla">OpenSC y
Mozilla</a>
</span>
</dt>
<dt>
<span class="section">
<a href="#opensc.using.openssl">OpenSC y
OpenSSL</a>
</span>
</dt>
<dt>
<span class="section">
<a href="#opensc.using.openssh">OpenSC y
OpenSSH</a>
</span>
</dt>
<dt>
<span class="section">
<a href="#opensc.using.pam">Pluggable
Authentication Module</a>
</span>
</dt>
<dd>
<dl>
<dt>
<span class="section">
<a href="#opensc.using.pam.eid">eid based
authentication</a>
</span>
</dt>
<dt>
<span class="section">
<a href="#opensc.using.pam.ldap">
Autenticación basada en LDAP</a>
</span>
</dt>
</dl>
</dd>
</dl>
</dd>
<dt>
<span class="chapter">
<a href="#opensc.pkcs11">8. The OpenSC PKCS #11
library</a>
</span>
</dt>
<dd>
<dl>
<dt>
<span class="section">
<a href="#opensc.pkcs11.whatis">Qué es PKCS
#11</a>
</span>
</dt>
<dt>
<span class="section">
<a href="#opensc.pkcs11.slots">Slots
Virtuales</a>
</span>
</dt>
</dl>
</dd>
<dt>
<span class="chapter">
<a href="#security">9. Seguridad</a>
</span>
</dt>
<dd>
<dl>
<dt>
<span class="section">
<a href="#sec_cmd_line">Ordenes desde línea de
Comandos</a>
</span>
</dt>
<dt>
<span class="section">
<a href="#sec_card_access">Acceso a la card</a>
</span>
</dt>
<dt>
<span class="section">
<a href="#sec_p15_init">Protegiendo tarjetas con
la utilidad pkcs15-init</a>
</span>
</dt>
<dt>
<span class="section">
<a href="#sec_files">Protección de los ficheros
de configuración, profiles, y caché</a>
</span>
</dt>
<dt>
<span class="section">
<a href="#sec_root">Acceso como administrador
(root)</a>
</span>
</dt>
</dl>
</dd>
<dt>
<span class="chapter">
<a href="#opensc.todo">10. Tareas pendientes de
desarrollo</a>
</span>
</dt>
<dd>
<dl>
<dt>
<span class="section">
<a href="#opensc.todo.general">General</a>
</span>
</dt>
<dt>
<span class="section">
<a href="#opensc.todo.windows">Windows</a>
</span>
</dt>
</dl>
</dd>
<dt>
<span class="chapter">
<a href="#opensc.help">11. Resolución de
problemas</a>
</span>
</dt>
<dt>
<span class="chapter">
<a href="#opensc.links">12. Recursos y enlaces</a>
</span>
</dt>
<dt>
<span class="chapter">
<a href="#opensc.signer">13. Modulo de firmado</a>
</span>
</dt>
<dd>
<dl>
<dt>
<span class="section">
<a href="#opensc.signer.install">Compilando e
instalando el Módulo signer</a>
</span>
</dt>
</dl>
</dd>
<dt>
<span class="chapter">
<a href="#opensc.docbook">14. Notas sobre DocBook</a>
</span>
</dt>
</dl>
</div>
<div class="chapter" lang="es">
<div class="titlepage">
<div>
<div>
<h2 class="title">
<a id="opensc.intro"></a>Capítulo 1.
Introducción</h2>
</div>
</div>
</div>
<p>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</p>
</div>
<div class="chapter" lang="es">
<div class="titlepage">
<div>
<div>
<h2 class="title">
<a id="opensc.authors"></a>Capítulo 2. Autores y
Colaboradores</h2>
</div>
</div>
</div>
<div class="toc">
<p>
<b>Tabla de contenidos</b>
</p>
<dl>
<dt>
<span class="section">
<a href="#opensc.authors.thanks">
Agradecimientos</a>
</span>
</dt>
</dl>
</div>
<p>Se adjunta la lista de todos los autores y colaboradores
de OpenSC en orden alfabético</p>
<div class="itemizedlist">
<ul type="disc">
<li>Robert Bihlmeyer
<tt class="email">&lt;
<a href="mailto:robbe@orcus.priv.at">
robbe@orcus.priv.at</a>&gt;</tt></li>
<li>Stef Hoeben
<tt class="email">&lt;
<a href="mailto:Hoeben.S@Zetes.com">
Hoeben.S@Zetes.com</a>&gt;</tt></li>
<li>Andreas Jellinghaus
<tt class="email">&lt;
<a href="mailto:aj@dungeon.inka.de">
aj@dungeon.inka.de</a>&gt;</tt></li>
<li>Olaf Kirch
<tt class="email">&lt;
<a href="mailto:okir@suse.de">
okir@suse.de</a>&gt;</tt></li>
<li>Nils Larsch
<tt class="email">&lt;
<a href="mailto:larsch@trustcenter.de">
larsch@trustcenter.de</a>&gt;</tt></li>
<li>Juan Antonio Martinez
<tt class="email">&lt;
<a href="mailto:jonsito@teleline.es">
jonsito@teleline.es</a>&gt;</tt></li>
<li>Ville Skyttä</li>
<li>Kevin Stefanik
<tt class="email">&lt;
<a href="mailto:kstef@mtppi.org">
kstef@mtppi.org</a>&gt;</tt></li>
<li>Antti Tapaninen
<tt class="email">&lt;
<a href="mailto:aet@cc.hut.fi">
aet@cc.hut.fi</a>&gt;</tt></li>
<li>Timo Teräs
<tt class="email">&lt;
<a href="mailto:timo.teras@iki.fi">
timo.teras@iki.fi</a>&gt;</tt></li>
<li>Juha Yrjölä
<tt class="email">&lt;
<a href="mailto:juha.yrjola@iki.fi">
juha.yrjola@iki.fi</a>&gt;</tt></li>
<li>Jörn Zukowski
<tt class="email">&lt;
<a href="mailto:zukowski@trustcenter.de">
zukowski@trustcenter.de</a>&gt;</tt></li>
</ul>
</div>
<div class="section" lang="es">
<div class="titlepage">
<div>
<div>
<h2 class="title" style="clear: both">
<a id="opensc.authors.thanks">
</a>Agradecimientos</h2>
</div>
</div>
</div>
<p>Las siguientes personas an aportado ideas, apoyo y/o
información para el desarrollo de OpenSC</p>
<div class="itemizedlist">
<ul type="disc">
<li>Antti Partanen
<tt class="email">&lt;
<a href="mailto:antti.partanen@vrk.intermin.fi">
antti.partanen@vrk.intermin.fi</a>&gt;</tt></li>
<li>David Corcoran
<tt class="email">&lt;
<a href="mailto:corcoran@linuxnet.com">
corcoran@linuxnet.com</a>&gt;</tt></li>
</ul>
</div>
<p>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:</p>
<div class="itemizedlist">
<ul type="disc">
<li>Matthias Brüstle</li>
<li>Markus Friedl</li>
<li>Geoff Thrope
<tt class="email">&lt;
<a href="mailto:geoff@geoffthorpe.net">
geoff@geoffthorpe.net</a>&gt;</tt></li>
</ul>
</div>
</div>
</div>
<div class="chapter" lang="es">
<div class="titlepage">
<div>
<div>
<h2 class="title">
<a id="opensc.license"></a>Capítulo 3. Licencia.
Copyright</h2>
</div>
</div>
</div>
<table border="0" bgcolor="#E0E0E0">
<tr>
<td>
<pre class="screen">
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
</pre>
</td>
</tr>
</table>
</div>
<div class="chapter" lang="es">
<div class="titlepage">
<div>
<div>
<h2 class="title">
<a id="opensc.overview"></a>Capítulo 4.
Introducción</h2>
</div>
</div>
</div>
<div class="toc">
<p>
<b>Tabla de contenidos</b>
</p>
<dl>
<dt>
<span class="section">
<a href="#opensc.overview.layers">Estructura de
OpenSC</a>
</span>
</dt>
<dt>
<span class="section">
<a href="#opensc.overview.readers">El módulo
lector</a>
</span>
</dt>
</dl>
</div>
<p>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</p>
<p>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</p>
<div class="section" lang="es">
<div class="titlepage">
<div>
<div>
<h2 class="title" style="clear: both">
<a id="opensc.overview.layers"></a>Estructura de
OpenSC</h2>
</div>
</div>
</div>
<p>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)</p>
<p>Para ello, libopensc está estructurado en diversas
capas, a su vez implementadas mediante uno o más drivers.
Estas capas son:</p>
<div class="variablelist">
<dl>
<dt>
<span class="term">Lector</span>
</dt>
<dd>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</dd>
<dt>
<span class="term">Tarjetas</span>
</dt>
<dd>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)</dd>
<dt>
<span class="term">pkcs15init</span>
</dt>
<dd>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</dd>
<dt>
<span class="term">La infraestructura PKCS
#15</span>
</dt>
<dd>
<p>
<a href="http://www.rsasecurity.com/rsalabs/pkcs/pkcs-15/"
target="_top">PKCS #15</a>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</p>
<p>De hecho es posible elaborar una infraestructura
nueva para implementar compatibilidad con sistemas
que no cumplan dicho estandard</p>
</dd>
</dl>
</div>
</div>
<div class="section" lang="es">
<div class="titlepage">
<div>
<div>
<h2 class="title" style="clear: both">
<a id="opensc.overview.readers"></a>El módulo
lector</h2>
</div>
</div>
</div>
<p>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</p>
<p>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:
<a href="http://www.pcscworkgroup.com/" target="_top">
http://www.pcscworkgroup.com/</a>.</p>
<p>PC/SC Lite es la implementación del estandard PCSC
para sistemas Linux, Unix, Windows y MacOS X, realizada
por David Corcoran
<tt class="email">&lt;
<a href="mailto:corcoran@linuxnet.com">
corcoran@linuxnet.com</a>&gt;</tt>. 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
)
<a href="http://www.linuxnet.com/" target="_top">
http://www.linuxnet.com/</a>.</p>
<p>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</p>
<table border="0" bgcolor="#E0E0E0">
<tr>
<td>
<pre class="screen">
$ cd opensc-&lt;version&gt;
$ ./configure --with-pcsclite=/path/to/pcsclite
</pre>
</td>
</tr>
</table>
<p></p>
<p>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</p>
<p>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
<a href="http://www.opensc.org/" target="_top">
http://www.opensc.org/</a>. Para dudas y consultas acudan
a la lista de correo
<tt class="email">&lt;
<a href="mailto:opensc-devel@opensc.org">
opensc-devel@opensc.org</a>&gt;</tt></p>
<p>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:
<a href="http://www.opensc.org/files/doc/openct.html"
target="_top">
http://www.opensc.org/files/doc/openct.html</a>. Una vez
instalado OpenCT, recompile OpenSC indicando la ubicación
de las bibliotecas OpenCT</p>
<table border="0" bgcolor="#E0E0E0">
<tr>
<td>
<pre class="screen">
$ cd opensc-&lt;version&gt;
$ ./configure --with-openct=/path/to/openct
</pre>
</td>
</tr>
</table>
<p></p>
<p>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.</p>
<p>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</p>
<p>El soporte CT-API en OpenSC no necesita párametros
especiales a la hora de recompilar. Léase el fichero de
configuración
<tt class="filename">opensc.conf</tt>para saber como
configurar el driver CT-API bajo OpenSC</p>
</div>
</div>
<div class="chapter" lang="es">
<div class="titlepage">
<div>
<div>
<h2 class="title">
<a id="opensc.install"></a>Capítulo 5. Compilación e
Instalación de libopensc</h2>
</div>
</div>
</div>
<div class="toc">
<p>
<b>Tabla de contenidos</b>
</p>
<dl>
<dt>
<span class="section">
<a href="#opensc.install.linux">Linux</a>
</span>
</dt>
<dt>
<span class="section">
<a href="#opensc.install.windows">Windows</a>
</span>
</dt>
<dt>
<span class="section">
<a href="#opensc.install.windowsopenssl">Windows
con soporte OpenSSL</a>
</span>
</dt>
</dl>
</div>
<div class="section" lang="es">
<div class="titlepage">
<div>
<div>
<h2 class="title" style="clear: both">
<a id="opensc.install.linux"></a>Linux</h2>
</div>
</div>
</div>
<p>Lea el fichero
<tt class="filename">INSTALL</tt>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</p>
</div>
<div class="section" lang="es">
<div class="titlepage">
<div>
<div>
<h2 class="title" style="clear: both">
<a id="opensc.install.windows"></a>Windows</h2>
</div>
</div>
</div>
<p>Ejecute "nmake -f makefile.mak" en el directorio
opensc para compilar</p>
<p>Además de nmake, deberá tener perl y flex instalados
para poder realizar la compilación</p>
<p>El fichero Makefile.mak no incorpora mecanismos para
"make install", por lo que deberá realizar la instalación
de manera manual</p>
<div class="procedure">
<ol type="1">
<li>Copiar opensc.conf al directorio Windows (
generalmente C:\WINDOWS o C:\WINNT). Esta operación
es opcional</li>
<li>Copiar opensc.dll y opensc-pkcs11.dll a una
ubicación dentro del path</li>
<li>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</li>
</ol>
</div>
</div>
<div class="section" lang="es">
<div class="titlepage">
<div>
<div>
<h2 class="title" style="clear: both">
<a id="opensc.install.windowsopenssl"></a>Windows
con soporte OpenSSL</h2>
</div>
</div>
</div>
<p>Esta opción añade funcionalidad extra (por ejemplo
PKCS#11 hash y mecanismos de firmas pkcs#11
adicionales</p>
<div class="procedure">
<ol type="1">
<li>Descargar y compilar los fuentes de OpenSSL de:
<a href="http://www.openssl.org/source/"
target="_top">http://www.openssl.org/source/</a></li>
<li>Añadir el directorio \inc32 al include_path, y el
\out32dll al library_path y exec_path
<table border="0" bgcolor="#E0E0E0">
<tr>
<td>
<pre class="screen">
set include=%include%;.....\inc32
set lib=%lib%;.....\out32dll
set path=%path%;....\out32dll
</pre>
</td>
</tr>
</table></li>
<li>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)</li>
<li>En el fichero src\libopensc\Makefile.mak, añadir
"libeay32.dll" y "gdi32.dll" a la línea marcada como
"link" (enlace)</li>
<li>Realizar la misma inclusión en el fichero
src\pkcs11\Makefile.mak en las entradas "link" de las
secciones "TARGET" y "TARGET3"</li>
<li>En el fichero win32\Make.rules.mak, añadir
/DHAVE_OPENSSL a la línea "COPTS"</li>
</ol>
</div>
<p>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</p>
</div>
</div>
<div class="chapter" lang="es">
<div class="titlepage">
<div>
<div>
<h2 class="title">
<a id="opensc.status"></a>Capítulo 6. Estado del
desarrollo</h2>
</div>
</div>
</div>
<div class="toc">
<p>
<b>Tabla de contenidos</b>
</p>
<dl>
<dt>
<span class="section">
<a href="#opensc.status.cards">Tarjetas</a>
</span>
</dt>
<dt>
<span class="section">
<a href="#opensc.status.windows">Windows</a>
</span>
</dt>
<dt>
<span class="section">
<a href="#opensc.status.pkcs11">Módulo PKCS #11 en
Netscape y Mozilla</a>
</span>
</dt>
</dl>
</div>
<div class="section" lang="es">
<div class="titlepage">
<div>
<div>
<h2 class="title" style="clear: both">
<a id="opensc.status.cards"></a>Tarjetas</h2>
</div>
</div>
</div>
<div class="variablelist">
<dl>
<dt>
<span class="term">CryptoFlex</span>
</dt>
<dd>
<p>Soporta firma/desencriptación e
inicialización</p>
</dd>
<dt>
<span class="term">Gemplus PK 4K, 8K, 16K</span>
</dt>
<dd>
<p>Soporta firma/desencriptación e
inicialización</p>
<p>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</p>
</dd>
<dt>
<span class="term">Aladdin eToken PRO</span>
</dt>
<dd>
<p>Soporta firma/desencriptación e
inicialización</p>
<p>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"</p>
</dd>
<dt>
<span class="term">Eutron CryptoIdendity
IT-SEC</span>
</dt>
<dd>
<p>Soporta firma/desencriptación e
inicialización</p>
<p>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"</p>
</dd>
<dt>
<span class="term">Micardo</span>
</dt>
<dd>
<p>Soportada ( TODO: incluir detalles )</p>
</dd>
<dt>
<span class="term">Miocos</span>
</dt>
<dd>
<p>Soportada ( TODO: incluir detalles )</p>
</dd>
<dt>
<span class="term">Setcos</span>
</dt>
<dd>
<p>Soportada ( TODO: incluir detalles )</p>
</dd>
<dt>
<span class="term">Tcos</span>
</dt>
<dd>
<p>Soportada ( TODO: incluir detalles )</p>
</dd>
</dl>
</div>
</div>
<div class="section" lang="es">
<div class="titlepage">
<div>
<div>
<h2 class="title" style="clear: both">
<a id="opensc.status.windows"></a>Windows</h2>
</div>
</div>
</div>
<p>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</p>
</div>
<div class="section" lang="es">
<div class="titlepage">
<div>
<div>
<h2 class="title" style="clear: both">
<a id="opensc.status.pkcs11"></a>Módulo PKCS #11 en
Netscape y Mozilla</h2>
</div>
</div>
</div>
<p>Netscape parece mostrar más información acerca de sus
módulos de seguridad que Mozilla. No obstante el soporte
no ha sido testeado</p>
<p>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</p>
<p>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</p>
<p>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</p>
</div>
</div>
<div class="chapter" lang="es">
<div class="titlepage">
<div>
<div>
<h2 class="title">
<a id="opensc.using"></a>Capítulo 7. Uso de
OpenSC</h2>
</div>
</div>
</div>
<div class="toc">
<p>
<b>Tabla de contenidos</b>
</p>
<dl>
<dt>
<span class="section">
<a href="#opensc.using.netscape">OpenSC y
Netscape</a>
</span>
</dt>
<dt>
<span class="section">
<a href="#opensc.using.mozilla">OpenSC y
Mozilla</a>
</span>
</dt>
<dt>
<span class="section">
<a href="#opensc.using.openssl">OpenSC y
OpenSSL</a>
</span>
</dt>
<dt>
<span class="section">
<a href="#opensc.using.openssh">OpenSC y
OpenSSH</a>
</span>
</dt>
<dt>
<span class="section">
<a href="#opensc.using.pam">Pluggable
Authentication Module</a>
</span>
</dt>
<dd>
<dl>
<dt>
<span class="section">
<a href="#opensc.using.pam.eid">eid based
authentication</a>
</span>
</dt>
<dt>
<span class="section">
<a href="#opensc.using.pam.ldap">Autenticación
basada en LDAP</a>
</span>
</dt>
</dl>
</dd>
</dl>
</div>
<div class="section" lang="es">
<div class="titlepage">
<div>
<div>
<h2 class="title" style="clear: both">
<a id="opensc.using.netscape"></a>OpenSC y
Netscape</h2>
</div>
</div>
</div>
<div class="procedure">
<ol type="1">
<li>Seleccionar: Communicator -&gt; Tools -&gt;
Security Info</li>
<li>Seleccionar: Cryptographic Modules</li>
<li>Pulsar: Add</li>
<li>Indicar nombre del módulo: "OpenSC PKCS #11
Module" Indicar ubicación del fichero:
/path/to/opensc/lib/pkcs11/opensc-pkcs11.so</li>
</ol>
</div>
<p>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"</p>
<p>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</p>
<p>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)</p>
<p>FIXME: Especificar versión de Netscape a la que se
aplican estas instrucciones</p>
</div>
<div class="section" lang="es">
<div class="titlepage">
<div>
<div>
<h2 class="title" style="clear: both">
<a id="opensc.using.mozilla"></a>OpenSC y
Mozilla</h2>
</div>
</div>
</div>
<div class="procedure">
<ol type="1">
<li>Asegurese que el Personal Security Manager (PSM)
está instalado (paquete mozilla-psm)</li>
<li>Seleccionar menú: Edit -&gt; Preferences</li>
<li>Seleccionar Categoría: Privacy &amp; Security
-&gt; Certificates</li>
<li>Pulsar en: "Manage Security Devices"</li>
<li>Seleccionar: Load</li>
<li>Indicar nombre del módulo: "OpenSC PKCS #11
Module" y ubicación del fichero:
/path/to/opensc/lib/pkcs11/opensc-pkcs11.so</li>
</ol>
</div>
</div>
<div class="section" lang="es">
<div class="titlepage">
<div>
<div>
<h2 class="title" style="clear: both">
<a id="opensc.using.openssl"></a>OpenSC y
OpenSSL</h2>
</div>
</div>
</div>
<p>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</p>
<p>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</p>
<p>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
<span>
<b class="command">openssl</b>
</span>:</p>
<p>Ejemplo de cómo cargar el "engine" OpenSC</p>
<table border="0" bgcolor="#E0E0E0">
<tr>
<td>
<pre class="screen">
aj@simulacron:~$ openssl
OpenSSL&gt; 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&gt;
</pre>
</td>
</tr>
</table>
<p></p>
<p>Un comando OpenSSL típico puede ser la recuperación de
un certificado:
<tt class="prompt">req -engine opensc -new -key
<i class="replaceable">
<tt>key</tt>
</i>-keyform engine -out req.pem -text</tt>. Consulte la
documentación de OpenSSL para detalles adicionales</p>
<p>-
<i class="replaceable">
<tt>key</tt>
</i>Especifica el identificador de una clave en
Hexadecimal. - por ejemplo "45" corresponde al la clave
con ID="0x45"</p>
<p>OpenSC incluye dos "engines" para OpenSSL:
<tt class="filename">engine_opensc.so</tt>y
<tt class="filename">engine_pkcs11.so</tt>.</p>
<p>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</p>
<p>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</p>
<p>Para cargar dicho "engine", ejecutar el comando:</p>
<table border="0" bgcolor="#E0E0E0">
<tr>
<td>
<pre class="screen">
aj@simulacron:~$ openssl
OpenSSL&gt; 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&gt;
</pre>
</td>
</tr>
</table>
<p>Y luego proceda normalmente</p>
<p>Un comando típico OpenSSL puede ser la recuperación de
un certificado:
<tt class="prompt">req -engine pkcs11 -new -key
<i class="replaceable">
<tt>key</tt>
</i>-keyform engine -out req.pem -text</tt>. Consulte la
documentación de OpenSSL para más detalles</p>
<p>
<i class="replaceable">
<tt>key</tt>
</i>tiene el formato
[slot_&lt;slotNr&gt;][-][id_&lt;keyID&gt;], donde</p>
<div class="itemizedlist">
<ul type="disc">
<li>El parámetro (opcional) slotNr indica el slot
PKCS#11 a usar (empezando por cero, que es el valor
por defecto</li>
<li>keyID es el identificador de clave en notación
hexadecimal</li>
</ul>
</div>
<p>Ejemplos:</p>
<div class="itemizedlist">
<ul type="disc">
<li>id_45 =&gt; clave privada con ID = 0x45 en el
primer slot disponible</li>
<li>slot_2-id_46 =&gt; clave privada con ID = 0x46 en
el tercer slot</li>
</ul>
</div>
<p></p>
<p>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"</p>
</div>
<div class="section" lang="es">
<div class="titlepage">
<div>
<div>
<h2 class="title" style="clear: both">
<a id="opensc.using.openssh"></a>OpenSC y
OpenSSH</h2>
</div>
</div>
</div>
<p>La versión 3.6.1p2 de OpenSSH necesita un parche para
compilar con soporte OpenSC. Encontrará dicho parche en
el directorio src/openssh</p>
<p>Para compilar OpenSSH, ejecute el comando "configure"
de la siguiente manera:
<tt class="prompt">./configure
--with-opensc=/path/to/opensc</tt></p>
<p>Necesitará tener certificados en su tarjeta: un par de
claves no es suficiente. Descargue el certificado en
formato OpenSSH con el comando:
<tt class="prompt">ssh-keygen -D
<i class="replaceable">
<tt>reader</tt>
</i>[
<span class="optional">:
<i class="replaceable">
<tt>certificate ID</tt>
</i></span>] &gt;
<i class="replaceable">
<tt>file</tt>
</i></tt></p>
<p>Reemplace
<i class="replaceable">
<tt>reader</tt>
</i>con el número del lector que desea ( por defecto 0).
El comando
<tt class="prompt">opensc-tool -l</tt>le proporcionará la
lista de lectores disponibles. Añada el identificador del
certificado en caso necesario ( por defecto ID=45 ). El
comando
<tt class="prompt">pkcs11-tool -O</tt>le indica la lista
de certificados y sus identificadores</p>
<p>Una vez realizada la extracción del certificado,
copielo al servidor e incluyalo en el fichero
<tt class="filename">~/.ssh/authorized_keys</tt>tal y
como se hace habitualmente</p>
<p>Para usar una tarjeta con OpenSSH, ejecute:
<tt class="prompt">ssh -I
<i class="replaceable">
<tt>reader</tt>
</i>[
<span class="optional">:
<i class="replaceable">
<tt>certificate ID</tt>
</i></span>]</tt></p>
<p>Del mismo modo se puede usar la utilidad ssh-agent con
OpenSC. para ello use el comando:
<tt class="prompt">ssh-add -s
<i class="replaceable">
<tt>reader</tt>
</i></tt></p>
</div>
<div class="section" lang="es">
<div class="titlepage">
<div>
<div>
<h2 class="title" style="clear: both">
<a id="opensc.using.pam"></a>Pluggable
Authentication Module</h2>
</div>
</div>
</div>
<p>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"</p>
<p>pam_opensc identifica las siguientes opciones:</p>
<div class="variablelist">
<dl>
<dt>
<span class="term">debug</span>
</dt>
<dd>registra información para depuración</dd>
<dt>
<span class="term">audit</span>
</dt>
<dd>registra información sobre trazas</dd>
<dt>
<span class="term">use_first_pass</span>
</dt>
<dd>No solicita contraseñas al usuario, sino que
utiliza los elementos definidos en la configuración
de los módulos PAM</dd>
<dt>
<span class="term">try_first_pass</span>
</dt>
<dd>No solicita contraseña, a menos que la opción
PAM_(OLD)AUTHOK esté especificada</dd>
<dt>
<span class="term">use_authtok</span>
</dt>
<dd>Exige la opción PAM_AUTHOK, fallando en caso
contrario</dd>
<dt>
<span class="term">set_pass</span>
</dt>
<dd>Ajusta las opciones PAM_ con las contraseñas
usadas en éste módulo</dd>
<dt>
<span class="term">nodelay</span>
</dt>
<dd>Elimina el retardo de un segundo en caso de
autenticación fallida</dd>
<dt>
<span class="term">auth_method=X</span>
</dt>
<dd>Selecciona entre pkcs15-ldap o pkcs15-eid (opción
por defecto) como modo de funcionamiento del
módulo</dd>
</dl>
</div>
<p></p>
<p>Opciones Genéricas:</p>
<div class="variablelist">
<dl>
<dt>
<span class="term">-h</span>
</dt>
<dd>muestra ayuda</dd>
<dt>
<span class="term">-r reader</span>
</dt>
<dd>Nombre del lector (FIXME: not number?)</dd>
</dl>
</div>
<p></p>
<div class="section" lang="es">
<div class="titlepage">
<div>
<div>
<h3 class="title">
<a id="opensc.using.pam.eid"></a>eid based
authentication</h3>
</div>
</div>
</div>
<p>Este es el método de autentificación por defecto:
Cree un directorio
<tt class="filename">.eid</tt>en su directorio raíz y
copie su certificado (en formato PEM) en el fichero
<tt class="filename">
.eid/authorized_certificates</tt>.</p>
<p>Nota:
<tt class="prompt">pkcs15-tool -c</tt>le mostrará los
certificados y sus identificadores. El comando
<tt class="prompt">pkcs15-tool -r ID -o
~/.eid/authorized_certificates</tt>le permitirá
recuperar y guardar el certificado en el fichero
deseado</p>
</div>
<div class="section" lang="es">
<div class="titlepage">
<div>
<div>
<h3 class="title">
<a id="opensc.using.pam.ldap"></a>Autenticación
basada en LDAP</h3>
</div>
</div>
</div>
<p>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:</p>
<div class="variablelist">
<dl>
<dt>
<span class="term">-L ldap.conf</span>
</dt>
<dd>especifica el fichero de configuración a
usar</dd>
<dt>
<span class="term">-A entry</span>
</dt>
<dd>Añadir nueva entrada</dd>
<dt>
<span class="term">-E entry</span>
</dt>
<dd>Activar entrada actual</dd>
<dt>
<span class="term">-H hostname</span>
</dt>
<dd>Nombre del servidor LDAP</dd>
<dt>
<span class="term">-P port</span>
</dt>
<dd>Puerto en el que el servidor está
escuchando</dd>
<dt>
<span class="term">-S scope</span>
</dt>
<dd>Ambito (scope) del servidor</dd>
<dt>
<span class="term">-b binddn</span>
</dt>
<dd>binddn de la conexión</dd>
<dt>
<span class="term">-p passwd</span>
</dt>
<dd>contraseña del binding LDAP</dd>
<dt>
<span class="term">-B base</span>
</dt>
<dd>base del binding LDAP</dd>
<dt>
<span class="term">-a attributes</span>
</dt>
<dd>Atributos a recuperar</dd>
<dt>
<span class="term">-f filter</span>
</dt>
<dd>filtro de búsqueda</dd>
</dl>
</div>
<p>FIXME: incluir un ejemplo de estructura de datos
LDAP: fichero de configuración, etc</p>
</div>
</div>
</div>
<div class="chapter" lang="es">
<div class="titlepage">
<div>
<div>
<h2 class="title">
<a id="opensc.pkcs11"></a>Capítulo 8. The OpenSC PKCS
#11 library</h2>
</div>
</div>
</div>
<div class="toc">
<p>
<b>Tabla de contenidos</b>
</p>
<dl>
<dt>
<span class="section">
<a href="#opensc.pkcs11.whatis">Qué es PKCS #11</a>
</span>
</dt>
<dt>
<span class="section">
<a href="#opensc.pkcs11.slots">Slots Virtuales</a>
</span>
</dt>
</dl>
</div>
<div class="section" lang="es">
<div class="titlepage">
<div>
<div>
<h2 class="title" style="clear: both">
<a id="opensc.pkcs11.whatis"></a>Qué es PKCS
#11</h2>
</div>
</div>
</div>
<p>
<a href="http://www.rsasecurity.com/rsalabs/pkcs/pkcs-11/"
target="_top">PKCS #11</a>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(), ...</p>
<p>Algo de terminología básica de PKCS #11</p>
<div class="itemizedlist">
<ul type="disc">
<li>Slot: ubicación en la que se puede insertar una
tarjeta inteligente. Normalmente se corresponde con
un lector de tarjetas ( ver "slots virtual" )</li>
<li>Token: elemento que se sitúa en un slot.
Habitualmente se refiere a una SmartCard (ver slots
virtual)</li>
<li>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
)</li>
<li>Sesión: antes de poder operar con un token, es
necesario abrir una sesión y asociarla con él</li>
<li>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</li>
</ul>
</div>
<p></p>
</div>
<div class="section" lang="es">
<div class="titlepage">
<div>
<div>
<h2 class="title" style="clear: both">
<a id="opensc.pkcs11.slots"></a>Slots
Virtuales</h2>
</div>
</div>
</div>
<p>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
<a href="http://www.rsasecurity.com/rsalabs/pkcs/pkcs-11/"
target="_top">estándard PKCS #11</a>. 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</p>
<p>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</p>
<p>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</p>
<p>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:</p>
<div class="itemizedlist">
<ul type="disc">
<li>token en slot 4: PIN 1, key 1, cert 1</li>
<li>token en slot 5: PIN 2, key 2, cert 2</li>
<li>token en slot 6: los 3 certificados raíz</li>
<li>token en slot 7: vacío</li>
</ul>
</div>
<p>Si se hubiera especificado "hide_empty_tokens=false",
el slot 7 no contendría ningún token</p>
<p>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 )</p>
<p>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</p>
</div>
</div>
<div class="chapter" lang="es">
<div class="titlepage">
<div>
<div>
<h2 class="title">
<a id="security"></a>Capítulo 9. Seguridad</h2>
</div>
</div>
</div>
<div class="toc">
<p>
<b>Tabla de contenidos</b>
</p>
<dl>
<dt>
<span class="section">
<a href="#sec_cmd_line">Ordenes desde línea de
Comandos</a>
</span>
</dt>
<dt>
<span class="section">
<a href="#sec_card_access">Acceso a la card</a>
</span>
</dt>
<dt>
<span class="section">
<a href="#sec_p15_init">Protegiendo tarjetas con la
utilidad pkcs15-init</a>
</span>
</dt>
<dt>
<span class="section">
<a href="#sec_files">Protección de los ficheros de
configuración, profiles, y caché</a>
</span>
</dt>
<dt>
<span class="section">
<a href="#sec_root">Acceso como administrador
(root)</a>
</span>
</dt>
</dl>
</div>
<div class="section" lang="es">
<div class="titlepage">
<div>
<div>
<h2 class="title" style="clear: both">
<a id="sec_cmd_line"></a>Ordenes desde línea de
Comandos</h2>
</div>
</div>
</div>
<p>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"</p>
<p>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"</p>
</div>
<div class="section" lang="es">
<div class="titlepage">
<div>
<div>
<h2 class="title" style="clear: both">
<a id="sec_card_access"></a>Acceso a la card</h2>
</div>
</div>
</div>
<p>Pueden aparecer otros problemas en entornos
multiusuario donde más de un usuario tenga acceso al
lector:</p>
<div class="itemizedlist">
<ul type="disc">
<li>Si el usuario deja la tarjeta insertada con la
sesion abierta, otro usuario podría modificar el pin,
bloquearlo, o incluso anular la tarjeta</li>
<li>Si la sesión realiza caché de PIN's o claves,
otro usuario podría usar nuestra tarjeta y suplantar
nuestra personalidad</li>
</ul>
</div>
<p></p>
<p>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</p>
<p>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</p>
<p>Las otras aplicaciones OpenSC no garantizan el acceso
exclusivo</p>
</div>
<div class="section" lang="es">
<div class="titlepage">
<div>
<div>
<h2 class="title" style="clear: both">
<a id="sec_p15_init"></a>Protegiendo tarjetas con
la utilidad pkcs15-init</h2>
</div>
</div>
</div>
<p>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</p>
<p>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</p>
<p>No obstante, con dicha clave, otro usuario podría
destruír el sistema de ficheros, borrando todo su
contenido</p>
<p>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</p>
</div>
<div class="section" lang="es">
<div class="titlepage">
<div>
<div>
<h2 class="title" style="clear: both">
<a id="sec_files"></a>Protección de los ficheros de
configuración, profiles, y caché</h2>
</div>
</div>
</div>
<p>Aunque por sí mismos, los ficheros opensc.conf y
xxx.profile no contienen información sensible, es muy
importante garantizar que no son modificados</p>
<p>Algunos ejemplos de lo que se puede hacer modificando
dichos ficheros:</p>
<div class="itemizedlist">
<ul type="disc">
<li>Ajustar el nivel de depuración a un nivel mayor o
igual a 6, con lo que la información sensible (PINs)
queda registrada</li>
<li>Cambiar los permisos de acceso del sistema de
ficheros, con lo que la tarjeta quedaría
"abierta"</li>
<li>Cambiar los certificados en el directorio
caché</li>
</ul>
</div>
<p></p>
<p>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</p>
</div>
<div class="section" lang="es">
<div class="titlepage">
<div>
<div>
<h2 class="title" style="clear: both">
<a id="sec_root"></a>Acceso como administrador
(root)</h2>
</div>
</div>
</div>
<p>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</p>
</div>
</div>
<div class="chapter" lang="es">
<div class="titlepage">
<div>
<div>
<h2 class="title">
<a id="opensc.todo"></a>Capítulo 10. Tareas
pendientes de desarrollo</h2>
</div>
</div>
</div>
<div class="toc">
<p>
<b>Tabla de contenidos</b>
</p>
<dl>
<dt>
<span class="section">
<a href="#opensc.todo.general">General</a>
</span>
</dt>
<dt>
<span class="section">
<a href="#opensc.todo.windows">Windows</a>
</span>
</dt>
</dl>
</div>
<div class="section" lang="es">
<div class="titlepage">
<div>
<div>
<h2 class="title" style="clear: both">
<a id="opensc.todo.general"></a>General</h2>
</div>
</div>
</div>
<table border="0" bgcolor="#E0E0E0">
<tr>
<td>
<pre class="screen">
* Generación de paquetes Debian
* Aplicaciones gráficas
* Soporte de tarjetas EMV, GSM y JavaCards ( algún voluntario? )
</pre>
</td>
</tr>
</table>
<table border="0" bgcolor="#E0E0E0">
<tr>
<td>
<pre class="screen">
* 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
</pre>
</td>
</tr>
</table>
</div>
<div class="section" lang="es">
<div class="titlepage">
<div>
<div>
<h2 class="title" style="clear: both">
<a id="opensc.todo.windows"></a>Windows</h2>
</div>
</div>
</div>
<p>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</p>
</div>
</div>
<div class="chapter" lang="es">
<div class="titlepage">
<div>
<div>
<h2 class="title">
<a id="opensc.help"></a>Capítulo 11. Resolución de
problemas</h2>
</div>
</div>
</div>
<p>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
<a href="http://www.opensc.org/" target="_top">sitio
Web</a>.</p>
<p>Se pueden seguir los siguientes procedimientos para
comprobar qué es lo que falla:</p>
<div class="itemizedlist">
<ul type="disc">
<li>Comprobar que se encuentra el lector
<tt class="prompt">opensc-tool -l</tt></li>
<li>Comprobar que se reconoce la tarjeta:
<tt class="prompt">opensc-tool -a</tt>debería mostrar
el ATR de ésta</li>
<li>Comprobar que la tarjeta soporta el estandard
pkcs15, obteniendo la lista de objetos almacenados:
<tt class="prompt">pkcs15-tool -C -c -k
--list-public-keys</tt></li>
</ul>
</div>
<p></p>
<p>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</p>
</div>
<div class="chapter" lang="es">
<div class="titlepage">
<div>
<div>
<h2 class="title">
<a id="opensc.links"></a>Capítulo 12. Recursos y
enlaces</h2>
</div>
</div>
</div>
<p>La página web del proyecto OpenSC
<a href="http://www.opensc.org/" target="_top">
http://www.opensc.org/</a></p>
<p>Información sobre los proyectos Assuan y Ägypten:
<a href="http://www.gnupg.org/aegypten/" target="_top">
http://www.gnupg.org/aegypten/</a></p>
</div>
<div class="chapter" lang="es">
<div class="titlepage">
<div>
<div>
<h2 class="title">
<a id="opensc.signer"></a>Capítulo 13. Modulo de
firmado</h2>
</div>
</div>
</div>
<div class="toc">
<p>
<b>Tabla de contenidos</b>
</p>
<dl>
<dt>
<span class="section">
<a href="#opensc.signer.install">Compilando e
instalando el Módulo signer</a>
</span>
</dt>
</dl>
</div>
<p>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 )</p>
<div class="section" lang="es">
<div class="titlepage">
<div>
<div>
<h2 class="title" style="clear: both">
<a id="opensc.signer.install"></a>Compilando e
instalando el Módulo signer</h2>
</div>
</div>
</div>
<p>Especifique el directorio de instalación para el
módulo al ejecutar "configure":
<tt class="prompt">$ configure --with-plugin-dir=
<i class="replaceable">
<tt>&lt;directory&gt;</tt>
</i></tt></p>
<p>Directorios típicos son /usr/lib/mozilla/plugins y
/usr/lib/netscape/plugins.</p>
<p>Consulte el fichero INSTALL para instrucciones
adicionales</p>
<p>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</p>
</div>
</div>
<div class="chapter" lang="es">
<div class="titlepage">
<div>
<div>
<h2 class="title">
<a id="opensc.docbook"></a>Capítulo 14. Notas sobre
DocBook</h2>
</div>
</div>
</div>
<p>Este documento está realizado y mantenido con DocBook
XML. A continuación se indican algunos enlaces de
introducción</p>
<p>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</p>
<p>El enlace
<a href="http://docbook.sourceforge.net/" target="_top">
DocBook Open Repository project</a>en SourceForge, contiene
las hojas de estilo necesarias para convertir este
documentos a otros formatos</p>
<p>El libro
<a href="http://www.docbook.org/" target="_top">DocBook:
The Definitive Guide (O'Reilly Book)</a>ilustra DocBook, es
muy manejable, y puede ser utilizado como herramienta en
línea de manera gratuita</p>
<p>El libro
<a href="http://www.sagehill.net/docbookxsl/"
target="_top">DocBook XSL: The Complete Guide</a>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</p>
<p>Este documento es demasiado engorroso. Si sabe HTML, por
favor ayúdenos a mejorarlo. Algunas partes deberían ser
ajustadas mediante hotas de estilo (
<a href="http://docbook.sourceforge.net/release/xsl/current/doc/html/"
target="_top">Reference for the HTML stylesheet
parameters</a>), pero la mayor parte puede ser hecha con
CSS. !Ayúdanos!</p>
</div>
</div>
</body>
</html>