2009-07-25 17 views
12

So che RSACryptoServiceProvider può crittografare con la chiave pubblica, quindi può essere decrittografato con la chiave privata.È possibile crittografare con chiave privata utilizzando .net RSACryptoServiceProvider?

È possibile crittografare con la chiave privata e decifrare con la chiave pubblica utilizzando RSACryptoServiceProvider?

+0

* "Encrypt with the private key" * non è un'operazione di crittografia valida. Se si sta tentando di eseguire tale operazione, in genere si desidera un *** Signature Scheme with Recovery ***. – jww

risposta

-3

No. Non è così che funziona la crittografia a chiave pubblica/privata. È possibile crittografare solo con la chiave pubblica e decifrare solo con la chiave privata.

+1

Grazie! Voglio fare il numero di serie per proteggere il mio software, se RSA non può cifrare con la chiave privata, come fare in un altro modo? – guaike

+11

In realtà, la crittografia con una chiave privata può avere i suoi usi. Puoi crittografare e rilasciare qualcosa, e il "pubblico" può decrittografare il messaggio con la tua chiave * public *, quindi sapere che il file crittografato proviene da te. Funziona come una forma rudimentale di firma/autenticazione. Il vecchio PGP dos-based ha permesso questo. – CraigTP

+1

Craig stai parlando di firma, che è una cosa completamente diversa. La firma non è crittografia (anche se è crittografia). Anche in questo caso la firma può essere generata solo con la chiave privata, ma verificata con quella pubblica. – blowdart

2

Fortunatamente no. È comunque possibile firmare con la chiave privata e verificare la firma con la chiave pubblica.

Mentre la matematica ha senso quando i ruoli chiave sono invertiti (e questo è il modo in cui le firme funzionano), la crittografia per la privacy non ha molto senso quando la chiave di decodifica è ben nota e pubblica.

+0

Beh, quando la matematica è invertita, la funzione inversa richiederebbe molto più tempo per terminare, un tempo improponibilmente lungo. –

+1

di "Invertire la matematica" Intendo dire che alla matematica non interessa se e e nell'algoritmo vengono scambiati. Questo è ciò che fa la firma: crittografare il messaggio hash digest con la chiave privata (l'esponente privato 'd'). Ovviamente non intendevo dire che la direzione del calcolo potesse essere invertita. –

-1

La sicurezza dei criptosistemi a chiave pubblica si basa sul fatto che la funzione sign()/encrypt() è una one-way function in quanto richiederebbe una quantità di tempo non sufficiente per decrittografarla senza la chiave pubblica "trap-door".

Inoltre, di solito i tasti generati non hanno la stessa lunghezza, anche se potrebbero esserlo. Ci sono molti articoli sulla lunghezza della chiave asimmetrica con RSA.

6

