Este es un mal diagrama. La operación básica no es intrínsecamente errónea, al menos para RSA, pero pensar en firmar como "cifrar" y verificar como "descifrar" conducirá exactamente al tipo de confusión que está expresando aquí. Es mucho mejor pensar de esta manera:
- Una clave pública se puede usar para dos cosas: cifrar y verificar .
- Una clave privada se puede usar para dos cosas: descifrar y firmar .
O, equivalentemente, puedes decir lo siguiente:
- Puede usar su clave privada para descifrar un mensaje que alguien haya cifrado con su clave pública.
- Puede usar su clave privada para firmar un mensaje, de modo que cualquier persona que tenga su clave pública pueda verificar que el mensaje es suyo.
- Puede enviar su clave pública a todos, para que puedan enviarle mensajes cifrados y verificar sus mensajes.
- A menos que te estés enviando un mensaje secreto o verificando que en realidad fuiste tú quien escribió un mensaje, nunca usas tu clave pública.
En la pregunta que hiciste, el MitM no necesita descifrar nada, ¡porque el mensaje nunca fue cifrado en absoluto! El mensaje (o, más bien, un hash de él) se firmó, por lo que MitM no puede modificar el mensaje sin romper la firma, pero el mensaje en sí está en texto sin formato.
Si desea tanto cifrar (proporcionar confidencialidad) como firmar (proporcionar autenticidad), necesita su clave privada (para la firma) y el destinatario clave pública (para el cifrado). Es decir, antes de que Alice pueda enviar un mensaje seguro a Bob, no solo necesita generar su propio par de llaves (para firmar), necesita que Bob haya generado su propio par de llaves y (verificadamente) le envió su clave pública (Alice) . Este es el patrón utilizado por numerosos esquemas de mensajería segura, como OpenPGP (incluyendo GPG) y S / MIME (los cuales se centran principalmente en la seguridad de correo electrónico de extremo a extremo).
Otra opción es, por supuesto, cifrar utilizando una clave simétrica que ha intercambiado previamente con el destinatario (una "clave precompartida") y luego generar un código de autenticación de mensaje (MAC) usando esa clave u otra que tenga. También se intercambia. Este MAC puede estar basado en hash (un HMAC, que combina una clave secreta compartida con un algoritmo de hash seguro como un miembro de las familias SHA2 o SHA3), o puede derivarse del cifrado simétrico en sí mismo, como una etiqueta de autenticación. de un cifrado de bloque en modo Galois / contador (GCM). Sin embargo, las claves simétricas no tienen un componente público (nunca es seguro hacer cosas como ponerlas en un certificado público), por lo que el intercambio de claves es un poco más fácil (¡aunque aún es muy costoso!) Cuando se usan claves públicas / privadas (asimétricas) en su lugar.