Come utilizzare più smart card con gnupg?

6

Ho due smart card: SCard1 e SCard2. Le stesse chiavi sono memorizzate su entrambi.

Una delle funzionalità che uso di più è l'autenticazione SSH per accedere a più server. Ma non posso usare il secondo dopo aver usato il primo entrambe le smart card ( not contemporaneamente) sullo stesso computer.

Viene visualizzato il seguente messaggio:

Please remove the current card and insert the one with serial number
[a long ID containing the SCard1 identification number]

Passaggi per riprodurre il problema

Prepariamo un ambiente pulito.

$ 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 collegato

Quindi inserisco il mio 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]

L'ultima chiave è utilizzata per l'autenticazione.

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

Suppongo che quegli hash provengano dai tasti che ho memorizzato sulla mia smart card.

$ 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

Tutto funziona come previsto.

Con SCard2 collegato

Scolleghiamo SCard1 e colleghiamo SCard2.

$ ssh example.com hostname

E viene visualizzato il seguente messaggio:

Please remove the current card and insert the one with serial number
[a long ID containing the SCard1 identification number]

Nota che ho ottenuto lo stesso risultato quando inserisco prima SCard2 e poi SCard1.

Parte di una soluzione

Alcune ricerche su Internet mi hanno fatto capire che gli "stub delle chiavi" sono memorizzati in ~/.gnupg/private-keys-v1.d/ . L'eliminazione dell'intera directory ha risolto il problema. Forse l'eliminazione di uno dei .key sarebbe il trucco.

La domanda

È possibile utilizzare entrambe le chiavi senza eliminare alcun file?

    
posta Morgan Courbet 16.07.2017 - 18:06
fonte

3 risposte

1

GnuPG memorizza il numero seriale della carta contenente la chiave nello stub della chiave, e puoi impostare solo una carta per chiave .

Per la stessa chiave, hai solo uno stub chiave - quindi eliminare "uno di loro" non sarà di aiuto. L'unica cosa che potresti avere fortuna è usare UDEV per ricevere la notifica delle smart card collegate e cambiare o riscrivere gli stub delle chiavi per puntare alla smart card fornita.

    
risposta data 16.07.2017 - 21:50
fonte
0

Non è chiaro dalla domanda su cosa usi la tua smart card per yubikeys eccetto SSH. Ma vorrei raccomandare di saltare gnupg tutti insieme e utilizzare il supporto PKCS11 direttamente in OpenSSH. Questo userà una libreria pkcs11 e parlerà direttamente con la carta.

Se fai altre cose che richiedono gnupg puoi tranquillamente ignorare questa risposta.

    
risposta data 16.07.2017 - 22:47
fonte
0

Non ho ancora testato i miei Yubikeys (primari e backup) con SSH, ma mi sono imbattuto in un problema simile semplicemente impostando il mio backup per l'uso con gpg. Ho seguito le istruzioni di Simon Josefsson per creare e caricare le sottochiavi sulla scheda.

link

Al mio primo tentativo, ho semplicemente provato a spostare una copia dello stesso set di tre sottochiavi su entrambe le schede nello stesso modo in cui si duplicavano i segreti TOTP sul dispositivo di backup. Dopo aver spostato le sottochiavi sulla prima scheda, ho ripristinato la cartella .gnupg dal backup e ripetuto l'operazione keytocard per caricare le stesse tre chiavi sul dispositivo di backup.

Questo approccio fallì. Quando successivamente eseguirò "gpg --card-status" per generare gli stub sulla macchina online, vedrei solo gli stub generati per il primo YubiKey inserito. gpg non genererà due stub per la stessa chiave per puntare a due dispositivi diversi. Dopo aver eseguito un'operazione gpg con la chiave di backup inserita, mi è stato chiesto di rimuoverla e inserire la chiave primaria.

Ciò che sembra essere una soluzione semplice è creare un secondo set di sottochiavi (sei sottochiavi in totale) da caricare sul dispositivo di backup. Con questa configurazione, "gpg --edit-key" mostra le 6 sottochiavi assegnate al dispositivo appropriato e le funzioni gpg funzionano correttamente con YubiKey inserito senza ulteriori prompt per cambiare le chiavi.

    
risposta data 19.10.2017 - 09:45
fonte

Leggi altre domande sui tag