L'esecuzione dell'operazione RSA non elaborata con la chiave privata viene in genere definita operazione di decrittografia (così come l'esecuzione con la chiave pubblica viene definita operazione di crittografia).

È utile avere accesso a questa operazione, ad esempio per implementare un'operazione che non è supportata dal framework.

L'operazione esiste: è il metodo DecryptValue, definito dalla classe base di RSACryptoServiceProvider: System.Security.Cryptography.RSA. Sfortunatamente, non è supportato da RSACryptoServiceProvider (poiché il sottostante win32-api, CryptoAPI, non lo supporta). Se potessi procurarti un'altra implementazione .NET della classe RSA, sarai comunque in grado di farlo.

41

Giusto per chiarire le cose un po ':

RSA può essere utilizzato sia per la crittografia (garantendo che Eva non può leggere i messaggi che Alice invia a Bob) oppure per la firma (assicurare che se Alice invia un messaggio a Bob, Bob sa che in realtà è stata Alice a inviare il messaggio, e non Eve che finge di essere Alice)

RSA genera una coppia di chiavi: una chiave pubblica e una chiave privata. RSA è progettato in modo tale che se si applica la chiave pubblica e quindi si applica la chiave privata, o viceversa, si otterrà lo stesso messaggio. E la chiave pubblica non può essere derivata dalla chiave privata (o viceversa).

Per utilizzare RSA per la crittografia, Alice crittografa il messaggio utilizzando la chiave pubblica di Bob. L'unico modo per leggere questo messaggio è con la chiave privata di Bob, che solo lui ha. Così Eva non può leggere il messaggio perché non ha questa chiave. D'altra parte, questo non fornisce l'autenticazione della fonte del messaggio. Eve può anche ottenere la chiave pubblica di Bob (dato che è pubblica) e inviare messaggi a Bob, fingendo di essere Alice.

Per utilizzare RSA per la firma, Alice accetta un hash del messaggio, crittografa l'hash utilizzando la propria chiave privata e aggiunge il risultato (questa è la firma) al messaggio. Ovviamente, Eve può ancora decifrarlo usando la chiave pubblica di Alice. Tuttavia, Bob può decodificare la firma utilizzando la chiave pubblica di Alice e vedere se corrisponde.Se lo fa, deve essere stato crittografato usando la chiave privata di Alice, che solo lei ha, quindi deve provenire da Alice.


Ora, io non sono a conoscenza l'API .NET crittografia, quindi non sono sicuro se funziona esattamente come descritto qui. Ma questa spiegazione potrebbe aiutarti a capire alcune delle risposte che stai ottenendo.

+0

Cosa intendi con "applicare la chiave pubblica e quindi applicare la chiave privata o viceversa"? Cosa significa "applicare" qui? – WarLord

+0

Cosa accadrebbe se Alice crittografasse il messaggio stesso anziché l'hash? Non sarebbe più semplice, o c'è un difetto di sicurezza in questo? Sto parlando ovviamente della firma, non della crittografia. –

16

Tutti sostengono che non esiste una cosa del genere o non sanno come funziona RSA, o sono bloccati nel solco della "firma".

È completamente possibile, e ha perfettamente senso, crittografare con la chiave privata. Sì, è simile alla firma, ma NON è affatto ciò che la maggior parte delle biblioteche moderne prende come firma. Per loro, questo significa calcolare un message digest, o HMAC, e crittografare con la chiave privata. Il simulare la crittografia con la chiave privata per firmare ha lo stesso senso che dire che attaccare un documento in una cassaforte e lasciare la chiave in giro è una garanzia per firmare il documento.

Sì, è crittografato, perché è la stessa operazione. Il testo cifrato crittografato a chiave privata è altrettanto illeggibile quanto il testo cifrato cifrato a chiave pubblica; uno ha bisogno di entrambe le chiavi per decifrare il testo cifrato.

Vedere http://fringe.davesource.com/Fringe/Crypt/RSA/Algorithm.html per riferimento sull'algoritmo RSA.

+0

I due collegamenti in [questo post] (http://stackoverflow.com/a/2350959/1299353) parlano all'implementazione specifica di RSA e quanto è sicura la sua crittografia a chiave privata è – Jett

+0

Trovo che questa risposta sia divertente ... Sono non sono sicuro che non sarei d'accordo con un corpo accademico di crittografi e matematici. – jww

+0

Sì, quindi questo è specifico per l'impianto RSA, giusto? E e D sono la magia pubblica/privata, e hai solo bisogno di 1 di loro per crittografare/decifrare. Accade solo che RSA includa altri dati nella chiave pubblica P e Q (che potrebbe anche essere nella chiave privata). – therealsix

0

È possibile crittografare e decrittografare con PrivateKey. Infatti PrivateKey contiene sia Private che PublicKey.

In teoria, almeno, è possibile crittografare con PublicKey e decifrare con PrivateKey e viceversa. In VB.net vedo il primo caso che funziona e la seconda genera l'errore BadKey

+2

Devo crittografare con PrivateKey e decifrare con PublicKey. Dopo un giorno di tentativi falliti ho capito che 'RSACryptoServiceProvider.Encrypt' utilizza sempre PublicKey anche quando l'oggetto' RSACryptoServiceProvider' viene creato da PrivateKey. D'altra parte non posso usare 'Sign' perché richiede l'algoritmo hash ma voglio crittografare i dati senza hash. In altre parole, il problema è nell'implementazione .Net. – i486

0

È possibile eseguire entrambe le operazioni; criptare con privato e decifrare con pubblico, OR, cifrare con pubblico e decifrare con privato. Non è possibile crittografare quindi decifrare con la sola chiave privata, né si può fare lo stesso con le sole chiavi pubbliche.

Remus l'ha inchiodato; la crittografia con la chiave privata non ha molto senso quando la chiave di decodifica è ben nota e pubblica.

Inoltre, è possibile derivare la chiave pubblica dalla chiave privata, ma non viceversa.

+0

Trovo che anche questa risposta sia divertente ... Non sono sicuro che non sarei d'accordo con un corpo accademico di crittografi e matematici. – jww

+0

Sì, anche io mi chiedo il punto di crittografia con la chiave privata, quando si suppone che la chiave pubblica sia nota. A meno che non sia la chiave pubblica (anche se) chiamata "pubblica"; non è davvero reso pubblico a tutti, ma solo alla parte interessata. –

Problemi correlati