¿Es posible utilizar cifrado simétrico para cifrar un archivo con dos claves diferentes?

¿Es posible utilizar cifrado simétrico para cifrar un archivo con dos claves diferentes?

GPG/PGP y otros cifrados de clave pública permiten cifrar a varios destinatarios utilizando sus claves públicas.

¿Es posible utilizar sólo cifrado simétrico para hacer lo mismo? En otras palabras, ¿es posible cifrar simétricamente un archivo con dos claves diferentes?

El motivo de mi pregunta es que el cifrado asimétrico produce archivos enormes. Si tuviera que enviar un mensaje cifrado con clave pública a un teléfono inteligente, sería demasiado grande. Especialmente si estaba cifrado para varios destinatarios. Un solo "Hola" podría ocupar 2 páginas de texto. Por otro lado, el cifrado simétrico es muy estricto.

Respuesta1

Seguro. Simplemente cifre el archivo con una clave aleatoria y luego cifre esa clave aleatoria con las dos claves simétricas diferentes.

Respuesta2

Las versiones actuales de PGP y todos los GnuPG (GPG) implementan el estándar OpenPGP. Sólo usaré el término OpenPGP a continuación.

OpenPGP utiliza cifrado de clave pública y simétrica: al cifrar un documento, se genera y cifra una clave simétrica aleatoria utilizando la clave pública. El receptor cifrará la clave de cifrado simétrico (cifrado en bloque) utilizando su clave privada. Como sólo la clave simétrica se cifra utilizando la clave pública, la sobrecarga sigue siendo pequeña (esto es lo que propuso David Schwartz y ya lo implementa OpenPGP).

Por supuesto, hay dos casos en los que esta sobrecarga puede aumentar en comparación con los datos cifrados:

  • Una cantidad muy pequeña de datos; si esto es un problema, tendrás que elegir algún método de cifrado con claves previamente compartidas (claves simétricas)
  • Muchos destinatarios; ya que el cifrado de bloque debe estar cifrado para cada uno de ellos. Si esto es un problema, tendrás que compartir el secreto (clave privada) entre todos los destinatarios.

No podrá evitar utilizar cifrado simétrico y entregar el secreto a cada destinatario (o hacer lo mismo con la clave privada OpenPGP). Si desea que todos tengan su propio secreto, nadie más podrá descifrar su versión de los datos; entonces tendrás que enviarles a todos otra versión de estos datos.

Respuesta3

De hecho, estaba buscando resolver el mismo problema. El problema con gpg es que necesita llevar demasiado equipaje consigo: almacén de claves, etc. A veces solo desea crear un par de claves, colocar la clave pública en la máquina que realiza el cifrado y seguir adelante.

Escribí una herramienta para hacer precisamente eso:https://github.com/galets/AmetricCrypt. Necesitará mono para ejecutarlo en Linux, pero por lo demás funciona bien y no requiere que almacene la clave cifrada en un archivo separado.

información relacionada