Per quanto ricordo, crittografa il messaggio usando la chiave pubblica e lo decifri usando la chiave privata. La mia domanda è se sia possibile ottenere una chiave pubblica da una chiave privata RSA. Ad esempio, se ho una chiave come questa:
-----BEGIN RSA PRIVATE KEY----- MIICXgIBAAKBgQCtrKVnwse4anfX+JzM7imShXZUC+QBXQ11A5bOWwHFkXc4nTfE Or3fJjnRSU5A3IROFU/pVVNiXJNkl7qQZK5mYb8j3NgqX8zZJG7IwLJ/Pm2sRW5Q j32C/uJum64Q/iEIsCg/mJjDLh1lylEMEuzKgTdWtoeLfxDBL2AJ20qXzQIDAQAB AoGBAKNXi0GpmjnCOPDxLFg5bvQVfhLSFCGMKQny1DVEtsfgZmbixv5R2R41T4+d CHJMdEsUFFJ6I7CRLTcg1SDU8IhcAWCBRSNeVuomCHlQG16ti8HxwhiwIcjvDz/z NC2sL5ZJ2eJnhbtXLdf6pxxO1pA5vLp1AX06IaETO977XvupAkEA+ZgtGZybyUkf tEA3ekXc5eLoW+zgU0C1fATWcIZ8Iq5YV1BW+3oAzf8HgIbkQh4LM2qa6An3l+vW NXR4wICHkwJBALIhrcdJqKw36qiyenq+m78klp5SnurQifVt0Sy1GMWyOUqYz5jK t9sGo9Qn6GDuYe/XGXKWQW25PkEYXxxPPx8CQQCpICyvRidp5VrOURVGjUB5pZ+9 am02/In9V2nXJcnH1kuWHqJSFQGmlEEJHl5dTu5YEMyWnupezzd/UUThbDZxAkAz TNO5QxNalbf04YG4e9Bq2eSur+iog2pXzkqhb3404UDypNOUkz0jzOO9o8ieschu xCnGAFPTf7fYE2bAxmnNAkEA0/3bdsvJclquypqP9CQeQnxGwQtWz6+yn07gj3U1 V19mdeKCUZWklRarrcr67u9DdEx+JowyEY/ppzgeQtW01g== -----END RSA PRIVATE KEY-----
posso ottenere una chiave pubblica?
Commenti
- Questa chiave ora è trapelata su Internet e non può più essere utilizzata al di fuori degli esempi, solo così te ne rendi conto.
- ” Ecco la chiave di casa mia. Chi vuole fare una copia? ”
- Mi auguro che lOP abbia generato una chiave di esempio solo per luso in questa domanda e poi lo abbia immediatamente smaltito.
- @ basic6 ” Ecco la chiave di casa mia. Come faccio a crearmi un lucchetto per questo? ”
- Devi chiarire se ‘ stai chiedendo informazioni solo la chiave privata (nel qual caso la risposta è no) o il file della chiave privata , che per convenzione (come qui) include entrambe le chiavi.
Risposta
posso ottenere una chiave pubblica?
È facile usare openssl rsa
:
$ openssl rsa -in the-private-key-from-your-question.pem -pubout writing RSA key -----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCtrKVnwse4anfX+JzM7imShXZU C+QBXQ11A5bOWwHFkXc4nTfEOr3fJjnRSU5A3IROFU/pVVNiXJNkl7qQZK5mYb8j 3NgqX8zZJG7IwLJ/Pm2sRW5Qj32C/uJum64Q/iEIsCg/mJjDLh1lylEMEuzKgTdW toeLfxDBL2AJ20qXzQIDAQAB -----END PUBLIC KEY---
Se vuoi avere unidea di cosa è contenuto in un file chiave, puoi passare lopzione -text
per vedere un dump di debug leggibile dalluomo. In questo modo puoi vedere che un file di chiave contiene sia informazioni private ma anche informazioni pubbliche. In particolare contiene il modulo e publicExponent che descrivono completamente la chiave pubblica:
$ openssl rsa -text -in the-private-key-from-your-question.pem Private-Key: (1024 bit) modulus: 00:ad:ac:a5:67:c2:c7:b8:6a:77:d7:f8:9c:cc:ee: 29:92:85:76:54:0b:e4:01:5d:0d:75:03:96:ce:5b: 01:c5:91:77:38:9d:37:c4:3a:bd:df:26:39:d1:49: 4e:40:dc:84:4e:15:4f:e9:55:53:62:5c:93:64:97: ba:90:64:ae:66:61:bf:23:dc:d8:2a:5f:cc:d9:24: 6e:c8:c0:b2:7f:3e:6d:ac:45:6e:50:8f:7d:82:fe: e2:6e:9b:ae:10:fe:21:08:b0:28:3f:98:98:c3:2e: 1d:65:ca:51:0c:12:ec:ca:81:37:56:b6:87:8b:7f: 10:c1:2f:60:09:db:4a:97:cd publicExponent: 65537 (0x10001) privateExponent: (…)
Commenti
- @Pysis: questa risposta non riguarda ” trovare ” il pubblico dalla chiave pubblica. È semplice che tutte le informazioni necessarie sia per la parte privata che per quella pubblica siano archiviate nel file della chiave privata. Nel file della chiave pubblica invece mancano tutte le informazioni riguardanti la parte privata.
- @Pysis Questa è la crittografia asimmetrica .
- @Pysis Sì, la crittografia asimmetrica è ” leggermente asimmetrico “.
- @SteffenUllrich Quella frase dovrebbe far parte della tua risposta
- @Mehrdad: nel contesto della sicurezza informatica del mondo reale, tutto ciò che è praticamente irrealizzabile è considerato non fattibile. La sicurezza della teoria dellinformazione è qui irrilevante poiché presuppone una potenza di calcolo illimitata che semplicemente non esiste. Quindi tutte le informazioni riguardanti la parte privata sono mancanti dovrebbero essere lette come tutte le informazioni che consentono in pratica di derivare la chiave privata sono mancanti .
Risposta
In pratica, sì, puoi ottenere la chiave pubblica dalla chiave privata. In linea di principio, sarebbe possibile creare una chiave privata RSA dalla quale la chiave pubblica corrispondente non può essere facilmente ottenuto, ma ciò richiederebbe lutilizzo sia di un metodo di generazione di chiavi non standard che di un formato di archiviazione della chiave privata non standard.
Rivediamo rapidamente le basi. Una chiave pubblica RSA è composta da due valori:
- il modulo n (un prodotto di due grandi numeri primi scelti segretamente p e q ), e
- lesponente pubblico e (che può essere lo stesso per molte chiavi ed è tipicamente scelto come un piccolo primo dispari, più comunemente 3 o 2 16 +1 = 6 5537).
Una chiave privata RSA, nel frattempo, richiede almeno i seguenti due valori:
- il modulo n (come nella chiave pubblica) e
- lesponente privato d (calcolato dallesponente pubblico e e i fattori p e q del modulo).
Tuttavia, la maggior parte dei formati per larchiviazione delle chiavi private RSA, incluso PKCS1 Formato RSAPrivateKey mostrato nella tua domanda, in realtà memorizza anche una serie di valori aggiuntivi, tra cui:
- lesponente pubblico e ,
- i fattori p e q del modulo,
- gli esponenti privati ridotti d p = d mod ( p − 1) e dq = d mod ( q − 1) e
- il ” coefficiente CRT “ q inv = q − 1 mod p .
In particolare, linclusione dellesponente pubblico e nel formato della chiave privata significa che la chiave pubblica può essere estratta banalmente da un file di chiave privata conforme a PKCS1.Inoltre, anche se lesponente pubblico e non era incluso nel file della chiave privata, conoscere i fattori p e q del modulo consente entrambi gli esponenti essere facilmente calcolati dagli altri. E, infine, anche se non conoscessimo i fattori del modulo, per le chiavi RSA generate nel solito modo potremmo semplicemente testare i valori più comunemente usati di e e vedere quale di essi genera testi cifrati che possono essere decifrati correttamente utilizzando la chiave privata fornita.
Detto questo, se dovessimo utilizzare un algoritmo di generazione di chiavi RSA non standard che scelga e ( o d ) in modo casuale dallintervallo di valori ammissibile (cioè i numeri interi maggiori di 1 e minori di e coprimi con λ ( n ) = mcm ( p − 1, q − 1)) e se abbiamo utilizzato un formato di chiave privata RSA non standard che memorizzava solo le informazioni minime per la decrittografia (ad esempio n e d ), allora non sarebbe possibile calcolare la chiave pubblica dalla chiave privata senza crackare efficacemente la chiave (cioè fattorizzare il modulo).
Infatti, se usato in un uomo così non standard ner, lalgoritmo RSA diventa “simmetrico” nel senso che nessuna delle chiavi ( n , e ) e ( n , d ) può essere efficacemente calcolato dallaltro e uno dei due può essere arbitrariamente designato come chiave privata. In linea di principio, se non si lasciava che il detentore della chiave privata conoscesse la corrispondente chiave “pubblica” (il che, ovviamente, significa che non sarebbe più stata pubblica), potrebbe solo decrittare i messaggi ma non crittografarli. Purtroppo, lutilità pratica di qualsiasi schema simile è piuttosto limitata dal semplice fatto che chiunque generi la coppia di chiavi finirà inevitabilmente per conoscerne entrambe le metà.
Commenti
- Mi acciglio allultima frase. Poiché e è comunque considerato pubblico, non dimenticare e (e p e q) difficilmente può essere considerato una porta di servizio a disposizione del proprietario della chiave privata. (E se un avversario ottiene la chiave privata d, ha anche la chiave pubblica e e ha vinto)
- @HagenvonEitzen: Lultimo paragrafo parla del caso di utilizzo (non standard) in cui e non è né pubblico né piccolo .
- @HagenvonEitzen: In effetti, ho menzionato questo problema nel post collegato a crypto.SE. Qualsiasi schema che si basa sulla chiave ” public ” non può essere derivato dalla ” privato La chiave ” deve necessariamente mantenere segreta la chiave ” pubblica ” almeno ad alcune parti ( e quindi violare uno dei presupposti standard della crittografia a chiave pubblica) affinché tale funzionalità sia di qualsiasi utilità. Ma posso vedere come quel paragrafo possa essere stato fuorviante; si spera che la versione riscritta sia almeno un po più chiara.
- RSA ha uninteressante proprietà matematica che la decrittografia utilizza la stessa formula della crittografia, solo con
d
invece die
. Grazie a questo, puoi scambiaree
ed
(ovvero utilizzare la chiave privata per la crittografia e quella pubblica per la decrittografia). Quindi ottieni lo schema della firma elettronica.
Risposta
Sì. È anche abbastanza facile. Se guardi la specifica RSA, una chiave pubblica richiede n
e e
. Una chiave privata potrebbe avere p
q
d
. Usali per calcolare.
n=p*q e=mod_inverse(d,euler_totient(n))
Se desideri impacchettarli in un formato PEM, vedi https://github.com/ius/rsatool
Commenti
- Inquadrato come una risposta matematica, questo è sbagliato. Una chiave privata potrebbe avere solo n e d, e da questo è impossibile in generale per calcolare e. ‘ è solitamente possibile in pratica solo perché e è quasi sempre selezionato tra una manciata di valori. Inquadrato come una risposta pratica, questo è sbagliato: e è, in pratica, sempre inclusi con gli altri parametri (almeno n e d, solitamente anche i parametri necessari per il calcolo basato su CRT).
- Concordato, ma praticamente vengono archiviati gli RSA con chiavi private CRT come una tupla di (n, e, d, p, q, dP, dQ, qInv) che è il caso qui. Stavo solo cercando di impostare matematicamente i componenti.
- Sì: praticamente, le chiavi private sono solitamente memorizzate come una tupla che contiene e . Non è necessario calcolare e.
- @Gilles Dal post: ” una chiave pubblica richiede
n
ee
.” e da sudhackar ‘ s commento: ” ma praticamente RSA con chiavi private CRT sono di solito memorizzato come una tupla di (n, e, d, p, q, dP, dQ, qlnv) “, il che mi porta alla conclusione che in pratica le chiavi private vengono solitamente memorizzate come una tupla che contiene la chiave privata . Non è necessario calcolare la chiave privata, rendendo così irrilevante lintera domanda e tutte le sue risposte. Non ‘ non capisco il tuo commento più recente. La risposta di sudhackar ‘ mostra come trovare la serie di possibili chiavi pubbliche dalle informazioni meno utili possibili. - @ wizzwizz4 Se hai p, q e d , hai più delle informazioni meno utili possibili per una chiave privata. ‘ non ho mai visto chiavi private con p, qed ma non ne e. Hai bisogno di n per fare qualcosa di utile con la chiave e memorizzare peq invece di n ‘ non guadagna spazio.