Al crear una clave secreta con GnuPG, se le solicita una contraseña para protegerla. ¿Qué algoritmo de cifrado se utiliza para lograr esto? El manual solo dice que se utiliza un algoritmo de cifrado simétrico.
GnuPG 2.x tiene un gpg-agent
separado que es el custodio de las claves secretas y que no ofrece ningún control sobre los parámetros de encriptación de las claves secretas dentro.
Además, --s2k
son aceptados pero ignorados al establecer una frase de contraseña o exportar una clave secreta.
Hay un problema en el rastreador de errores acerca de esto y, cuando se realiza un seguimiento en el lista de correo , la respuesta fue
No, eso no es posible. En este momento el agente siempre usa AES y S2K. parámetros que requieren en la máquina en ejecución unos 100 ms para el descifrado.
Por lo tanto, creo que la situación actual es que el agente retiene las claves, ya que el agente decide que es mejor cumplir su objetivo de velocidad en la máquina en ejecución y no hay forma de controlarlo o exportar de forma diferente. Todas las exportaciones que he intentado dan como resultado atributos clave que se pueden ver de esta forma:
$ gpg --export-secret-key DEADBEEF | gpg --list-packets
iter+salt S2K, algo: 7, SHA1 protection, hash: 2, salt: ...
Esto revela la clave simétrica ( algo ) y el hashing (hash ) algoritmos en uso, como se define en RFC4880 . Lo anterior muestra que algo: 7
es AES con clave de 128 bits y hash: 2
es SHA-1 .
La etiqueta iter+salt
es el modo string-to-key que GnuPG usa para convertir el frase de contraseña (cadena) en una clave. El valor predeterminado iter+salt
significa que se agrega una sal a la frase de contraseña y que la cadena se revisa varias veces (una técnica llamada estiramiento de la tecla que tiene como objetivo aumentar la dificultad de las frases de contraseña de fuerza bruta).
Eso ilustra cómo GnuPG cifra las claves secretas y resalta el hecho de que no tienes control sobre ellas si estás usando la versión 2.x debido a su uso de gpg-agent
.
Primero, la frase de contraseña se usa para derivar una clave para el cifrado simétrico usando una función cadena a tecla . Se pueden ajustar varias configuraciones en GnuPG considerando esto, como el algoritmo de hashing y el número de repeticiones. En el manual de GnuPG :
--s2k-digest-algo name
Use el nombre como el algoritmo de resumen utilizado para modificar las frases de contraseña de cifrado simétrico. El valor predeterminado es SHA-1.
--s2k-mode n
Selecciona cómo se modifican las frases de contraseña para el cifrado simétrico. Si n es 0 una frase de contraseña simple (que en general no se recomienda) será usado, un 1 agrega una sal (que no debe usarse) a la frase de contraseña y un 3 (el valor predeterminado) itera todo el proceso varias veces (ver
--s2k-count
).
--s2k-count n
Especifique cuántas veces se modifican las frases de contraseña para simétrico El cifrado se repite. Este valor puede oscilar entre 1024 y 65011712. inclusivo. El valor predeterminado se solicita a gpg-agent. Tenga en cuenta que no todos Los valores en el rango 1024-65011712 son legales y si un valor ilegal es seleccionado, GnuPG se redondeará al valor legal más cercano. Esta opción solo tiene sentido si
--s2k-mode
se establece en el valor predeterminado de 3.
Usando esta clave simétrica, la clave privada se cifra simétricamente. También se puede elegir el algoritmo de cifrado, mientras que AES-128 es el predeterminado en GnuPG.
--s2k-cipher-algo name
Utilice el nombre como algoritmo de cifrado para el cifrado simétrico con un frase de contraseña si
--personal-cipher-preferences
y--cipher-algo
son no dado. El valor predeterminado es AES-128.
Los cifrados admitidos se pueden mostrar ejecutando gpg --version
, por ejemplo:
$ gpg --version
[...]
Cipher: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH,
CAMELLIA128, CAMELLIA192, CAMELLIA256
A diferencia de los algoritmos de clave pública-privada (donde GnuPG 2.1 agregó curvas elípticas), los algoritmos simétricos compatibles son los mismos entre todas las versiones actuales de GnuPG.
Todas esas opciones también se pueden configurar en ~/.gnupg/gpg.conf
, donde se anotan sin el prefijo --
.
Según este artículo , puede elegir cuál cifrado para usar para el cifrado de datos (que supongo que incluye el cifrado de clave, ya que es solo un archivo, ¿verdad?) de la siguiente lista:
Cypher: 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH, CAMELLIA128, CAMELLIA192, CAMELLIA256
EDITAR:
Después de investigar un poco en las páginas de comando man y en google, puede cambiar la configuración predeterminada a través de una serie de configuraciones (consulte esta pregunta para obtener más información: ¿Cómo cambiar el cifrado predeterminado en GnuPG tanto en Linux como en Windows? )
No puedo encontrar nada que mencione específicamente el cifrado de claves privadas, por lo que asumo que solo usa lo que se establece como el cifrado simétrico predeterminado.
Lea otras preguntas en las etiquetas key-management encryption gnupg pgp