¿Cómo utilizo tarjetas inteligentes para autenticación en Ubuntu?

Tras vencer abrumadoramente en las elecciones de 1946, Juan Perón expone frente al Consejo Superior del Partido Justicialista las necesidades electorales futuras, y explica cómo emplear las tarjetas inteligentes SmartCard en Ubuntu.

¡Trabajadores!

¡Una oligarquía sin Patria ni Bandera, encaramada en un ataque contumaz, osó por insultar a la República, sometiendo a los descamisados a un oprobio sin parangón en la historia!

Sin embargo, somos gratificados testigos de la Unión del Pueblo, en donde una sola clase de hombres, los que trabajan, dan todo en pos de la Comunidad. Esto nos ha hecho torcer el brazo a nuestro enemigo, pero no podemos sostener todo en declamaciones, sino que ha de cimentarse en organizaciones de toda índole que permitan consolidar los logros y trazar los objetivos que anhelamos.

Como Conductor, no puedo más que regocijarme frente a la mancomunidad de los hombres buenos de nuestra Nación. Los trabajadores, que forman la masa, no son otra cosa que la Columna Vertebral de nuestro Movimiento. Día a día son más numerosos quienes se afilian al instrumento político que hemos dado en crear, el Partido Peronista: las banderas de Justicia Social que hemos enarbolados son señeras del sendero que hemos de recorrer todos los Argentinos. Bajo su alegre flamear es que encontrsaremos el destino que la providencia nos depara.
Indudablemente que este partido ha de contar con un registro certificado y alegre, consumado en forma de una Tarjeta Inteligente y personal expedida en forma de Carnet a cada uno de nuestro millones de afiliados encolumnados. En este caso el Justicialismo ha hecho vanguardia, pues se trata de una tarjeta inteligente PIV capaz de soportar el estándar FIPS-201.

Estas tarjetas plásticas contienen datos digitales codificados en un chip accesible por radiofrecuencias. Naturalmente, que pueden comprarse vírgenes y los proveedores de servicios PIV como nuestro Partido es el encargado de cargar las credenciales digitales requeridas.

Lamentablemente, de momento el instrumental libre OpenSC de Ubuntu es capaz de operar con tarjetas en modo "solo lectura", por lo que para almacenar los certificados en ellas ha de recurrirse a otra metodología indeseable. Por ejemplo, podríamos utilizar herramental privativo para Linux, o bien utilizar un emulador o máquina virtual con un deleznable Window$. No cubriré tales sistemas de grabación aquí, será suficiente decir tales enjundios almacenarán en la tarjeta un Certificado (CA), un par de Claves Públicas, y un Número de Identificación Personal PIN de Usuario y otro PIN de Administrador.

En este caso utilizaré una tarjeta inteligente PIVKey C910 que emula el Carnet de Afiliado Peronista. Esta tarjeta PIVKey C910 contiene un chip RFID y es compatible con la norma FIPS201, y implementa la interfaz de comandos estandarizadas NIST Sp 800-73 part 3.

¿Qué sucede si - por necesidad de un sistema de tales características -  debemos acceder a un sistema remoto o local con GNU con Linux con nuestra tarjeta inteligente de Afiliado?
Ya contamos con nuestra tarjeta inteligente de afiliado peronista

Pues bien, en el caso habremos de preparar un sistema Ubuntu con tal alternado criptográfico, si es posible. Os lo explicaré de forma Justicialista. Como primer medida, hemos de preparar nuestro sistema, y podremos hacerlo desde la Terminal. Para ello abrimos una con Ctrl+Alt+T e ingresamos:

sudo apt install libccid pcsc-tools opensc opensc-pkcs11 libpam-pkcs11

Estas librerías son escenciales para operar criptográficamente y leer las tarjetas, así como para ofrecerenos diferentes condimientaciones de trabajo, entre ellas inicios de sesión mediante las SmartCards, elevación de privilegios sólo a través de la SmartCard, etcétera.

Una vez descargada la paquetería, habremos de configurar el lector de tarjetas inteligentes. En mi caso utilizaré un lector USB de Smart Cards "Identiv SCR3310v2.0 USB Smart Card Reader", al cual Linux reconoce bajo el nombre de "SCM Microsystems SCR3310".
Sin colocar tarjeta aún, conectamos el lector de tarjetas en un puerto USB, y nos aseguramos que nuestro sistema lo reconozca. Para ello en la terminal ingresamos:

