Con GPG, ¿puede "descifrar" un archivo que no ha sido cifrado?

2

Al leer sobre el cifrado asimétrico hace un tiempo, recuerdo haber leído que podría "descifrar" un archivo no cifrado con su clave privada, luego otros (cualquiera) podrían "cifrarlo" con su clave pública para recuperar el archivo original y Asegúrate de que fue de ti. Obviamente, la forma correcta de hacerlo es mediante la firma, que GPG maneja. Sin embargo ... ¿Es esto posible con GPG?

Estoy probando el siguiente comando.

gpg --output decrypted.jpg --decrypt --local-user my-email-address original.jpg

No genera ningún comentario o error, pero no se crea decrypted.jpg .

    
pregunta lukejanicke 20.08.2016 - 20:00
fuente

2 respuestas

8

Diferencia entre firmar y descifrar

Creo que su confusión se debe al hecho de que la firma es en teoría de hecho es algo similar al descifrado de algunos algoritmos (por ejemplo, RSA).

Wikipedia para frases de ejemplo como esta:

  

Supongamos que Alice desea enviar un mensaje firmado a Bob. Ella puede usarla   Posee clave privada para hacerlo. Ella produce un valor hash del mensaje,   lo eleva a la potencia de d (módulo n) (como lo hace ella al descifrar un   mensaje), y lo adjunta como una "firma" al mensaje.

Sin embargo, no es cómo se hace en la práctica , y es por eso que su enfoque no funciona.

Para obtener una explicación más detallada de la firma y el descifrado, consulte, por ejemplo, aquí :

  

En el mundo abstracto de los libros de texto, la firma RSA y el descifrado RSA hacen   Resultan ser lo mismo. En el mundo real de las implementaciones,   ellos no son. Así que nunca uses una implementación real de RSA   descifrado para calcular las firmas RSA. En el mejor de los casos, tu   La implementación se romperá de una manera que noten. En el peor de los casos,   introducirás una vulnerabilidad que un atacante podría explotar.

     

Además, no cometa el error de generalizar de RSA a   Concluir que cualquier esquema de encriptación puede ser adaptado como digital   algoritmo de firma. Ese tipo de adaptación funciona para RSA y El.   Gamal, pero no en general.

Respecto a PGP, no firma el mensaje en sí, sino que firma un resumen de hash del mensaje :

  

PGP utiliza una función hash criptográficamente fuerte en el texto plano   el usuario esta firmando Esto genera un elemento de datos de longitud fija conocido como   un resumen del mensaje. (De nuevo, cualquier cambio en la información resulta en una   Digestivo totalmente diferente.)

     

Luego PGP usa el compendio y la clave privada para crear el   "firma." PGP transmite la firma y el texto sin formato juntos.   Al recibir el mensaje, el destinatario utiliza PGP para volver a calcular el   Digerir, verificando así la firma. PGP puede cifrar el texto plano o   no; Firmar texto plano es útil si algunos de los destinatarios no están   interesado o capaz de verificar la firma.

Aquí hay una imagen que describe el proceso:

Porquénopuedessimplementedescifrarunmensajeparafirmarlo

Loanteriorestámuybien,ysabemosquenodebemosdescifrarlosmensajesparafirmarlosenlapráctica,pero¿porquénopodemoshacerlosolopordiversión?

PorquenoesasícomofuncionanPGPoGPG.Unaexplicacióncompletadelostrabajosinternosprobablementeseríademasiadoparaestapregunta,peroveaporejemplo ¿Cómo verifica GPG el descifrado exitoso? .

En resumen, PGP no solo realiza algunas operaciones de modificación en los datos de descifrado, el formato .pgp está bien definido y contiene información diversa. Tenga en cuenta también que PGP no utiliza en realidad el cifrado asimétrico como RSA en el mensaje en sí, sino en una clave que luego se utiliza para cifrar simétricamente el mensaje.

Conclusión

