Domanda:
Perché non puoi lavorare all'indietro con la chiave pubblica per decrittografare un messaggio?
Max
2015-04-22 18:51:02 UTC
view on stackexchange narkive permalink

Come suggerisce il titolo, sono curioso di sapere perché non puoi lavorare a ritroso utilizzando un messaggio, una chiave pubblica e un messaggio crittografato per capire come decrittografare il messaggio!

Non capisco come si può crittografare un messaggio utilizzando una chiave e poi come non si può lavorare all'indietro per "annullare" la crittografia?

Un bel video sulla crittografia RSA: https://www.youtube.com/watch?v=M7kEpw1tn50 Mi ha aiutato a capire perché è così dannatamente difficile da decifrare :)
Mi piace questo video che utilizza la miscelazione dei colori: https://www.youtube.com/watch?&v=3QnD2c4Xovk#!
Il punto centrale della crittografia a chiave asimmetrica è che la chiave che usi per crittografare * non * può * essere usata per decrittografare: hai bisogno della sua controparte.
@BadSkillz - Grazie ... ora finirò di perdere il resto della giornata guardando i loro altri video. : P
Perché non puoi semplicemente lavorare all'indietro con un hash MD5 per trovare l'input originale? (o almeno * un * input che ti dà lo stesso hash)
In realtà puoi! Il problema è andare avanti e tornare indietro non sono qualcosa che puoi fare con la stessa efficienza. Contiamo sul fatto che il lavoro a ritroso sia fuori portata in termini di tempo per farlo.
@BadSkillz Video abbastanza buono, ma ha un paio di difetti. Suggerisce che RSA viene utilizzato in modalità ECB, che è una cattiva idea per diversi motivi. Inoltre l'utilizzo di un modulo uniforme è leggermente fuorviante.
Ecco alcune altre risposte che potrebbero essere più utili per alcune persone. Penso che l'intento originale della domanda fosse "se i passaggi X con ingressi Y sono ben noti, allora perché non possono essere fatti al contrario già sapendo questi per ottenere la risposta originale?" correlato la meccanica specifica effettiva di funzionamento degli algoritmi, e non tanto l'offuscamento / entropia umana più autoevidente utilizzando la parte matematica. Il link: https://crypto.stackexchange.com/questions/18658/why-cant-you-decrypt-an-encrypted-message-with-just-the-public-key
È effettivamente possibile per un hacker decrittografare il messaggio utilizzando solo la chiave pubblica.Ma oggi è estremamente difficile per qualsiasi computer.Perché ripristinare quel messaggio crittografato utilizzando quella chiave pubblica è un'operazione matematica molto difficile, specialmente quando quella chiave è grande quanto un numero di 2048 bit.La forza dell'operazione matematica si basa sulla durezza della scomposizione in fattori primi di un gran numero. Ecco un ottimo video che spiega questo https://www.youtube.com/watch?v=wXB-V_Keiu8
Sette risposte:
Lucas
2015-04-22 20:32:30 UTC
view on stackexchange narkive permalink

Ci sono funzioni unidirezionali nell'informatica (non dimostrate matematicamente, ma sarai ricco e famoso se dimostrerai il contrario). Queste funzioni sono facili da risolvere in un modo ma difficili da invertire, ad es. è facile calcolare 569 * 757 * 911 = 392397763 in un minuto o due su un pezzo di carta. Dall'altro, se ti dessi 392397763 e ti chiedessi di trovare i fattori primi, avresti un momento molto difficile. Ora, se questi numeri sono davvero grandi, anche il computer più veloce del mondo non sarà in grado di invertire la fattorizzazione in tempi ragionevoli.

Nella crittografia a chiave pubblica queste funzioni unidirezionali sono utilizzate in modo intelligente per consentire a qualcuno di utilizzare la chiave pubblica per crittografare qualcosa, ma rendendo molto difficile decrittografare il messaggio risultante. Dovresti leggere l'articolo Wiki RSA cryptosystem.