opensc-tool --list-readers

...a lo cual nuestro sistema debería analizar el lector de tarjetas inteligentes y si el mismo funciona correctamente, devolvernos algo como:

# Detected readers (pcsc)
Nr.    Card    Features    Name
0    No        SCM Microsystems Inc. SCR 3310 [CCID Interface] (53311646706297) 00 00

Pues bien señores, como tenemos un solo lector de tarjetas, recibe el número 0. Acto seguido, insertamos la tarjeta en el lector, y revisamos que la misma sea reconocida, con el siguiente comando:

opensc-tool --reader 0 --name

...y el sistema nos devolverá el nombre de la tarjeta (recordemos que ha sido creada anteriormente), por ejemplo, podría decir:

PIV-II Peronist Card
Configuración de la pila de autenticación PAM
El módulo pam-plcs11 que hemos instalado le permite a Ubuntu emplear certificaciones digitales tipo X.509 para autenticar nuestros inicios de sesión. Para ello el módulo hará uso de la librería abierta opensc-pkcs11 a fin de acceder a la tarjeta inteligente y a su vez recibir las credenciales necesarias.

El proceso de inicio de sesión con pam_pkcs11 es el siguiente:

    Ingresamos nuestro login o inicio de sesión
    Ingresamos el PIN.
    Validamos el Certificado.
    Asignamos el Certificado a un Usuario.
    Verificamos que la sesión y el usuario coincidan.

Para hacer realidad efectiva este tren de operaciones criptográficas, como Conductores del sistema habremos de asegurarnos de:

    Configurar el módulo pam_pkcs11
    Agregar el/los Certificados y CRL(s) en los directorios necesarios
    Configurar la pila PAM para que haga uso del módulo pam_pkcs11
    Agregar el Nombre Común (CN) para el Inicio de Sesión

En primer lugar crearemos el fichero de configuración necesario, con el siguiente bloque de comandos de organización:

cd /etc/pam_pkcs11 ;
sudo cp /usr/share/doc/libpam-pkcs11/examples /pam_pkcs11.conf.example.gz . ;
sudo gunzip pam_pkcs11.conf.example.gz ;
sudo cp pam_pkcs11.conf.example pam_pkcs11.conf

Dentro de este fichero de configuración /etc/pam_pkcs11/pam_pks11.conf habremos de revisar las opciones "module", "cert_pòlicy" contenidas en la cadena "pkcs11_module opensc {}". Debemos asegurarnos que la opción "module" contenga la ruta absoluta hacia la librería open-pkcs11.so instalada en nuestro sistema. Asimismo, la opción "cert_policy" debe incluir a la cadena "oscp" como una de sus políticas de verificación de certificados.

Por ejemplo,para hacer esto igreesamos en Ubuntu de 64 bits:

sudo nano /etc/pam_pkcs11/pam_pks11.conf

Esto abriá el editor peronista GNU Nano con el contenido del archivo pam_pks11.conf. Ingresamos Ctrl+w para buscar la cadena "pkcs11_module opensc {}". La modificamos para que incluye la configuración que os he nombrado, a fin de que figure de la siguiente manera:

use_pkcs11_module = opensc;
module = /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so;
cert_policy = ca,signature,oscp_on;

Una vez completado este cambio en el editor, presionamos nuevamente Ctrl+w para busca ahora la cadena "use_mappers", y la modificamos para que quede así:

use_mappers = pwent;

También encontraremos dentro de este archivo las cadenas ca_dir y crl_dir, que son las quie definen los directorios o carpetas donde deseamos almacenar los ficheros que de las Autoridades de Certificación ("CA") y las Listas de Revocacion de Certificado "CRL" respectivamente. Por ejemplo, podríamos usar los directorios siguientes:

ca_dir=/etc/pam_pkcs11/cacerts
crl_dir=/etc/pam_pkcs11/crls

Guardamos con Ctrl+o y salimos con Ctrl+x.

