¿Cómo usar varias tarjetas inteligentes con gnupg?

6

Tengo dos tarjetas inteligentes: SCard1 y SCard2. Las mismas claves se almacenan en ambos.

Una de las funciones que más utilizo es la autenticación SSH para acceder a múltiples servidores. Pero no puedo usar el segundo después de haber usado el primero ambas tarjetas inteligentes ( no simultáneamente) en la misma computadora.

Se muestra el siguiente mensaje:

  

Retire la tarjeta actual e inserte la que tiene el número de serie
  [una ID larga que contiene el número de identificación SCard1]

Pasos para reproducir el problema

Preparemos un ambiente limpio.

$ export GNUPGHOME=/tmp/gnupg
$ mkdir /tmp/gnupg && chmod go-rwx /tmp/gnupg
$ curl [public key URL] | gpg --import
gpg: keybox '/tmp/gnupg/pubring.kbx' created
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  6194  100  6194    0     0   2408      0  0:00:02  0:00:02 --:--:--  2408
gpg: /tmp/gnupg/trustdb.gpg: trustdb created
gpg: key 3D5DDE26A0B55831: public key imported
gpg: Total number processed: 1
gpg:               imported: 1

Con SCard1 conectado

Luego inserto mi SCard 1.

$ ls /tmp/gnupg/private-keys-v1.d/
$ gpg --card-status
Reader ...........: Yubico Yubikey 4 OTP U2F CCID 00 00
Application ID ...: [SCard1 identification number]
blahblah
ssb>  rsa2048/467299D324A21B24  created: 2017-01-10  expires: 2018-01-10
                                card-no: [SCard1 identification number]
ssb>  rsa2048/11771A79F4B85B41  created: 2017-01-10  expires: 2018-01-10
                                card-no: [SCard1 identification number]
ssb>  rsa2048/F31D41149A84B062  created: 2017-01-10  expires: 2018-01-10
                                card-no: [SCard1 identification number]

La última clave se utiliza para la autenticación.

$ ls /tmp/gnupg/private-keys-v1.d/
somehash1.key somehash2.key somehash.3.key

Supongo que esos hashes provienen de las claves que he almacenado en mi tarjeta inteligente.

$ gpg -K
/tmp/gnupg/pubring.kbx
sec#  rsa4096 2017-01-10 [SC] [expires: 2019-01-10]
      [primary key ]
ssb>  rsa2048 2017-01-10 [S] [expires: 2018-01-10]
ssb>  rsa2048 2017-01-10 [E] [expires: 2018-01-10]
ssb>  rsa2048 2017-01-10 [A] [expires: 2018-01-10]
$ ssh example.com hostname
*** asked to enter pin
example.com

Todo funciona como se espera.

Con SCard2 conectado

Desconectemos SCard1 y enchufemos SCard2.

$ ssh example.com hostname

Y se muestra el siguiente mensaje:

  

Retire la tarjeta actual e inserte la que tiene el número de serie
  [una ID larga que contiene el número de identificación SCard1]

Tenga en cuenta que obtengo el mismo resultado cuando inserto el primer SCard2 y luego el SCard1.

Parte de una solución

Algunas búsquedas en Internet me hicieron entender que los "apéndices clave" se almacenan en ~/.gnupg/private-keys-v1.d/ . Eliminar todo el directorio solucionó el problema. Tal vez solo eliminar uno de los .key haría el truco.

La pregunta

¿Es posible usar ambas claves sin eliminar ningún archivo?

    
pregunta Morgan Courbet 16.07.2017 - 18:06
fuente

3 respuestas

1

GnuPG almacena el número de serie de la tarjeta que contiene la clave en el talón de la clave, y solo puede configurar una tarjeta por clave .

Para la misma clave, solo tiene un código auxiliar de clave, por lo que eliminar "uno de ellos" no ayudará. La única cosa que podría tener suerte es utilizar UDEV para recibir notificaciones de las tarjetas inteligentes que están conectadas, y cambiar o volver a escribir los apéndices de las teclas para que apunten a la tarjeta inteligente provista.

    
respondido por el Jens Erat 16.07.2017 - 21:50
fuente
0

De la pregunta no queda claro en qué usas tu tarjeta inteligente habilitada para yubikeys excepto para SSH. Pero recomendaría saltarse gnupg todos juntos y utilizar el soporte PKCS11 directamente en OpenSSH. Esto usará una biblioteca pkcs11 y hablará directamente con la tarjeta.

Si haces otras cosas que requieren gnupg, puedes ignorar esta respuesta de manera segura.

    
respondido por el Peter 16.07.2017 - 22:47
fuente
0

Todavía no he probado mis Yubikeys (primario y de respaldo) con SSH, pero me encontré con un problema similar simplemente configurando mi respaldo para usar con gpg. Seguí las instrucciones de Simon Josefsson para crear y cargar las subclaves en la tarjeta.

enlace

En mi primer intento, simplemente intenté mover una copia del mismo conjunto de tres subclaves a ambas tarjetas de la misma manera en que uno duplicaría los secretos de TOTP en el dispositivo de respaldo. Después de mover las subclaves a la primera tarjeta, restauré la carpeta .gnupg desde la copia de seguridad y repetí la operación de keytocard para cargar las mismas tres claves en el dispositivo de copia de seguridad.

Ese enfoque falló. Cuando posteriormente ejecutaría "gpg --card-status" para generar los apéndices en la máquina en línea, solo vería los apéndices generados para el primer YubiKey insertado. gpg no generará dos stubs para la misma clave para apuntar a dos dispositivos diferentes. Al realizar cualquier operación gpg con la clave de respaldo insertada, se me indicó que la eliminara e insertara la clave principal.

Lo que parece ser una solución simple es crear un segundo conjunto de subclaves (seis subclaves en total) para cargar en el dispositivo de respaldo. Con esa configuración, 'gpg --edit-key' muestra las 6 subclaves asignadas a su dispositivo apropiado, y las funciones gpg funcionan correctamente con cualquiera de las YubiKey insertadas sin indicaciones adicionales para cambiar las teclas.

    
respondido por el Daniel Hallmark 19.10.2017 - 09:45
fuente

Lea otras preguntas en las etiquetas