Si cifro el mismo archivo dos veces con GnuPG, usando la misma clave, ¿obtendré el mismo resultado? o ¿está utilizando algún segmento aleatorio / psudeo-aleatorio para mejorar la seguridad como rsynccrypto?
Si cifro el mismo archivo dos veces con GnuPG, usando la misma clave, ¿obtendré el mismo resultado? o ¿está utilizando algún segmento aleatorio / psudeo-aleatorio para mejorar la seguridad como rsynccrypto?
En términos generales, no, el cifrado del mismo archivo con la misma clave no producirá el mismo archivo, por tres razones:
El formato OpenPGP (que implementa GnuPG) utiliza encriptación híbrida : a La clave aleatoria y simétrica se cifra con la clave pública del destinatario (de tipo RSA o ElGamal), y esa clave simétrica se usa para cifrar el cuerpo del mensaje con un algoritmo de cifrado simétrico. El cifrado híbrido se usa porque el cifrado asimétrico es muy limitado en su rango (por ejemplo, una clave RSA de 2048 bits no puede cifrar más de 245 bytes de una sola vez) y tiene una gran sobrecarga (tanto en la CPU como en el tamaño del mensaje resultante). Como la clave simétrica no se guarda en ningún lado del remitente, se creará una nueva clave aleatoria cada vez, y será diferente con una probabilidad abrumadora.
El cifrado asimétrico en sí mismo es aleatorio. Por ejemplo, con RSA , el relleno incluye bytes aleatorios. Esto es necesario "en general", porque la clave pública es pública, por lo que todos lo saben; si el cifrado fuera determinista, los atacantes podrían realizar una búsqueda exhaustiva en el mensaje . Esto no sería un problema en el caso específico de OpenPGP (el mensaje es una clave aleatoria, lo suficientemente grande para anular la búsqueda exhaustiva por sí mismo), pero los estándares para RSA o ElGamal tienen un alcance mayor e incluyen relleno aleatorio.
Al realizar el cifrado simétrico en sí mismo, se utiliza un IV aleatorio, y será diferente (con una probabilidad abrumadora) para cada invocación. Consulte sección 5.7 para obtener más información.
El tercer punto también se aplica cuando se realiza un cifrado basado en contraseña (el cifrado se realiza con una contraseña, no con una clave pública del destinatario). La encriptación basada en contraseña también agrega una cuarta asignación aleatoria, que es la sal en la transformación contraseña-clave .
El cifrado GnuPG no es determinístico y, por lo tanto, devolverá una salida diferente para cada ejecución. Por supuesto, cifrar, luego descifrar es determinista y siempre devolverá el mismo contenido.
Explicación :
GnuPG usa encriptación asimétrica, que es lenta cuando encripta grandes cantidades de datos. Por este motivo, utiliza su clave privada para cifrar un cifrado de bloque aleatorio que se usa nuevamente para cifrar sus datos.
Cada vez que cifres datos, se generará un nuevo cifrado de bloques al azar, por lo que los datos cifrados se verán diferentes.
Encripté el mismo documento dos veces y calculé las sumas de comprobación MD5 después de cada cifrado:
$ gpg --encrypt test.txt
$ md5 test.txt.gpg
MD5 (test.txt.gpg) = f2f6a07e0d7ae9899315d0471c2596bc
$ gpg --encrypt test.txt
$ md5 test.txt.gpg
MD5 (test.txt.gpg) = b57d4c360b1c3c6b2202ce6c3d32cdd8