Múltiples subclaves de cifrado en tarjetas inteligentes de hardware

7

He creado un conjunto de claves PGP que consta de lo siguiente:

  • Una clave maestra RSA con solo capacidades de firma, almacenada fuera de línea.
    • Múltiples tarjetas OpenPGP, cada una con tres claves RSA:
      1. Una clave de cifrado
      2. Una clave de firma
      3. Una clave de autenticación para SSH

Mi razonamiento detrás de hacerlo de esta manera es que si una tarjeta de hardware se roba, puedo revocar todos sus certificados de una manera que no "dañe" mi infraestructura restante. (Excepto, por supuesto, que ahora necesito volver a cifrar mis datos cifrados para excluir esta clave y que debo recrear firmas de larga duración con una subclave de firma diferente, pero estas cosas no dañan mi identidad: son Simplemente realmente inconveniente.)

Por supuesto, las claves de cifrado múltiples no son la mejor idea, pero estoy particularmente preocupado por cifrar y descifrar los archivos de copia de seguridad y no tanto los correos electrónicos. No estoy seguro si hay una manera para que un usuario de correo electrónico tenga sus correos electrónicos cifrados a las tres claves de cifrado a la vez, pero no es el fin del mundo (aunque es realmente inconveniente) si solo está cifrado a una clave de cifrado.

El problema al que me enfrento actualmente implica tratar de configurar un arranque LUKS con un archivo de clave cifrado GPG. Mi configuración actual funciona, pero solo permite descifrar con una de las tarjetas. Mis llaveros públicos y secretos se ven bien, el llavero secreto contiene talones de todas las tarjetas inteligentes. Si intento descifrar con otra de las tarjetas, se ahoga y falla, y me pide que inserte la tarjeta "correcta".

Mi archivo de clave está cifrado de esta manera:

gpg --output /keyfile.gpg --encrypt --recipient $MASTER_KEY_ID \
    --encrypt-to $ENC_SUBKEY_1! --encrypt-to $ENC_SUBKEY_2! \
    --encrypt-to $ENC_SUBKEY_3!

Observe cómo estoy usando ! para forzarlo a cifrar específicamente para estas subclaves. Al iniciar con cryptsetup, veo el siguiente mensaje si tengo una tarjeta diferente insertada:

gpg: error reading application data
gpg: decryption failed: secret key not available
cryptsetup: cryptsetup failed, bad password or options?

Si uso la tarjeta que contiene $ENC_SUBKEY_1 , el descifrado funciona y el sistema operativo se inicia.

Mi script de claves es bastante similar al que proporciona cryptsetup:

if ! /lib/cryptsetup/askpass "Enter passphrase for key $1: " \
    /usr/bin/gpg -q --batch --no-random-seed-file --homedir /lib/cryptsetup/gpg \
        --ignore-valid-from --ignore-time-conflict --passphrase-fd 0 --decrypt $1; then
    return 1
fi

return 0

Si hago el mismo tipo de cifrado en un archivo en mi sistema operativo en ejecución, obtendré una salida interesante cuando intente descifrar con una clave diferente a la primera pasada como --encrypt-to :

Please remove the current card and insert the one with serial number:
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Hit return when ready or enter 'c' to cancel

Si presiono c hasta dos veces, eventualmente "encontrará" la clave correcta y descifrará el archivo. Presumiblemente, debido a que está en modo --batch en el inicio, no lo indicará y en su lugar solo fallará.

¿Hay alguna manera de evitar este problema? ¿Hay alguna manera de que le diga a GPG que siga intentando hasta que nada funcione? es decir: la clave para la tarjeta 1 puede descifrar; tarjeta 1 no presente; Clave para tarjeta 2 puede descifrar; tarjeta no presente; La clave para la tarjeta 3 puede descifrar; tarjeta presente descifrar.

    
pregunta Naftuli Kay 08.06.2015 - 07:39
fuente

1 respuesta

2

El problema es que las claves de "código auxiliar" para las tres tarjetas se almacenan en tu computadora, y GnuPG está probando todas.

Lamentablemente, no conozco una opción para definir una subclave de descifrado fija, hojeando la página de manual de GnuPG tampoco reveló ninguna.

Por lo que veo, la única opción que tendrías sería eliminar todas las subclaves de cifrado, excepto la actualmente utilizada, del llavero, y cambiar los llaveros si es necesario. Tenga en cuenta que antes de GnuPG 2.1, fusionar subclaves es una molestia, así que asegúrese de mantener un llavero que contenga todas las subclaves.

    
respondido por el Jens Erat 08.06.2015 - 11:54
fuente

Lea otras preguntas en las etiquetas