Ahora bien, el módulo pam_pkcs11 necesita conocer las Autoridades de Certificación (CAs) a fin de ser capaz de validar el certificado que estará contenido en la tarjeta. De forma opcional también podrá utilizar Listas de Revocación de Certificación (CRL) que son opcionales, pero también pueden usarse para validar el Certificado. En este caso, utilizaré el servicio del sitio web http://ca.pivkey.com.

Agregamos cualquier CAs y CRLs requeridas en los directorios que habíamos especificados en las cadenas ca_dir y crl_dir del fichero de configuración pam_pkcs11.conf. En este caso los revisaremos con:

ls /etc/pam_pkcs11/cacerts

...y el sistema podría devolvernos los archivos que le cargamos:

PIVKeyDeviceCertificateAuthority.crt MenganoSARootCA.crt

ls /etc/pam_pkcs11/crls

pivkeydeviceca.crl menganorootca.crl

Ahora crearemos los enlaces hash usando el programa pkcs11_make_hash_link. Por ejemplo, podríamos ingresar en la terminal:

cd /etc/pam_pkcs11/cacerts
sudo pkcs11_make_hash_link

...y al listar el contenido con del directorio cacerts con:

ls

...el sistema nos devolvería algo como:

c90bef04.0 PIVKeyDeviceCertificateAuthority.crt
e7d4c577.0 MenganoSARootCA.crt

Lo mismo hacemos con el directorio crls:

cd /etc/pam_pkcs11/crls
sudo pkcs11_make_hash_link

...y al listar con:

ls

...el sistema nos devolvería:

c90bef04.r0 e7d4c577.r0 pivkeydeviceca.crl menganorootca.crl


Configurar la pila PAM de Autenticación

El siguiente paso es integrar el módulo pam_pkcs11 a la pila PAM (la encargada del conformar el sistema de autenticación cifrada). Existen varias formas de hacerlo, y la configuración dependerá de la política de seguridad que tengamos como Conductor del sistema. Os mostraré unos ejemplos de integración basada en una política permisiva "de Unidad Básica" y otra política astringente "de Comando Táctico Justicialista".

Loguearse en Escritorio gráfico con GDM3 de Ubuntu usando tarjeta inteligente
En la pila PAM tradicional, se utiliza el método de inicio de sesión con contraseña, lo cual es sencillo y relativamente inseguro. En este ejemplo "para unidad básica", podríamos integrar el uso del módulo pam_pkcs11 a la pila PAM con el objetivo directo de utilizar la tarjetas inteligentes a fin de loguearnos durante el Inicio de Sesión gráfico GDM3 de Ubuntu.

Para ello editamos el fichero de configuración del mismo gdm-password e incluimos el módulo.

Por ejemplo, ingresamos:

sudo nano /etc/pam.d/gdm-password

E incluiremos el módulo pam_pkcs11 a la pila PAM de autenticación del sistema, agregando el siguiente contenido:

## Agregado peronista de módulo al stack PAM
## para logueo con tarjeta inteligente
auth    requisite   pam_nologin.so
auth    required    pam_succeed_if.so user != root quiet_success
auth    sufficient    pam_pkcs11.so
@include common-auth
auth    optional    @include common-account
...


Iniciar sesión con Tarjeta Inteligente en Ubuntu Server (únicamente loguearse)

El módulo pam_pkcs11 puede integrarse a la pila PAM de autenticación si deseqamos usar la tajeta inteligente únicamente para el inicio de sesión en el servidor, y no para el resto de las acciones. Para ello debemos editar el archivo login e incluir el módulo pam_pkcs11. Lo haremos ingresando:

sudo nano /etc/pam.d/login

...se abirá GNU Nano con el fichero login, al cual le incluimos el siguiente contenido:

## Agregado peronista para loguearse al servidor
## con tarjeta inteligente
# usar soporte pkcs11
auth    sufficient    pam_pkcs11.so
## Fuerza un retraso mínimo en caso de falla (dado en milisegundos).
## Reemplaza la configuración FAIL_DELAY del archivo login.defs).
## Tenga presente que otros módulos podrían requerir un retraso mínimo
## distinto (por ejemplo, para desactivar la existencia de retrasos,
## debería agregar la opción nodelay al archivo pam_unix).
auth    optional    pam_faildelay.so delay=3000000

## Da salida a un fichero de situación /etc/issue antes de cada
## solicitud de inicio de sesión (reemplaza la opción ISSUE_FILE
## del fichero de configuración login.defs). Descomente si lo
## quiere usar.
# auth    required    pam_issue.so issue=/etc/issue
...
...

