Domanda

Da quel poco che ho capito leggendo vari materiali, la coppia di chiavi pubblica-privata è la base della crittografia asimmetrica e anche qualcosa sulla scelta di 2 numeri primi (che è più o meno la tua chiave privata) e la loro moltiplicazione (che è più o meno la tua chiave pubblica), I sembra che sia possibile generare una chiave pubblica se si conosce la chiave privata.E' corretto o sbaglio qualcosa?

[MODIFICARE]

Ciò che mi ha reso più confuso è che non è possibile serializzare la chiave RSA in XML soltanto chiave privata (utilizzando la classe .NET RSACryptoServiceProvider).Non sono sicuro che questa limitazione sia intenzionale o meno!

È stato utile?

Soluzione

Dipende dal sistema di crittografia.

Nel RSA , abbiamo (citando Wikipedia):

  

La chiave pubblica è costituito dal modulo n e del pubblico (o la crittografia) e l'esponente. Il   chiave privata è costituito dal modulo n e il (o decrittazione) esponente privato d cui   deve essere tenuto segreto.

Ora, se abbiamo n e d (la chiave privata), ci manca solo di e per la chiave pubblica. Ma e è spesso abbastanza piccola (meno di tre cifre), o anche fisso (un valore comune è 65537). In questi casi, ottenendo la chiave pubblica è banale.

curva ellittica Diffie-Hellman , la chiave privata è D, e la chiave pubblica dG (con G anche pubblico), quindi è banale pure.

Altri suggerimenti

In attuazione del sistema di crittografia più asimmetrica, il solo fatto che è assicurato è che non è possibile trovare la chiave privata dalla chiave pubblica. Viceversa, trovando la chiave pubblica dalla chiave privata è banale nella maggior parte dei casi.

Per esempio, in RSA, è possibile creare la chiave pubblica dalla chiave privata con:

openssl rsa -in private.pem -pubout -out public.pem

Ciò che è fuorviante è la terminologia: "chiave privata" si riferisce a 2 concetti diversi se si sta parlando della teoria, o tempo che si sta parlando di attuazione pratica:

  • Il teorica chiave privata è la coppia (d, n) che condivide perfetta relazione simmetrica (matematica) con (e, n) . Se si confrontano questi, non si può essere calcolato dagli altri.
  • pratica chiave privata (come nella implementazione openssl per esempio), si riferisce a un file contenente (d, n) ma anche diversi valori intermedi importanti fini velocità di decodifica . In aggiunta a ciò, la parte teoricamente "sconosciuto" della chiave pubblica e viene spesso fissato a valori comuni per convenzione (che è 0x10001 di default in OpenSSL e anche se può essere modificato, è fortemente raccomandato di attenersi a solo molto specifici valori ). Quindi dedurre la chiave pubblica (e, n) dalla chiave privata è banale per più di una ragione.

Dipende l'algoritmo, e che cosa si intende per "chiave privata".

chiavi RSA private sono spesso conservati nella loro forma "teorema cinese del resto". Ad esempio, la struttura RSAPrivateKey definito in PKCS # 1 e riutilizzato da molti altri standard crittografici prendere questo modulo. Questo modulo comprende due numeri segreti spesso indicato p e q, da cui viene calcolata la totient. Con totient e l'esponente privato, l'esponente pubblico sta rapidamente calcolato.

In ogni caso, la maggior parte delle coppie di chiavi RSA utilizzano 65537 come esponente pubblico, e il modulo è sempre trasportati come parte della chiave privata.

In qualsiasi sistema di crittografia a chiave pubblica la chiave pubblica è matematicamente correlato alla chiave privata. E 'molto semplice.

La chiave pubblica è derivata dalla chiave privata al momento della generazione, e con la chiave privata in qualsiasi momento, in futuro, è possibile ri-derivare la chiave pubblica con facilità.

Non è fattibile per andare nella direzione opposta. Data una chiave pubblica non è facile per ricavare la chiave privata. Ecco perché siamo in grado di condividere in modo sicuro le chiavi pubbliche con altre persone. Se avete abbastanza tempo cicli / CPU si poteva forza bruta, ma è probabilmente più facile aspettare per un attacco matematica sulla chiave.

Per il caso specifico di OpenSSH e ssh-keygen , sì è possibile :

  

ssh-keygen -y

     

Questa opzione consente di leggere un file privato formato OpenSSH e stampare una chiave pubblica sullo standard output.


In generale, dipende l'algoritmo e ciò che si etichetta la chiave privata. Tuttavia, qualsiasi implementazione sensibile includerà le informazioni complete (chiavi pubbliche e private) nel file segreto.

C'è un equivoco su ciò che la chiave privata è. La chiave privata è solo il (d, n) coppia e, data solo, è praticamente impossibile per generare la chiave pubblica da esso a meno che non si può supporre che l'esponente pubblico è 65537, che è il caso su quasi tutte le chiavi RSA.

Se, per qualsiasi motivo, l'esponente pubblico è un numero maggiore non è possibile creare la chiave pubblica da quella privata.

Detto questo, il valore memorizzato come "chiave privata" per i file PEM non è solo la chiave privata, ma contiene anche i fattori primi (tra le altre cose) e, di conseguenza, è facile per generare la chiave pubblica da esso.

Sì, con l'accesso alla chiave privata è possibile generare la chiave pubblica

chiave pubblica è il modulo N (ed esponente e pubblico, di solito 65537), chiave privata è data dai due primi p, q (e esponente privato d, talvolta anche parti CRT d_p, d_q per speedup) in sostanza, si ha N = pq ed e d = 1 mod ((p-1) (q-1)), si può anche calcolare d_p e d_q utilizzando CRT data chiave privata, il calcolo del modulo della chiave pubblica è la moltiplicazione "noioso" e esponente pubblico è in specificazione o calcolati utilizzando l'algoritmo di Euclide esteso se normale e non era abbastanza buono. data chiave pubblica, calcolo della chiave privata richiede o trovando d (problema RSA) o p, q (factoring, vedi campo numero setaccio per meglio algo per fare questo). Questi problemi sono dimostrato di essere equivalente in condizioni ragionevoli [Rottura RSA Genericamente è equivalente al Factoring, D. Aggarwal e U. Maurer 2008]

E 'teoricamente possibile, ma per i grandi chiavi computazionalmente impossibile.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top