Voy a explicar el uso principal que se le puede dar a una tarjeta como esta:
http://shop.kernelconcepts.de/product_info.php?cPath=1_26&products_id=42&language=en
Se recomienda usar gpg2, ya que con gpg solo podríamos almacenar claves de hasta 1024 bits, por lo que es conveniente añadir un alias, en .bashrc mismo
alias gpg='gpg2'
En mi caso (debian jessie) tuve que quitar del inicio el agente de contraseñas gpg, que parece que crea conflictos, e instalar unos cuantos paquetes:
$ gnome-session-properties
$ sudo aptitude install scdaemon pcscd pcsc-tools gpgsm
Test de la tarjeta
Comprueba que el lector de tarjetas funciona correctamente, con la tarjeta introducida:
$ gpg --card-status
Es una buena idea empezar cambiando los pines que la tarjeta lleva por defecto. El pin es 123456 y el admin pin 12345678. Para cambiarlo:
$ gpg --change-pin
Cambiar los datos del propietario
$ gpg --card-edit
gpg/card> admin
gpg/card> help
gpg/card> name
gpg/card> lang
gpg/card> sex
gpg/card> url
Crear keys!
$ gpg --gen-key
Recomendable DSA / RSA y un mínimo de 2048 bits. Poned también validez de la clave, 5 o 10 años. Seguidamente pedirá nombre completo, y un correo electrónico. En el comentario yo recomendaría dejarlo vacío. Es necesario realmente poner ahí algo? Luego habrá que hacer el moñas con el ordenador para brindarle a gpg entropía suficiente para que pueda generar un nivel de aleatoriedad decente en la clave privada.
Cuando termine, habrá salido, entre otras cosas algo como:
pub 2048R/A983C78DD 2014-04-20
Es el ID de la clave generada. Anótate este ID y reemplázalo con los ejemplos siguientes
Generando subkeys que luego almacenaremos en la tarjeta:
$ gpg --edit-key A983C78DD
crearemos tres claves, una para cifrar, otra para firmar y otra para autenticación
> addkey
Elegid RSA para firmar 2048 bits mínimo y una caducidad prudente. Te pedirá la contraseña que le pusiste a la clave maestra. Repite la operación, cambiando únicamente a RSA para cifrar.
Para autenticación, hay que salir de gpg y volver a entrar con el comando –expert
$ gpg --expert --edit-key A983C78DD
> addkey
Fijaos que ahora aparecen más opciones para crear subclaves. Elegiremos (8) A continuación hay que elegir la capacidad de autenticación (y solo autenticación, por lo que hay que eliminar las otras opciones de cifrado y firma) Para ello seleccionamos las siguientes opciones (F, C, A) Salimos, elegimos caducidad, y listo.
Salvar claves en un lugar seguro
Los ficheros a salvar son \~/.gnupg/secring.gpg y \~/.gnupg/pubring.gpg Copialos a un lugar seguro, a ser posible offline. Por ejemplo, almacénalos en un pendrive con una partición cifrada ~~con truecrypt~~ y guárdalo.
Mover subclaves a la tarjeta
$ gpg --edit-key A983C78DD
> toggle
Iremos eligiendo la clave una a una y la iremos pasando a la tarjeta
> key 2
> keytocard
Para pasar a la siguiente hay que deseleccionar la anterior
Nos cargamos la key principal de cifrado que se ha creado junto a la clave maestra y que no nos va a hacer falta:
> key 1pub
> delkey
Ahora, para dejar las keys, pero solo los fragmentos y no las claves completas, que estarán en la smartcard, hay que hacer los siguientes pasos
Exportar las subkeys
$ gpg --export-secret-subkeys A983C78DD > sub.keyring
Eliminar la clave maestra
$ gpg --delete-secret-keys A983C78DD
Ahora no tenemos nada, así que vamos a importar los stubs de las subclaves privadas, y las claves públicas
$ gpg --import < sub.secring
$ gpg --import < .gnupg/pubring.gpg.backup
Ya está todo montado. Ahora ya podemos eliminar los backups de las claves que hemos hecho inicialmente. Double check que tienes copia de seguridad antes de borrarlo!
$ rm .gnupg/pubring.gpg.backup
$ rm .gnupg/secring.gpg.backup
Distribuir las claves
En .gnupg/gpg.conf
keyserver pgp.rediris.es
$ gpg --send-keys A983C78DD
Si quieres adjuntar la clave pública a la firma de tu correo, o subirlo a tu web para que los demás puedan importarla:
$ gpg --armor --export A983C78DD > publickey.asc
Usar gpg en otro PC
Debemos tener igualmente un lector de smartcards, para poder dar uso a las claves privadas que están almacenadas en la gpgcard.
$ gpg --card-edit
>fetch
Se descargara la clave pública desde la URL que has configurado en la tarjeta
Y esto es todo! La smartcard nos puede servir para un montón de cosas más, como autenticación SSH por clave pública, integración con PAM (y que incluso se bloquee la sesión quitando la tarjeta del lector), LVM, truecrypt, keepass, etcetcetc. Trastearé la manera de hacerlo y lo contaré por aquí, para que, como siempre, lo tenga almacenado a modo de chuleta y si os sirve de algo, me quedo satisfecho.
Saludos! o/