¿Hay alguna forma de decirle a GPG que, si necesita descifrar algo, puede encontrar la clave de cifrado privada en una de las dos tarjetas inteligentes?
Mi configuración (simplificada) es la siguiente:
- Se generó una clave maestra sin conexión con una subclave de cifrado.
- Transfirió la subclave de cifrado a Yubikey 1.
- En Yubikey 1, se generaron las subclaves auth y sign.
- Transfirió la subclave de cifrado a Yubikey 2.
- En Yubikey 2, se generan las subclaves de autenticación y firma.
Así que me quedo con:
gpg2 --list-keys
/Users/scott/.gnupg/pubring.gpg
-------------------------------
pub 3072R/600955C7 2016-09-09
uid [ultimate] Scott Cariss
uid [ultimate] Scott Cariss (msn.com)
uid [ultimate] Scott Cariss (bigfish.co.uk)
uid [ultimate] [jpeg image of size 12378]
sub 2048R/6FE6415F 2016-09-09
sub 2048R/D6DBBCAC 2016-09-09
sub 2048R/01A208C9 2016-09-09
sub 2048R/8D2A1368 2016-10-23
sub 2048R/65B08C5B 2016-10-23
Mi subclave de cifrado se comparte entre las tarjetas inteligentes y tiene claves de autenticación y firma individuales en cada tarjeta inteligente.
Pero cuando descifro algo, siempre va a la primera tarjeta inteligente y no encuentra la clave de cifrado en la otra tarjeta inteligente. La entrada gpg-agent / pin solo me pedirá que inserte la tarjeta inteligente correcta.
ACTUALIZACIÓN (Solución alternativa)
Como ya se ha respondido, no es algo que GPG admita, pero he encontrado una solución que funciona para mí.
En Mac OS XI use enlace para detectar la llegada de una de mis tarjetas inteligentes (yubikeys) y hacer que ejecute un script :
#!/bin/bash
{
killall -9 ssh-agent gpg-agent
for keystub in $(/usr/local/MacGPG2/bin/gpg2 --with-keygrip --list-secret-keys {{EMAIL ADDRESS}} | grep Keygrip | awk '{print $3}'); do rm /Users/{{USERNAME}}/.gnupg/private-keys-v1.d/$keystub.key; done;
/usr/local/MacGPG2/bin/gpg2 --card-status
eval $(/usr/local/MacGPG2/bin/gpgconf --launch gpg-agent)
ssh-add -l
} &> /Users/{{USERNAME}}/bin/gpg-card-change-log.txt
exit 0
Como todas las claves secretas se mantienen fuera de línea, no hay ningún problema en eliminarlas y luego ejecutar --card-status
, lo que trae los apéndices de la clave secreta de la tarjeta inteligente actualmente conectada.