¿Estoy debilitando el cifrado OpenPGP simétrico al implementar una derivación previa personalizada?

6

A menudo uso GnuPG para cifrar archivos con una frase de contraseña. Soy muy paranoico, y temo que la derivación clave utilizada por GnuPG no sea lo suficientemente lenta.

Por esta razón, he decidido hacer mi propia derivación de clave antes de introducir la contraseña en GnuPG.

Tengo un script de Python que ejecuta 10 millones de rondas de PBKDF2-SHA512 con un sal estático y genera el resultado codificado en hexadecimal. Yo llamo a esto 'pre derivación'.

Primero lo ejecuto en la frase de contraseña y envío su salida a GnuPG como frase de contraseña intermedia.

¿Estoy en el camino correcto, o estoy perdiendo el tiempo haciendo esto, o lo que es peor, debilitando la seguridad del cifrado?

    
pregunta Paranoid GPG 13.03.2016 - 22:49
fuente

2 respuestas

11

Aparte del hecho es mejor que no implemente el código criptográfico personalizado , está reinventando la rueda . La funcionalidad de cadena a clave de OpenPGP es configurable y puede ajustarse a sus necesidades, sin perder la compatibilidad. No estoy discutiendo tus elecciones en el número de ciclos aquí, aunque parecen un poco duras. Recomiendo leer ¿En qué momento agregar más iteraciones a PBKDF2 no proporciona seguridad adicional? sobre este tema.

Desde man gpg :

  

--s2k-cipher-algo name

     

Utilice el nombre como algoritmo de cifrado para el cifrado simétrico con una frase de contraseña si no se dan --personal-cipher-preferences y --cipher-algo . El valor predeterminado es AES-128.

     

--s2k-digest-algo name

     

Utilice el nombre como el algoritmo de resumen utilizado para modificar las frases de contraseña para el 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, se utilizará una frase de contraseña simple (que en general no se recomienda), un 1 agrega una sal (que   no debe usarse) a la frase de contraseña y un 3 (el valor predeterminado) repite todo el proceso varias veces (consulte --s2k-count ).

     

--s2k-count n

     

Especifique cuántas veces se repiten las frases de contraseña de cifrado simétrico. Este valor puede oscilar entre 1024 y 65011712 inclusive. Se pregunta por defecto.   de gpg-agent. Tenga en cuenta que no todos los valores en el rango 1024-65011712 son legales y si se selecciona un valor ilegal, GnuPG se redondeará al valor legal más cercano. Esta   La opción solo tiene sentido si --s2k-mode se establece en el valor predeterminado de 3.

Para terminar, las siguientes opciones tendrán el mismo efecto:

gpg --s2k-mode 3 --s2k-digest-algo SHA512 --s2k-count 10000000 --symmetric

--s2k-mode 3 es el valor predeterminado de GnuPG (y solo la configuración razonable para esta opción); No incluí --s2k-cipher-algo ya que esto no es relevante para la derivación de claves (y no es manejado por la "pre-derivación" que describió, de todos modos). Alternativamente, puede establecer esto como predeterminado en su gpg.conf :

s2k-mode 3
s2k-digest-algo SHA512
s2k-count 10000000

Esas opciones no solo se pueden usar para el cifrado simétrico de mensajes / archivos, sino que también se usan para la contraseña de protección de claves privadas.

    
respondido por el Jens Erat 13.03.2016 - 23:19
fuente
2

Si bien la protección de su frase de contraseña es la parte más importante para mantener la seguridad de GPG, lo más probable es que esté debilitando la seguridad existente en lugar de fortalecerla.

Es fundamental que intente minimizar el tiempo que su frase de contraseña está en la memoria de su computadora. Estoy seguro de que GPG pone a cero la memoria de manera adecuada para minimizar la exposición. Pero los lenguajes administrados por memoria como Python no facilitan realmente la manipulación segura de cadenas. Esto significa que su frase de contraseña inicial, así como la que pasa a GPG, probablemente se quedará en la memoria virtual de su computadora (lea esto como en el disco). La probabilidad de que se extraiga depende del debate, pero ciertamente es mucho mayor que el tiempo en que GPG dejará tu llave por ahí.

Tampoco mencionas cómo introduces el hash SHA512 en GPG. Si lo está imprimiendo y tal vez incluso copiándolo y pegándolo en GPG, sería terrible. (Los buffers de copia nunca deben usarse para datos secretos).

Por lo tanto, le recomiendo que utilice las opciones de GPG existentes (consulte conteste de @ Jene para obtener una descripción general excelente) y pruebe para recordar que no debe hacer rodar su propio criptográfico .

    
respondido por el Neil Smithline 13.03.2016 - 23:27
fuente

Lea otras preguntas en las etiquetas