Posso usare una chiave privata come chiave pubblica e viceversa?

31

Ho il codice per crittografare i dati usando una chiave pubblica e decifrarlo usando una chiave privata. Ciò è utile quando un cliente desidera inviare dati a un server e sa che solo il server può decrittografarlo.

Diciamo che voglio che il server crittografi i dati usando la chiave privata e decrittalo usando la chiave pubblica , come metodo per distribuire i dati che possono essere verificati proviene dal server giusto Piuttosto che modificare il codice per consentire ciò, posso semplicemente pubblicare la chiave privata e mantenere la chiave pubblica segreta? Questo influenza la sicurezza del sistema?

    
posta Graeme Perrow 21.12.2011 - 16:09
fonte

4 risposte

43

But say I want the server to encrypt data using the private key and decrypt it using the public key, as a way of distributing data that can be verified to have come from the right server.

Puoi farlo - questo è, ad un livello molto semplicistico, come funziona la firma RSA (nota, semplicistica - c'è un po 'di più in essa).

Rather than modify the code to allow this, can I simply publish the private key and keep the public key secret? Does this affect the security of the system?

Tu non devi pubblicare la chiave privata - RSA è una permutazione trapdoor che significa:

  • Se si cripta con una chiave pubblica, è possibile decodificare con la chiave privata.
  • Se si cripta con una chiave privata, è possibile decodificare con una chiave pubblica.

Pertanto, RSA supporta sia la firma che la crittografia facendo affidamento sull'utente finale che ha solo la chiave pubblica.

Nel tuo caso, se il cliente desidera verificare i dati provengono dal server, applichi il secondo caso di RSA e decifri i dati delle firme usando la chiave pubblica che hai già.

Inoltre, poiché è una permutazione, non devi assolutamente modificare il tuo codice. Entrambe le chiavi dovrebbero funzionare utilizzando la stessa funzione. Mi aspetterei che qualsiasi libreria crittografica decente abbia API per la verifica delle firme in base ai vari standard esistenti: una di queste sarebbe probabilmente una buona scommessa.

RSA Labs fornisce una bella spiegazione di questo .

Se si desidera estendere questo tra i server, o verificare le comunicazioni client - generare chiavi per ogni entità e scambiare quelle pubbliche. Il processo può quindi essere utilizzato su entrambe le estremità.

Teoricamente parlando, e e d sono intercambiabili (che è il motivo per cui RSA funziona) (uno deve essere designato come segreto e tenuto segreto) ma p e q devono sempre essere tenuti segreti in quanto consentono di derivare d da e e viceversa. Tuttavia, devi essere estremamente attento nella comprensione della chiave privata: il tuo software memorizza p / q nella chiave privata? Se è così, non puoi pubblicarlo così com'è. Inoltre, quando dico intercambiabile - una volta che pubblichi uno di quella coppia (eed con il tuo modulo n) devi proteggere l'altro con la tua vita . In pratica, come Graeme collegato nel commenti e viene spesso scelto come valore piccolo / fisso. Il mio commento su e / d è chiaramente intercambiabile non si applica quando e è facilmente determinato. Fare questo genere di cose ha quindi il potenziale di confusione e cattiva attuazione. Utilizza una libreria di terze parti / non iniziare a pubblicare le chiavi private.

    
risposta data 21.12.2011 - 18:00
fonte
7

Sì, puoi cifrare usando una chiave privata e decifrare usando una chiave pubblica, NON distribuire la tua chiave privata (le chiavi private possono generare chiavi pubbliche e l'intero sistema di crittografia è ormai inutile), presumo che tu voglia fai qualcosa del genere:

Il server crittografa i dati, li invia ai client.

I client hanno una chiave pubblica e possono decodificare i dati dal server.

In questa circostanza, avrebbe senso, se il server sta eseguendo sia la crittografia che la decrittografia, non ho idea del motivo per cui vorresti un'implementazione crittografica asimmetrica.

La regola si applica sempre però: la chiave privata rimane privata e non lascia il server.

    
risposta data 21.12.2011 - 17:33
fonte
1

But say I want the server to encrypt data using the private key and decrypt it using the public key:

Il server può crittografare i dati utilizzando la sua chiave privata e il ricevitore può decifrare utilizzando le chiavi pubbliche del server, questo è possibile. Tuttavia, questo scenario viene utilizzato per firmare digitalmente un documento e, come dici tu, "un modo di distribuire i dati che possono essere verificati provenire dal server giusto", in quanto potrebbe essere utilizzata solo la chiave corrispondente (chiave pubblica del server) per decifrare i dati. La chiave pubblica del server è verificata dal corrispondente certificato digitale generato e firmato digitalmente dal server.

can I simply publish the private key and keep the public key secret?

Non dovresti mai pubblicare la chiave privata, come suggerisce il nome.

Does this affect the security of the system?

Sì, anche questo sistema non è fattibile, ad esempio, se si utilizza Diffie-Hellman (uno dei protocolli di scambio di chiavi più utilizzato), il server e tutti i client devono condividere valori pubblici, che sono utilizzati per calcolare le chiavi di sessione. Quindi, se tu come utente pubblichi la tua chiave privata, è molto facile calcolare la chiave pubblica, il che non è possibile o molto difficile al contrario.

    
risposta data 27.05.2018 - 12:03
fonte
0

Non so se potresti criptare con la chiave privata e decifrare con la chiave pubblica, ma se potessi, allora non sarebbe molto sicuro, dato che la chiave di decrittazione è pubblica - la tua chiave privata dovrebbe essere mantenuta privato.

Se si desidera semplicemente verificare che il mittente del messaggio, invece, si firmano i dati utilizzando la chiave privata del mittente e il destinatario verifica la firma utilizzando la chiave pubblica del mittente.

Se si desidera sia crittografare i dati e verificare il mittente, crittografare e firmare, nessuno dei quali richiede l'esposizione della chiave privata.

    
risposta data 21.12.2011 - 16:39
fonte

Leggi altre domande sui tag