Affermazioni audaci. L'esistenza di funzioni unidirezionali è matematicamente dimostrata (alcuni anni fa non lo era)? Esiste una prova che le funzioni utilizzate nei sistemi crittografici a chiave pubblica siano davvero unidirezionali?
@jknappen Dimostrare la loro esistenza o la loro mancanza significherebbe risolvere P = NP. Tuttavia, non dobbiamo fare affidamento sul fatto che siano matematicamente dimostrati come unidirezionali per usarli per la sicurezza del computer: nessuno è ancora riuscito a trovare un modo rapido per fattorizzare numeri primi grandi.
@AronFoster: Non sappiamo se qualcuno lo ha fatto.
@jknappen: Abbastanza giusto (ho aggiunto una nota tra parentesi). Dimostrare matematicamente l'esistenza di funzioni unidirezionali si è rivelato estremamente difficile, ma i cripto-sistemi funzionano partendo dal presupposto che esistano e penso che anche la stragrande maggioranza dei matematici e degli informatici presume che esistano.
@GuntramBlohm E non sappiamo se ogni chip Intel abbia una backdoor che consentirà alla NSA di leggere tutto ciò che scrivi. Ci sono un numero infinito di rischi là fuori, e c'è un punto in cui qualcosa è così improbabile su cui non vale la pena concentrare la tua attenzione.
Queste osservazioni sono davvero fuori portata della domanda, che è ovviamente una domanda per principianti. Essere avvocato sottolineando che non abbiamo tecnicamente dimostrato l'esistenza di funzioni unidirezionali quando in pratica vengono utilizzate sempre come tali, confonderà semplicemente il richiedente e non fornisce alcun valore reale. Quindi questo non è "abbastanza giusto" e imo non avresti dovuto modificarlo.
@AndreasBonini, questo sarebbe un esempio di [mentire ai bambini] (https://en.wikipedia.org/wiki/Lie-to-children)
@GuntramBlohm Essere in grado di calcolare rapidamente il prodotto di grandi numeri primi non è qualcosa che rimarrebbe un segreto strettamente tenuto da qualche governo. Sarebbe un importante risultato matematico del genere che accade forse una volta in una generazione.
@AronFoster Non lo facciamo? Pensavo che tutti sapessero di averlo fatto.
Non hai bisogno solo di una funzione unidirezionale (come una funzione hash), ma di solito una funzione unidirezionale della botola. (Inoltre, non ne hai bisogno solo per esistere, ma in realtà la funzione che stai usando è una.)
I siti di scambio di stack @AndreasBonini non sono solo per la persona che pone la domanda. Sono anche per altri che hanno la stessa domanda. Non è necessario tralasciare intenzionalmente i dettagli: basta spiegarlo in termini semplici (come ha fatto Lucas).
@AronFoster: Il factoring di numeri primi grandi è facile. La fattorizzazione dei non primi senza piccoli divisori primi è difficile.
@mason: dipende da quanto pedanti sono i dettagli. Questo è analogo al menzionare il potenziale disturbo dei raggi cosmici quando qualcuno chiede come eseguire una moltiplicazione in C ++
@AronFoster Non credo che il problema del factoring sia equivalente a P = NP (o almeno non dimostrato di esserlo).
@AndreasBonini No, non è affatto simile a quello. Lucas ha spiegato in termini chiari come funziona la crittografia ed è molto importante comprendere i limiti di quel processo. Non ci vuole un genio per capire cosa ha scritto Lucas, che è ciò che lo rende una buona risposta. Non incoraggiare le persone a tralasciare dettagli importanti su Stack Exchange, perché le risposte sono per * tutti *, non solo per la prima persona che lo chiede. Questo è un principio fondamentale dei siti SE.
Probabilmente si intendeva @tomasz "Factor large [semiprimes] (http://mathworld.wolfram.com/Semiprime.html)".
abligh
2015-04-23 17:21:57 UTC
view on stackexchange narkive permalink

La tua domanda è un po 'come questa (con scuse a Tom Stoppard): "perché posso mescolare la marmellata nel mio budino di riso, ma non mescolarla di nuovo?"

Alcune operazioni matematiche sono facili da eseguire sia all'indietro che in avanti. Ad esempio, puoi aggiungere 100 a un numero con la stessa facilità con cui sottrai 100. Tuttavia, alcuni sono più difficili da invertire. Ad esempio, se prendo x e trovo g (x) = a (x ^ 5) + b (x ^ 4) + c (x ^ 3) + d (x ^ 2 ) + ex + f , devo fare semplicemente moltiplicazioni e addizioni semplici. Ma tornare da g (x) a x è difficile (in modo algebrico) poiché non esiste una soluzione algebrica generale per un'equazione quintica. Non è immediatamente ovvio perché dovrebbe essere così (al contrario di un'equazione quadratica), ma lo è. Per un esempio più appropriato, se ti dicessi che 34129 e 105319 erano entrambi primi (cosa che sono) potresti scoprire rapidamente che il loro prodotto era 3594432151. Tuttavia, se ti chiedessi di trovare i due fattori primi di 3594432151 , probabilmente lo troverai piuttosto difficile.

La crittografia a chiave pubblica richiede un paio di chiavi. In generale, la chiave privata fornisce i parametri di un algoritmo difficile da invertire che va in una direzione (ad es. Testo semplice in testo cifrato), e la chiave pubblica fornisce parametri per un algoritmo difficile da invertire che va nell'altra.

Quindi, il motivo per cui non puoi lavorare all'indietro è semplicemente perché l'algoritmo è progettato per renderlo difficile.

Migliore risposta rispetto al resto.
Thomas Pornin
2015-04-22 19:12:50 UTC
view on stackexchange narkive permalink

Giocoleria è facile: basta lanciare le palline al momento giusto, in modo da avere la mano libera quando cadono. Con una o due palline, questo è banale. Con tre, è abbastanza facile. Con più palle, (sorprendentemente) diventa più difficile. Anche sostanzialmente più difficile.

In generale, la crittografia "inversa" eseguita utilizzando una chiave n bit è come giocoleria con 2 n palline. Con una chiave a 2048 bit è come 32317006071311007300714876688669951960444102669715484032130345427524655138867890893197201411522913463688717960921898019494119559150490921095088152386448283120630877367300996091750197750389652106796057638384067568276792218642619756161838094338476170470581645852036305042887575891541065808607552399123930385521914333389668342420684974786564569494856176035326322058077805659331026192708460314150258592864177116725943603718461857357598351152301645904403697613233287231227125684710820209725157101726931323469678542580656697935045997268352998638215525166389437335543602135433229604645318478604952148193555853611059596230656 palle. O così.

(Ovviamente, poiché gli algoritmi a chiave pubblica utilizzano molta struttura matematica, le menti intelligenti hanno sfruttato la matematica per ridurre quel numero di palline a 162259276829213363391578010288128, che è notevolmente inferiore, ma ancora ben oltre l'aggregato potenza di tutti i computer esistenti sulla Terra.)

Hahaha! Solo per completezza, potresti menzionare per cosa è una metafora "palle"?
È una metafora per la prima fila di un'esplorazione in ampiezza di un grafico che rappresenta il sistema di crittografia espresso come un automa a stati finiti.
@ThomasPornin: Ottima risposta! Potete fornire una citazione per il valore "162259276829213363391578010288128"? Sembra che sia 2 ^ 107, e ho trovato questo: https://www.imperialviolet.org/2011/04/09/multiprime.html, ma mi chiedevo se avessi una fonte più autorevole o una spiegazione che preferivi .
Esistono vari organismi che tentano di effettuare stime del confronto tra le dimensioni delle chiavi RSA e le chiavi simmetriche. In definitiva, non c'è una sola risposta poiché stiamo confrontando diversi tipi di algoritmi (per il cracking di chiavi simmetriche, la RAM non conta; mentre conta molto per la fattorizzazione dei numeri interi). L'equivalenza per RSA varia quindi tra circa 100 e 112 bit, a seconda di chi chiedi e di cosa consideri un'operazione "unitaria". "107" derivato dall'applicazione grezza della complessità del [General Number Field Sieve] (http://en.wikipedia.org/wiki/General_number_field_sieve).
Se vuoi fonti "autorevoli", dai un'occhiata a [questo sito] (http://www.keylength.com/en/). In particolare, l'applicazione delle equazioni di ECRYPT II (dal loro ultimo rapporto annuale disponibile, che sembra essere del 2012 ...) fa sì che RSA-2048 sia "equivalente" a un algoritmo simmetrico a 103 bit.
Questa risposta non coglie il punto in quanto potrebbe dare l'impressione che la crittografia con una tale chiave sia un compito altrettanto difficile.
Sebbene questa risposta sia divertente per chiunque comprenda effettivamente le basi della crittografia, non è certo informativa e non penso che affronti effettivamente la domanda posta.
Rob
2015-04-23 07:31:56 UTC
view on stackexchange narkive permalink

Max, il miglior strumento mai creato per pensare alla crittografia è il cubo di Rubik. Se presumi un mondo in cui risolverli è un problema irrisolto, ci sono analoghi diretti per DiffieHellmanKeyExchange, firma RSA, crittografia RSA, ecc. Puoi giocare brutti scherzi annotando le mosse ed eseguendole sui cubi e scambiandole; e le equazioni della teoria dei gruppi sono le stesse per la crittografia e per i cubi di rubik.

Ma la cosa fondamentale da tenere a mente, che penso sia ciò che deve disturbarti: hai ragione. È "possibile" invertire tutte queste operazioni. Tecnicamente, abbiamo f (x) e f_inverse (x), dove f (x) viene eseguito in tempo polinomiale (ovvero: puoi crittografare rapidamente grandi numeri), mentre f_inverse (x, s) viene eseguito in tempo esponenziale (ad esempio: anche medio i numeri non sono fattibili) - a meno che tu non abbia i segreti giusti da inserire in f_inverse. Tali coppie di funzioni sono chiamate botole. Le trappole comuni sono problemi di teoria dei numeri come la scomposizione in fattori primi e i logaritmi discreti.

Pensare a un cubo di Rubik come un'analogia per la crittografia porterebbe ad avere la domanda dell'OP. Se eseguo un gruppo di passaggi (la chiave) con un cubo in un determinato stato (testo in chiaro) per finire con un cubo in uno stato diverso (testo cifrato), posso quindi fare gli stessi passaggi all'indietro per tornare allo stato originale ( testo in chiaro). Che questo non si applichi alla crittografia asimmetrica è la domanda che viene posta.
Nella notazione del cubo di Rubik, l'operazione Reverse e l'operazione Commutator sono le stesse. Per invertire un'operazione, applicare non solo le funzioni inverse, ma applicarle in ordine inverso. cioè: (L * F * U) .inv == (U.inv * F.inv * L.inv). La differenza con la crittografia asimmetrica è che l'operazione .inv è progettata per essere così inefficiente che non puoi eseguirla senza l'aiuto di una chiave segreta.
Questa idea si estende agli hash. Un hash è una funzione per la quale l'operazione .inv è inefficiente e non esiste una chiave segreta per renderla efficiente. La crittografia della chiave simmetrica è dove la chiave .inv è efficiente. ad esempio: Msg * SymmetricKey = CipherText. CipherText * SymmetricKey == Msg. Perché X * X.inv == 1.
Il punto è che in realtà ha ragione. Non è "impossibile" annullare la crittografia. È inefficiente. Non solo, per gli schemi botola che usiamo, non è nemmeno dimostrato che sia inefficiente. Ci auguriamo che nessuno capisca presto la scomposizione in fattori primi.
BeepBeep
2015-04-22 19:16:03 UTC
view on stackexchange narkive permalink

Quello che devi fare è leggere la crittografia a chiave pubblica. La risposta breve è che si basa su un algoritmo che consente a una chiave di crittografare e all'altra chiave di eseguire la decrittografia, motivo per cui non è possibile lavorare all'indietro.

Questa è una spiegazione semplificata di ciò che sta accadendo, se vuoi arrivare al cuore del problema puoi guardare a fonti come le seguenti, ma tieni presente che precipita rapidamente in un po 'di matematica questo potrebbe essere o meno facile da seguire: http://nrich.maths.org/2200

E c'è un manuale più semplice su http://doctrina.org/How-RSA-Works-With-Examples.html
woliveirajr
2015-04-23 17:43:47 UTC
view on stackexchange narkive permalink

In questa crittografia a chiave pubblica (o codifica asimmetrica), per crittografare qualcosa, fai quanto segue:

Prendi il tuo messaggio da trasmettere (come un numero): diciamo che è 5.

Calcola 3 ^ 5 (3 elevato al "segreto") = 243

Calcola il modulo, diviso per un altro numero: diciamo 143. Quindi, 243/143 = 100.

Ecco fatto. Il tuo segreto crittografato è 100.

Per trovare il segreto, senza la chiave privata, devi solo trovare un numero che quando diviso per 143 lascia 100 come risultato, e poi trovare la radice cubica di esso.

Da dove viene il 143? Qual è la chiave pubblica qui e qual è la chiave privata? Questa risposta lascia molto a desiderare, ma è risolvibile.
@ChrisCudmore grazie, modificherò per migliorarlo come hai commentato
Sembra che il messaggio sia "5".
Pete
2015-04-25 21:48:18 UTC
view on stackexchange narkive permalink

In genere non puoi lavorare all'indietro, in modo ovvio, perché non hai abbastanza informazioni.

RSA dipende dalla difficoltà di fattorizzare grandi numeri. Generi il tuo modulo RSA n moltiplicando due grandi numeri primi, p e q. Moltiplicare p per q è facile. Puoi anche invertire l'operazione calcolando q = n / p (o p = n / q ). Quello che non puoi fare facilmente è buttare via sia p che q, quindi calcolarli da n. Questo è un problema diverso, non un'inversione di un processo che hai già utilizzato.

Allo stesso modo, la crittografia RSA di un messaggio m utilizzando la chiave di crittografia e implica l'elaborazione di (m ^ e) mod n codice>. In teoria potresti invertire m ^ e usando i log, ma senza l'operazione modulo, questo numero sarebbe troppo grande per lavorare. In ogni caso, l'operazione modulo scarta parte del numero, quindi ancora una volta non hai tutte le informazioni di cui avresti bisogno per lavorare a ritroso in modo banale.



Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...