2009-07-25 25 views
12

Sé que RSACryptoServiceProvider puede encriptar con la clave pública, luego se puede descifrar con la clave privada.¿Es posible encriptar con clave privada usando .NET RSACryptoServiceProvider?

¿Es posible encriptar con la clave privada y descifrarla con la clave pública utilizando el RSACryptoServiceProvider?

+0

* "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

Respuesta

-3

No. Así no es como funciona ninguna encriptación de clave pública/privada. Solo puede cifrar con la clave pública y solo descifrar con la clave privada.

+1

Gracias! Quiero hacer el número de serie para proteger mi software, si RSA no puede encriptar con clave privada, ¿cómo hacerlo de otra manera? – guaike

+11

En realidad, encriptar con una clave privada puede ser útil. Puede encriptar y lanzar algo, y el "público" puede descifrar el mensaje con su clave * public *, por lo tanto, sabiendo que el archivo encriptado proviene de usted. Funciona como una forma rudimentaria de firma/autenticación. El antiguo PGP basado en dos permitió esto. – CraigTP

+1

Craig, estás hablando de firmar, que es algo completamente diferente. La firma no es encriptación (aunque es una criptografía). Incluso entonces, la firma solo se puede generar con la clave privada, pero se verifica con la pública. – blowdart

2

Afortunadamente no. Sin embargo, puede firmar con la clave privada y verificar la firma con la clave pública.

Si bien las matemáticas implican sentido cuando se invierten las funciones clave (y así es como funcionan las firmas), el cifrado de la privacidad no tiene mucho sentido cuando la clave de descifrado es conocida y pública.

+0

Bueno, cuando las matemáticas se inviertan, la función inversa tomaría un tiempo mucho más largo para terminar, un tiempo inadmisiblemente largo. –

+1

por 'invertir las matemáticas' Quiero decir que a las matemáticas no les importa si se intercambian eyd en el algoritmo. Esto es lo que hace la firma: encriptar el resumen de hash del mensaje con la clave privada (el exponente privado 'd'). Obviamente, no quise decir que la dirección de cálculo se puede revertir. –

-1

La seguridad de los criptosistemas de clave pública se basa en el hecho de que la función sign()/encrypt() es one-way function ya que llevaría un tiempo infausto descifrarla sin la clave pública "trap-door".

Además, generalmente las claves generadas no tienen la misma longitud, aunque podrían serlo. Hay muchos documentos sobre la longitud asimétrica de la clave con RSA.

6

La ejecución de la operación RSA sin procesar con la clave privada generalmente se denomina operación de descifrado (al igual que realizarla con la clave pública se denomina operación de cifrado).

Es útil tener acceso a esta operación, por ejemplo, para implementar una operación que no es compatible con el marco.

La operación existe: es el DecryptValue -metodo, que se define mediante la clase base de RSACryptoServiceProvider: System.Security.Cryptography.RSA. Desafortunadamente, no es compatible con RSACryptoServiceProvider (ya que el win32-api subyacente, CryptoAPI, no lo admite). Si pudiera obtener otra .NET-implementación de la clase RSA, podría hacerlo, sin embargo.

41

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.

+0

¿Qué quiere decir con "aplicar la clave pública y luego aplicar la clave privada, o viceversa"? ¿Qué significa "aplicar" significa aquí? – WarLord

+0

¿Qué pasaría si Alice encriptara el mensaje en lugar del hash? ¿No sería eso más simple, o hay un fallo de seguridad en esto? Estoy hablando de firmar por supuesto, no de encriptación. –

16

Todos los que afirman que no existe tal cosa tampoco saben cómo funciona RSA, o están atrapados en la rutina de "firma".

Es completamente posible, y tiene todo el sentido, cifrar con la clave privada. Sí, esto es similar a la firma, pero esto NO es para nada lo que las bibliotecas más modernas toman como firma. Para ellos, esto significa calcular un resumen del mensaje, o HMAC, y encriptar con la clave privada. Combinar el cifrado con la clave privada para firmar tiene tanto sentido como decir que colocar un documento en una caja fuerte y dejar la llave tirada, es un sustituto para firmar el documento.

Sí, ES el cifrado, porque es la misma operación. El texto cifrado cifrado de clave privada es tan ilegible como el texto cifrado cifrado de clave pública; uno necesita ambas claves para descifrar el texto cifrado.

Consulte http://fringe.davesource.com/Fringe/Crypt/RSA/Algorithm.html para referencia en el algoritmo RSA.

+0

Los dos enlaces en [esta publicación] (http://stackoverflow.com/a/2350959/1299353) hablan sobre la implementación específica de RSA y sobre cuán seguro es el cifrado de la clave privada – Jett

+0

Me parece divertida esta respuesta ... Estoy no estoy seguro de estar en desacuerdo con un cuerpo académico de criptógrafos y matemáticos. – jww

+0

Sí, así que esto es específico para la implantación de RSA, ¿correcto? E y D son la magia pública/privada, y solo necesitas 1 de ellos para encriptar/descifrar. Simplemente sucede que RSA incluye algunos otros datos en la clave pública P y Q (que también podría estar en la clave privada). – therealsix

0

Puede cifrar y descifrar con PrivateKey. PrivateKey de hecho contiene tanto Private como PublicKey.

Teóricamente al menos puede encriptar con PublicKey y descifrar con PrivateKey y viceversa. En VB.net veo que el primer caso funciona y el segundo caso arroja el error BadKey

+2

Tengo que encriptar con PrivateKey y descifrar con PublicKey. Después de un día de intentos fallidos, comprendí que 'RSACryptoServiceProvider.Encrypt' siempre utiliza PublicKey incluso cuando el objeto' RSACryptoServiceProvider' se crea desde PrivateKey. Por otro lado, no puedo usar 'Sign' porque requiere algoritmo hash, pero quiero encriptar datos sin hash. En otras palabras, el problema está en la implementación de .Net. – i486

0

Puede hacer ambas cosas; encriptar con privado y decypt con público, O, encriptar con público y descifrar con privado. No puede encriptar y descifrar solo con clave privada, ni puede hacer lo mismo solo con claves públicas.

Remus lo clavó; Encriptar con la clave privada no tiene mucho sentido cuando la clave de descifrado es bien conocida y pública.

Además, puede derivar la clave pública desde la clave privada, pero no al revés.

+0

Creo que esta respuesta también es divertida ... No estoy seguro de estar en desacuerdo con un cuerpo académico de criptógrafos y matemáticos. – jww

+0

Sí, incluso me pregunto el punto de encriptar con la clave privada, cuando se supone que se conoce la clave pública. A menos que sea así, que la clave pública (aunque) se llame 'pública'; realmente no se hace público para todos, sino solo para la parte interesada. –

Cuestiones relacionadas