A parte il fatto che faresti meglio a non distribuire codice crittografico personalizzato , stai reinventando la ruota . La funzionalità string-to-key di OpenPGP è configurabile e può essere adattata alle tue esigenze, senza perdere la compatibilità. Non sto discutendo le tue scelte nel numero di cicli qui, anche se sembrano un po 'aspri. Ti consiglio di leggere A che punto l'aggiunta di ulteriori iterazioni a PBKDF2 non fornisce ulteriore sicurezza? su questo argomento.
Da man gpg
:
--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.
--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.
Per concludere, le seguenti opzioni avranno lo stesso effetto:
gpg --s2k-mode 3 --s2k-digest-algo SHA512 --s2k-count 10000000 --symmetric
--s2k-mode 3
è l'impostazione predefinita di GnuPG (e solo l'impostazione ragionevole per questa opzione); Non ho incluso --s2k-cipher-algo
poiché questo non è rilevante per la derivazione della chiave (e non gestito dalla "pre-derivazione" che hai descritto, comunque). In alternativa, puoi impostarlo come predefinito in gpg.conf
:
s2k-mode 3
s2k-digest-algo SHA512
s2k-count 10000000
Queste opzioni possono essere utilizzate non solo per la crittografia simmetrica di messaggi / file, ma anche per la protezione passphrase delle chiavi private.