El OpenPGP standard incluye formato para codificar claves privadas como secuencias de bytes, y para cifrar simétricamente secuencias de bytes con un clave derivada de contraseña. Si bien cualquier implementación de PGP es libre de almacenar claves privadas de la forma que crea conveniente, la mayoría (si no todas) usarán los formatos OpenPGP.
El punto crítico en el cifrado basado en contraseña es cómo la contraseña se deriva en una clave. Esto es todo el hashing de contraseña : el proceso de derivación ser lento (por ejemplo, con un número configurable de iteraciones) y debe usar un parámetro de variación llamado salt . OpenPGP incluye una derivación de clave "decente" basada en contraseña, llamada S2K iterado y con sal . Si se preocupa por especificar un conteo suficientemente alto (es decir, tan alto como sea tolerable en su máquina), entonces puede obtener una buena seguridad. Con la implementación de OpenPGP en GnuPG , el recuento de iteraciones se especifica con la opción de línea de comandos --s2k-count
.
Por supuesto, la defensa principal contra la fuerza bruta en una contraseña es elegir una contraseña segura, que es una contraseña con mucha aleatoriedad. Las iteraciones y las sales son solo métodos para hacer frente a las contraseñas no tan fuertes que surgen dentro del enredo de las neuronas humanas.