El cifrado simétrico de GnuPG produce resultados diferentes

5

Tengo un caso de uso en el que quiero cometer código fuente cifrado simétricamente usando GnuPG (piense en Coursera para copia de seguridad y colaboración). Cifrado / descifrado todas las fuentes en un lote con un script y me preguntaba por qué la salida no es estable.

Básicamente, ¿por qué?

echo "plain text" | gpg --armor --symmetric --cipher-algo AES256
¿

con la contraseña secret produce diferentes textos cifrados con cada llamada? (Seguramente, esto no afecta el descifrado, los diferentes textos cifrados pueden descifrar al mismo texto simple). No tengo experiencia con los algoritmos de cifrado, pero al leer el artículo de Wikipedia parece que el algoritmo es determinista.

En resumen, mis preguntas son:

  1. ¿Este comportamiento es una propiedad de AES o estoy usando GnuPG incorrectamente?
  2. Si el primero es el caso, ¿existen otros algoritmos de criptografía simétrica que sean más adecuados para este caso de uso?
pregunta rdanitz 13.05.2015 - 22:08
fuente

3 respuestas

7

Por lo general, el cifrado simétrico comienza con un vector de inicialización aleatorio (IV). OpenPGP usa un modo de retroalimentación de cifrado ligeramente diferente con un IV todo en cero, pero los dos primeros bloques son aleatorios .

Debido a esto, también el cifrado simétrico no es determinista; no puede comparar el texto simple comparando el mensaje cifrado, el resultado cifrado ya no es determinista.

    
respondido por el Jens Erat 13.05.2015 - 22:41
fuente
4

Además del cifrado vector de inicialización (IV), la derivación de clave simétrica utiliza un sal aleatorio para protegerse contra el diccionario fuera de línea o los ataques de la tabla del arco iris. Específicamente, el S2K iterado y salado ( Cadena a clave ) el paquete contiene una sal de 8 bytes.

    
respondido por el frasertweedale 14.05.2015 - 08:46
fuente
1

Al acercarse a su segunda pregunta, en lugar de utilizar un algoritmo de cifrado diferente, puede reemplazar gpg en modo simétrico con openssl :

echo "plain text" | openssl enc -aes-128-cbc -nosalt -pass pass:secret

Cuidado:

  • A modo de ejemplo, estoy proporcionando la frase de contraseña en la línea de comandos. Consulte PAGAR ARGUMENTOS DE FRASE en openssl (1) para obtener mejores maneras de proporcionarlo.

  • Como estamos deshabilitando explícitamente la sal, debe usar una frase de contraseña más fuerte que no se reutilice, yo usaría una frase de contraseña generada al azar que cambia para cada asignación,

respondido por el Ángel 15.05.2015 - 02:44
fuente

Lea otras preguntas en las etiquetas