¿Por qué no cifrar RSA todo el documento?

15

Recientemente me he enterado de una forma en que la persona B puede verificar que un documento enviado de la persona A es de hecho de la persona A.

  1. La persona A le da a la persona B su clave RSA pública. Esto debe hacerse de manera confiable.
  2. La persona A usa SHA1 para codificar el documento en un hash de 160 bits.
  3. La persona A usa su clave RSA privada para firmar el hash SHA1 de 160 bits del documento.
  4. La persona A envía el hash SHA1 firmado por RSA y el documento a la persona B.
  5. La persona B verifica el hash con la clave RSA pública de la persona A.
  6. La persona B genera un SHA1 para comparar el documento que le envió la persona A.
  7. Si los dos hashes SHA1 coinciden, entonces el documento es de hecho de la Persona A.

Este proceso parece confiable, pero también engorroso para mí. ¿Por qué la Persona A no puede simplemente cifrar el documento directamente con su clave privada RSA y enviarlo a la Persona B. En su lugar, por qué cifrar un hash del documento y enviarlo junto con el documento?

    
pregunta David Faux 18.10.2012 - 19:35
fuente

6 respuestas

25

Hay más de una razón:

1) En realidad, el algoritmo RSA es más lento. Por ejemplo :

  

En comparación, el DES (ver Sección 3.2) y otros cifrados en bloque son mucho más rápidos que el algoritmo RSA. El DES es generalmente al menos 100 veces más rápido en software y entre 1,000 y 10,000 veces más rápido en hardware, dependiendo de la implementación. Las implementaciones del algoritmo RSA probablemente reducirán un poco la brecha en los próximos años, debido a la alta demanda, pero los cifrados en bloque también se acelerarán.

Luego, si mira aquí puede ver que listan DES como que toman 54.7 ciclos por byte y que SHA-1 toma 11.4 ciclos por byte.

Por lo tanto, calcular el hash SHA-1 del documento y firmarlo es una optimización del rendimiento en lugar de cifrar todo el documento con su clave privada.

2) Al dividir el documento de la firma, tiene un sistema más flexible. Puede transmitirlos por separado o almacenarlos en diferentes lugares. Puede ser un caso en el que todos ya tengan una copia del documento, y solo desea que la persona A verifique a la persona B que tiene el mismo documento (o un hash de él).

3) Pensándolo, si alguien cifra el documento con una clave privada falsa y lo descifra con la clave pública real, su algoritmo no puede decirle el resultado (firmado o no). A menos que su programa pueda interpretar el significado del documento resultante (quizás sepa que se supone que es XML, etc.), entonces no puede decir de manera confiable que fue "firmado". O tienes el mensaje correcto, o el mensaje equivocado. Presumiblemente un humano podría decirlo, pero no una máquina. Al usar el método hash, se supone que ya tengo el texto sin formato y solo quiero verificar que la persona A lo firmó.

Digamos que tengo un programa que lanza armas nucleares. Obtiene un archivo de comando que está cifrado usando su método, por lo que descifro con la clave pública y envío el resultado a mi procesador de comando. Entonces confía en el procesador de comandos para saber si es un comando válido. Eso asusta. ¿Qué sucede si el protocolo del comando es solo la latitud y longitud de hacia dónde apuntar el misil, codificado en binario? Podrías simplemente lanzar en el objetivo equivocado.

Al usar un hash, obtienes un comando y un hash firmado en un canal de texto plano. Al pulsar el comando, comprueba la firma y, si no coinciden, no se molesta en enviar nada al procesador de comandos. Si coinciden, envía los comandos.

Si desea ocultar el contenido del comando, debe tomar los comandos y la firma, comprimirlos y encriptar todo con la clave pública de la estación receptora antes de enviarlos.

    
respondido por el Scott Whitlock 18.10.2012 - 20:03
fuente
3

A veces, no le importa especialmente que todo el mundo lea un mensaje (o preferiría que lo hicieran) pero desea proporcionar un mecanismo para probar que usted escribió el mensaje. La firma hace justamente esto.

RSA es lento, pero la mayoría del software de encriptación que usa RSA en realidad encripta documentos con un cifrado simétrico como AES, y encripta la clave utilizada (a veces llamada clave de "sesión") con RSA, por lo que la desaceleración de encriptar todo el documento no es que genial.

    
respondido por el peejaybee 18.10.2012 - 20:44
fuente
1

Esto tomaría cada byte del documento y lo convertiría en 40 bytes. Los documentos serían archivos masivos ahora en comparación con lo que eran antes. Se necesitarían muchos recursos para cifrar, enviar y descifrar datos. Creo que cifrar todo el documento para enviarlo luego la otra persona lo descifra, es mucho más pesado que la forma en que lo describiste.

    
respondido por el DFord 18.10.2012 - 19:54
fuente
1

Una palabra - no repudio - no es realmente que el documento sea importante o no, ni el tiempo que se tarda en cifrarlo contra el hash es importante - es un problema crítico con cosas como las grandes Órdenes de compra electrónicas, contratos electrónicos, etc. -

Cuando solo se requiere el no repudio, no es necesario proporcionar al firmante > > > > DIRECT < < < < < Acceso a / control sobre la clave privada: en los casos en que la posesión física de la clave > CONTAINER < se requiere junto con un pin, a menudo es un medio satisfactorio para producir firmas electrónicas confiables, por ejemplo. enlace

    
respondido por el Mark Mullin 19.10.2012 - 02:52
fuente
1

Una razón es que esto requeriría "cifrar" todo el documento para cada destinatario, lo que podría llevar a tamaños de archivo muy grandes.

También cuando está encriptando (y no firmando como describió), encripta todo el documento con un cifrado simétrico y encripta la clave resultante con las claves públicas de los destinatarios. El cifrado simétrico es mucho más rápido y tiene mucha más flexibilidad con respecto a sus destinatarios, etc.

    
respondido por el Fabian Zeindl 19.10.2012 - 19:29
fuente
-3

La razón principal de esto es una de las propiedades significativas de una función de hash criptográfica, es decir, it is infeasible to find two different messages with the same hash .

Si la persona cifra todo el documento con RSA y envía su clave privada junto con él, la principal desventaja es que si Adversary llega a conocer la clave privada, también conocerá el mensaje y podrá modificarlo.

Ahora considere estas propiedades de las funciones hash:

  1. It is infeasible to generate a message that has a given hash.
  2. It is infeasible to modify a message without changing the hash.

Entonces, si Alice está usando la función de hash, entonces incluso si Adversary llega a conocer la clave privada por algún medio de comprometimiento, no podría generar el mensaje debido al hashing. Y tampoco puede modificar el mensaje. Por lo tanto, RSA garantiza una condición de ganar-ganar para la comunicación entre Alice y Bob .

    
respondido por el Vaibhav Agarwal 18.10.2012 - 20:01
fuente

Lea otras preguntas en las etiquetas