Una vez pegado este contenido, guardamos los cambios con en el archivo con Ctrl+o y salimos del editor con Ctrl+x.

Al especificar "sufficient" en la línea de control, ta,bién podríamo loguearnos usando el siguiente caso de PAM (normalmente contraseña) si no tuviésemos la tarjeta inteligente encima o si la misma no funcionase. Por este motivo, la tarjeta opera únicamente como comodidad.

Como os he dicho, esto permitirá un acceso "de Unidad Básica" a la sesión gráfica, asumiendo una seguridad laxa ya que la tarjeta inteligente ha sido emitida supuestamente por una autoridad controlada.
Usar tarjeta inteligente en Ubuntu Server para autenticación general
Otra política de seguridad digna del Comando Táctico del Justicialismo podría requerir insertar la tarjeta de afiliado para dar inicio de sesión en el servidor y a su vez para cualquier otro servicio que utilice autenticación PAM. Muchos servicios PAM localizados en el directorio /etc/pam.d/ hacen uso del fichero common-auth. En esta política particular podríamos incluir al módulo pam_pkcs11 en este fichero a fin de activar la autenticación por tarjeta para todos los servicios que incluyan el uso de autenticación general.

Lo haríamos ingresando en la terminal:

sudo nano /etc/pam.d/common.auth

Y al abrirse el editor, en este caso incluiríamos el siguiente contenido:

## Solicita el inicio de sesión con tarjeta inteligente
## con el módulo pkcs11
auth    [success=1 default=ignore]    pam_pkcs11.so
## A continuacińo plan B de retorno, por si el módulo gorilea
## y no tiene éxito
auth    requisite    pam_deny.so
## Ceba la pila PAM con un valor de retorno positivo en caso de
## no haber recibido uno ya; esto permite evitar que devuelva un error
## sólo porque ningún otro módulo devolvió código de éxito,
## en el caso que los módulos que figuraban previamente en la pila PAM
## hubiesen quedado como gorilas idiotas colgados de las palmeras.
auth    required    pam_permit.so
## Y hete aquí más módulos por paquetes (el bloque "adicional")
auth    optional    pam_cap.so
# final de la configuración de pam-auth-update.

La configuración anterior del sistema de autenticación obligará a realizar la autenticación sólo con la tarjeta inteligente. Si el usuario no puede autenticarse con la tarjeta, entonces el inicio de sesión entero fracasará. Todos los servicios PAM incluidos en el directorio /etc/pam.d incluidos en common-auth requerirán también la autenticación por tarjeta. ¡Atención! Una configuración global como esta requere que su y sudo también se autentiquen usando la tarjeta magnética.

Agrtegar la CN
Ahora que pam_pkcs11 y la pila PAM han sido configuradas para el inicio de sesión con tarjeta inteligente siguiendo la política de seguridad que hemos anhelado, existirá una acción más que tomar requerida para el uso completo y final. El mapeador pwent requiere la CN en el certificado que esté indicado en la línea gecos del usuario del archivo /etc/passwd. La CN debe ser estraída desde el certificado contenido en la tarjeta magnética.

Para ello seguimos los siguientes pasos:

Primero, obtenemos el identificador ID del certificado contenido en el chip de la tarjeta inteligente. Esto lo haremos mediante el comando:

pkcs15-tool --list-certificates

...y nuestro sistema nos devolverá:

Using reader with a card: SCM Microsystems Inc. SCR 3310 [CCID Interface]
(53311646706297) 00 00
X.509 Certificate [Certificate for Card Authentication]
Object Flags: [0x0]
Authority: no
Path:
ID: 04
Encoded serial : 02 0A 5877782D0001000013BF

En este caso inventado, como vemos, el ID es "04".

Segundo, utilizamos este ID como llave para leer la información del certificado de la tarjeta y la guardamos en un fichero local en la carpeta temporal del sistema. Lo hacemos con el siguiente comando de organización:

pkcs15-tool --read-certificate 04 > /tmp/sc-cert.crt

...el sistema devuelve:

Using reader with a card: SCM Microsystems Inc. SCR 3310 [CCID Interface]
(53311646706297) 00 00