Para resumir, si usara RSA simple, podría usar el descifrado para firmar un mensaje (pero no debería), pero PGP y GPG no son RSA simple, por lo que no puede descifrar un mensaje para firmarlo.

    
respondido por el tim 20.08.2016 - 23:08
fuente
1

Parece recordar los conceptos básicos de cómo funcionan las firmas digitales en el caso del libro de texto RSA (es decir, RSA es un poco simplificado).

La clave pública RSA se compone de N (el módulo) que es el producto de dos números primos grandes (por ejemplo, en RSA de 2048 bits, N es un producto de 2048 bits de dos primes de 1024 bits ) y el exponente público, e , que generalmente se establece en 65537. La clave privada consiste de manera similar en N y d , el exponente privado.

(Si conoce los números primos pyq, puede calcular rápidamente el exponente privado, d, a través de algoritmo extendido de Euclides , donde d se elige para garantizar ese (m^e)^d mod N = m encontrando d = e^-1 mod (p-1)(q-1) que funciona debido al Teorema de Euler En general, no existe una forma pública de encontrar d dado N y e que es asintóticamente más eficiente que factorizar N.)

El cifrado RSA del libro de texto permite que cualquier persona con su clave pública tome un mensaje m (que se supone que está codificado en un número entero más pequeño que N) y cree un texto cifrado c calculando c = m^e mod N (exponenciación modular) , que solo puede ser descifrado por personas que posean la clave privada. El descifrado RSA del libro de texto es el mismo procedimiento de exponenciación modular, excepto que en lugar de actuar sobre el mensaje y usar el exponente público, actúa sobre el texto cifrado con el exponente privado. Es decir, si tiene la clave privada y el texto cifrado, puede calcular m a través de m = c^d mod N .

Las firmas en el libro de texto RSA a veces se llaman "cifrado con la clave privada" y funcionan de manera muy similar, con la diferencia principal en el orden. La persona que firma el mensaje al inicio usa exponenciación modular con la clave privada (similar al descifrado RSA) para crear una firma S = m^d mod N . Luego, cuando le das a alguien un mensaje firmado (es decir, m y S juntos), pueden verificar que el mensaje no se alteró al hacer una exponenciación modular en la firma con la clave pública y verificar que S^e mod N es igual al mensaje original.

La principal diferencia entre el RSA de libros de texto y el RSA real para el cifrado es que en el RSA real no se usa RSA para cifrar el mensaje que desea enviar. En su lugar, crea una clave simétrica aleatoria (por ejemplo, una clave AES de 128 bits), y utiliza esa clave simétrica aleatoria para cifrar su mensaje de tamaño arbitrario (que puede ser mucho mayor que 2048 bits, que es aproximadamente el tamaño de N), y luego use el libro de texto RSA para cifrar esta clave simétrica aleatoria. Es decir, se pasa el texto cifrado c_aes = AES(k, m) (que será tantos bloques como el mensaje de texto simple) y la clave AES cifrada RSA c_key = k^e mod N a alguien cuando desee enviar un mensaje cifrado. Luego descifran la clave AES con su clave privada RSA y usan la clave descifrada para descifrar c_aes .

De manera similar, la principal diferencia entre el libro de texto RSA y el RSA real para la firma, es que en el RSA real, no realiza una exponencia modular en el mensaje, que podría ser mucho más grande que el módulo N. En su lugar, ejecute un hash criptográfico funciona en el mensaje (como SHA-256 ), y luego crea una firma en este valor de hash. Eso es para firmar primero hash el mensaje h = sha256(m) , luego generar la firma S = h^d mod N . Para verificar, alguien con su clave pública, firma y mensaje de texto sin formato puede verificar que S^e mod N es igual a su cálculo del valor de hash del mensaje de texto sin formato asociado.

    
respondido por el dr jimbob 21.08.2016 - 07:22
fuente

Lea otras preguntas en las etiquetas