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.