También podríamos presentar en pantalla el enigmático contenido en ASCII del certificado (que como vemos, es imposible de recordar para un ser humano normal y corriente):

cat /tmp/sc-cert.crt

-----BEGIN CERTIFICATE-----
MIIEkjCCA3qgAwIBAgIKWHd4LQABAAATvzANBgkqhkiG9w0BAQsFADBbMRMwEQYK
CZImiZPyLGQBGRYDYGoRiLaS2dE9MiErDaPyLGQBGRYGcGl2a2V5MSwwKgYDVQQD
EyNQSVZLZXkgRViVaPeRoNCaRaJoZmljYXRlIEF1dGhvcml0eTAeFw0xNjEyMDYw
MDE4MTJaFw0yODEyMDMwMDE4MTJaMDIxMDAuBgNVBAMTJ1BJVktleSBCQTM2NkRG
RTM3MjJDNzQ0OU-VDOTA2QjkyNzRDOEJBQzCCASIwDQYJKoZIhvcNAQEBBQADggE
...
...
-----END CERTIFICATE-----

En tercer lugar utilizamos el programa openssl para extraer la CN desde el fichero temporal almacenado que acabamos de crear.

openssl x509 -noout -subject -in /tmp/sc-cert.crt

...y entonces nuestro sistema devolvería algo como:

subject=CN = PIVKey BA3V6IDVFA37P2E7R4O9N96B9274C8BAC

En este caso la CN es "PIVKey BA3V6IDVFA37P2E7R4O9N96B9274C8BAC". Sabiendo esto, editamos el archivo /etc/passwd para agregarle esta CN al campo gecos del usuario al cual pertenece el certificado.

Supongamos que este certificado pertenece al nombre de usuario mengano en el fichero /etc/passwd. En este caso ingresamos:

sudo nano /etc/passwd

Esto abrirá el editor con el archivo de contraseñas. Debemos buscar la línea de mengano y editarla para que tenga la siguiente forma:

mengano:x:1001:1001:PIVKey BA3V6IDVFA37P2E7R4O9N96B9274C8BAC:/home/mengano:/bin/bash

Una vez que modifiquemos, guardemos con Ctrl+o y salgamos con Ctrl+x, nuestro sistema operativo estará ahora lilsto y preparado para hacer un logueo con tarjeta magnética para el usuario mengano.

Inicio de Sesión SSH usando tarjeta inteligente
Uno de los métodos contemplados en el protocolo Shecure Shell (SSH) es la autenticación con par de clave privada y pública. Una copia de la claves pública del usuario queda almacenada en el servidor SSH como referencia, y se la considerará "autorizada". Quien posea la clave privada podrá entonces loguearse a través de SSH al servidor.

Las credenciales PIV incluyen un certificado y un par de claves que pueden ser utilizadas para el acceder mediante SSH. La clave pública deberá ser extraída de la tarjeta inteligente y copiada en el servidor SSH. Para ello debemos conectar el lector de tarjetas al cliente SSH (o sea, nuestra terminal local). En ese momento el cliente SSH usará la librería opensc-pksc11 para acceder a la tarjeta que insertamos, y ralizará culaquiera de las operaciones de autenticación criptográfica que le requiramos. Por lo tanto, no es necesario exponer la clave privada.
Configurar el Inicio de Sesión Secure Shell con Tarjeta Magnética
Tanto el servidor SSH como nuestro cliente SSH deberán ser configurados para permitir el uso de autenticación por tarjeta magnética.

Configurar el servidor SSH
El servidor SSH necesitará permitir autenticación de clave pública a través de su fichero de configuración, y además necesitará la clave pública del usuario.

Para permitir la autentificación de clave publica, ingresamos:

sudo nano /etc/ssh/sshd_config

En un archivo estándar de Ubuntu 18.04, la opción PubkeyAuthentication está comentada y por lo tanto, desactivada. Sin embargo, la opción por defecto está establecida con el valor "yes" ("si"). La descomentaremos borrando el "#", de modo que quede así:

PubkeyAuthentication yes

Acto seguido, guardamos con Ctrl+o y salimos con Ctrl+x, y reiniciamos el demonio del servidor SSH con el siguiente comando de organización:

sudo systemctl restart sshd

