sólo para aclarar un poco las cosas:
RSA se puede utilizar tanto para el cifrado (asegurándose de que Eva no puede leer los mensajes que Alice envía a Bob) o por firmar (asegurando que si Alice envía un mensaje a Bob, Bob sabe que en realidad fue Alicia la que envió el mensaje, y no Eva pretendió ser Alicia)
RSA genera un par de claves: una pública y una privada. RSA está diseñado de modo que si aplica la clave pública y luego aplica la clave privada, o viceversa, recibirá el mismo mensaje. Y la clave pública no puede derivarse de la clave privada (o viceversa).
Para usar RSA para el cifrado, Alice cifra el mensaje utilizando la clave pública de Bob. La única forma de leer este mensaje es con la clave privada de Bob, que solo él tiene. Por lo tanto, Eva no puede leer el mensaje porque no tiene esta clave. Por otro lado, esto no proporciona autenticación del origen del mensaje. Eve también puede obtener la clave pública de Bob (ya que es pública) y enviar mensajes a Bob, pretendiendo ser Alice.
Para usar RSA para firmar, Alice toma un hash del mensaje, encripta el hash usando su propia clave privada y agrega el resultado (esta es la firma) al mensaje. Por supuesto, Eve puede descifrar esto usando la clave pública de Alice. Sin embargo, Bob puede descifrar la firma usando la clave pública de Alice y ver si coincide.Si lo hace, debe haber sido encriptado usando la clave privada de Alice, que solo ella tiene, así que debe haber venido de Alice.
Ahora, no estoy familiarizado con la API .NET criptografía, así que no estoy seguro si funciona exactamente como se describe aquí. Pero esta explicación puede ayudarlo a comprender algunas de las respuestas que está obteniendo.
* "Cifrar con la clave privada" * no es una operación criptográfica válida. Si está intentando realizar esa operación, generalmente quiere un *** Signature Scheme with Recovery ***. – jww