Ho creato un set di chiavi PGP che comprende quanto segue:
- Una chiave RSA master con funzionalità di firma, memorizzata offline.
- Più schede OpenPGP, ciascuna con tre chiavi RSA:
- Una chiave di crittografia
- Un tasto di firma
- Una chiave di autenticazione per SSH
- Più schede OpenPGP, ciascuna con tre chiavi RSA:
Il mio ragionamento alla base di questo modo è che se una singola scheda hardware viene rubata, posso revocare tutti i suoi certificati in un modo che non "danneggia" la mia infrastruttura rimanente. (Tranne, ovviamente, che ora ho bisogno di ricodificare i miei dati crittografati per escludere questa chiave e che ho bisogno di ricreare firme di lunga durata con una sottochiave firma diversa, ma queste cose non danneggiano la mia identità: sono solo davvero scomodo.)
Certo, più chiavi di crittografia non sono l'idea migliore, ma sono particolarmente interessato alla crittografia e alla decrittografia di file di backup e non di e-mail. Non sono sicuro che ci sia un modo per un utente di posta elettronica di avere le proprie e-mail crittografate su tutte e tre le chiavi di crittografia contemporaneamente, ma non è la fine del mondo (anche se davvero scomodo) se è crittografato solo su una chiave di crittografia.
Il problema che sto affrontando attualmente riguarda il tentativo di configurare un avvio LUKS con un file di chiavi crittografato GPG. La mia attuale configurazione funziona, ma consente solo la decodifica con una delle carte. I miei portachiavi pubblici e segreti sembrano buoni, il portachiavi segreto contiene stub per tutte le smart card. Se provo a decifrare con un'altra delle carte, soffoca e fallisce, spingendomi a inserire la carta "giusta".
Il mio file chiave è crittografato in questo modo:
gpg --output /keyfile.gpg --encrypt --recipient $MASTER_KEY_ID \
--encrypt-to $ENC_SUBKEY_1! --encrypt-to $ENC_SUBKEY_2! \
--encrypt-to $ENC_SUBKEY_3!
Nota come sto usando !
per forzare la crittografia specifica di queste sottochiavi. All'avvio con cryptsetup, vedo il seguente messaggio se ho una scheda diversa inserita:
gpg: error reading application data
gpg: decryption failed: secret key not available
cryptsetup: cryptsetup failed, bad password or options?
Se utilizzo la scheda contenente $ENC_SUBKEY_1
, la decrittografia funziona e il sistema operativo si avvia.
Il mio script chiave è abbastanza vicino a quello fornito da 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
Se eseguo lo stesso tipo di crittografia su un file nel mio sistema operativo in esecuzione, otterrò un risultato interessante quando provo a decifrare con una chiave diversa dalla prima passata come --encrypt-to
:
Please remove the current card and insert the one with serial number:
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Hit return when ready or enter 'c' to cancel
Se premo c fino a due volte, alla fine "trova" la chiave giusta e decrittografa il file. Presumibilmente perché è in modalità --batch
all'avvio, non verrà richiesto e invece fallirà.
C'è un modo per aggirare questo problema? C'è un modo in cui posso dire a GPG di continuare a provare fino a quando niente funziona affatto? vale a dire: la chiave per la carta 1 può decifrare; carta 1 non presente; la chiave per la carta 2 può decifrare; carta non presente; la chiave per la scheda 3 può decifrare; carta presente; decifrare.