L'impostazione predefinita oggi è metà della raccomandazione minima di 20 anni fa . *
L'algoritmo specifico di rafforzamento della chiave utilizzato è S2K salato e iterato , che combina la password di input e il sale e lo ripete numerose volte, tagliando la concatenazione. Il valore di conteggio effettivo che si sta utilizzando è il numero di byte per continuare l'hashing, quindi il valore più alto ha hash solo circa 65 MB di dati. Il valore predefinito di 65536 è in effetti piuttosto basso. Ogni blocco hash SHA-256 ha una dimensione di 64 byte e PBKDF2 utilizza la costruzione HMAC che chiama SHA-256 due volte per ogni iterazione (elaborando 128 byte), quindi la forza predefinita è equivalente a solo 512 invocazioni della funzione hash! Ovviamente qualsiasi KDF che usa poche iterazioni di hash non sarà particolarmente sicuro. Il valore massimo di 65011712 equivale a più di 500.000 iterazioni di hash, che è meglio.
Il problema non è solo che il valore sia troppo basso, ma che non sia hard-memory. Ciò significa che è molto facile parallelizzare in modo massivo i tentativi di cracking senza incorrere in limiti di memoria. Questo è lo stesso problema che ha PBKDF2. Un'alternativa appropriata sarebbe una funzione di memoria come Argon2 , ma GnuPG non lo supporta. Sfortunatamente è limitato a S2K. Devi usare una password più strong.
* Sto confrontando PBKDF2 e S2K. La raccomandazione minima delle iterazioni PBKDF2 era 1k nel 2000. Se ogni iterazione è equivalente a due SHA a 64 byte -256 hash, quindi possiamo considerare il conteggio S2K diviso per 128 per essere approssimativamente uguale a una singola iterazione di PBKDF2. Come tale, 65536/128 = 512, circa la metà della raccomandazione del 2000.