Fase 1: derivazione chiave simmetrica
Innanzitutto, la passphrase viene utilizzata per derivare una chiave per la crittografia simmetrica utilizzando una funzione da stringa a chiave . In GnuPG si possono regolare diverse impostazioni, come l'algoritmo di hashing e il numero di ripetizioni. Dal manuale di GnuPG :
--s2k-digest-algo name
Use name as the digest algorithm used to mangle the passphrases for
symmetric encryption. The default is SHA-1.
--s2k-mode n
Selects how passphrases for symmetric encryption are mangled. If n is
0 a plain passphrase (which is in general not recommended) will be
used, a 1 adds a salt (which should not be used) to the passphrase and
a 3 (the default) iterates the whole process a number of times (see
--s2k-count
).
--s2k-count n
Specify how many times the passphrases mangling for symmetric
encryption is repeated. This value may range between 1024 and 65011712
inclusive. The default is inquired from gpg-agent. Note that not all
values in the 1024-65011712 range are legal and if an illegal value is
selected, GnuPG will round up to the nearest legal value. This option
is only meaningful if --s2k-mode
is set to the default of 3.
Fase 2: crittografia simmetrica
Usando questa chiave simmetrica, la chiave privata viene crittografata simmetricamente. Anche l'algoritmo di crittografia può essere scelto, mentre AES-128 è l'impostazione predefinita in GnuPG.
--s2k-cipher-algo name
Use name as the cipher algorithm for symmetric encryption with a
passphrase if --personal-cipher-preferences
and --cipher-algo
are
not given. The default is AES-128.
Le cifre supportate possono essere visualizzate eseguendo gpg --version
, ad esempio:
$ gpg --version
[...]
Cipher: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH,
CAMELLIA128, CAMELLIA192, CAMELLIA256
A differenza degli algoritmi a chiave pubblica-privata (dove GnuPG 2.1 ha aggiunto le curve ellittiche), gli algoritmi simmetrici supportati sono gli stessi tra tutte le versioni in qualche modo attuali di GnuPG.
Tutte queste opzioni possono anche essere impostate in ~/.gnupg/gpg.conf
, dove vengono annotate senza il prefisso --
.