El valor predeterminado hoy es la mitad de la recomendación mínima de hace 20 años . *
El algoritmo específico de fortalecimiento de clave utilizado es S2K con sal e iterado , que combina la contraseña de entrada Y la sal y la repite numerosas veces, picando la concatenación. El valor de conteo real que está utilizando es el número de bytes para continuar el hashing, por lo que el valor más alto de hash es solo alrededor de 65 MB de datos. El valor predeterminado de 65536 es bastante bajo. Cada bloque de hash SHA-256 tiene un tamaño de 64 bytes, y PBKDF2 usa la construcción HMAC que llama a SHA-256 dos veces por cada iteración (procesando 128 bytes), por lo que la fuerza predeterminada es equivalente a solo 512 invocaciones de la función hash. Obviamente, cualquier KDF que utilice pocas iteraciones de hash no será particularmente seguro. El valor máximo de 65011712 es equivalente a más de 500,000 iteraciones de hash, lo que es mejor.
El problema no es solo que el valor sea demasiado bajo, pero que no sea duro en la memoria. Esto significa que es muy fácil paralizar masivamente los intentos de craqueo sin correr con las limitaciones de memoria. Este es el mismo problema que tiene PBKDF2. Una alternativa adecuada sería una función de memoria dura como Argon2 , pero GnuPG no lo admite. Por desgracia, se limita a S2K. Debes usar una contraseña más fuerte.
* Estoy comparando PBKDF2 y S2K. La recomendación mínima de las iteraciones de PBKDF2 fue de 1k en 2000. Si cada iteración es equivalente a dos SHA de 64 bytes -256 hashes, entonces podemos considerar que el recuento de S2K dividido por 128 es aproximadamente igual a una sola iteración de PBKDF2. Como tal, 65536/128 = 512, aproximadamente la mitad de la recomendación de 2000.