Copiar la clave pública de un usuario al servidor
Debemos extraer la clave pública del usuario desde la tarjeta para el cliente SSH. Para ello usamos el programa ssh-keygen para que lea la clave pública contenido en la tarjeta y lo convierta a un formato legible para utilizar con Secure Shell:

ssh-keygen -D /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so > tarjeta.pub

Naturalmente, podríamos presentar en pantalla el contenido del sertificado público tarjeta.pub con el comando cat, de la siguiente forma:

cat tarjeta.pub

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCuFupFpsXwFPz2INdEgr64tn6yQKT7Osj
cXoAzgJ7JW/qykPxIZxELpJkoHe45s/fiIhkWjgHWhxCWRNSM76wyc2j47egfRdkzl0Kj7U1k-
kpOmGIFU8GA9nxVVikVrAmrI+PzEfRdOmNhPaVqnXUcOJVQh4fe1H5S1mtzV5VzJxKg/61IrBSM-
I5JnWDKNr1dGLIqMqw7A55YMvesKurOUrRe3BBIWYhN9XHIrWVFtMBHmQtW8iphmXUqQLHeH-
Q7LKpvCvE4i5QttlRSITD1Tqefwdeflh6I1P7LAsnMDp42zHZ23O4Ewd7aqNogikox6aNcCGYkU-
PavMBWcge5ykgR

Acto seguido, copiamos esta clave pública al sistema criptográfico del servidor SSH:

ssh-copy-id -f -i tarjeta.pub ubuntu@servidor

El servidor nos solicitará entonces la contraseña y copiará el certificado tarjeta.pub dentro de la carpeta necesaria:

/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: “tarjeta.pub”
ubuntu@servidor’s password:

Number of key(s) added: 1

Ahora podremos intentar iniciar sesión remotamente a través de SSH en la máquina servidor, en el caso del ejemplo con

ssh ubuntu@servidor

...y comprobamos que sólo la clave que deseamos haya sido agregada y surta efecto. Debemos estar seguros pues una vez configurado todo no podremos acceder si no tenemos la tarjeta correcta y con un funcionamiento adecuado.

Configurar el cliente SSH para tarjeta inteligente
Continuando ahora desde el lado del cliente SSH, necesitaremos identificar nuestro librería proveedora PKCS#11. Existen tres formas de hacer esto:

La más incómoda es hacerlo directamente antes de conectarnos con el servidor SSH desde la línea de comandos, (con lo cual podremos hacerlo desde cualquier computadora). Por ejemplo, con:

ssh -I /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so ubuntu@servidor

Esto permite especificar el uso de tarjeta toda vez que ingresamos este largo comando, y en el resto de las ocasiones no se usará el acceso por tarjeta inteligente.

Ahora bien, si deseamos implementar que nuestro cliente de conexión SSH use tarjeta inteligente, debemos configurar el archivo ssh_config. Ingresamos:

sudo nano /etc/ssh/ssh_config

...y nos aseguramos que la opción PKCS11Provider quede de la siguiente manera:

PKCS11Provider /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so

...y guardamos con Ctrl+o y salimos con Ctrl+x.

Esto forzará a todos los usuarios del sistema a utilizar tarjetas magnéticas para usar SSH desde este cliente.
Configurar el uso de tarjeta inteligente para un Usuario
Para usar la opción de tarjeta inteligente para un sólo usuario del sistema cliente, deberíamos agregar la opción anterior en el fichero ~/.ssh/config de cada usuario. Para ello se usaría:

nano /home/usuario/.ssh/conf

En este fichero, modificamos la línea correspondiente en el archivoi, agregándole el ya conocido:

PKCS11Provider /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so

Y guardando con Ctrl+o y saliendo de Nano con Ctrl+x, como en el caso anterior.

De esta manera, sólo usuario tendría que utilizar la tarjeta inteligente en el lector para iniciar sesión a través de SSH a un servidor remoto.

En resúmen, las tarjetas inteligentes son convenientes en el sentido que permiten un almacenamiento de información de identidad a prueba de agresiones. Pueden utilizarse para autenticar el acceso a sistemas computados, redes de datos, información subscripta y privilegios. Ubuntu puede configurarse en tal sentido utilizando módulos PAM ya disponibles y utilidades libres para dar soporte a los logueos con tarjetas magnéticas.