it-swarm-eu.dev

Come si potrebbe violare un protocollo di crittografia debole ma sconosciuto?

Stavo leggendo questa domanda interessante:

La sicurezza della password prodotta da mio sviluppatore è corretta o sbagliata, e perché?

Mostra un debole algoritmo di produzione casalinga sviluppato da "Dave" e le risposte discutono sul perché questa sia una cattiva idea. (In realtà algoritmo di hashing anziché crittografia, ma la mia domanda si applica a entrambi.)

Per me ha senso che un algoritmo di birra fatta in casa sia una pessima idea, ma c'è una cosa che non capisco.

Supponiamo che io sia un attaccante e che debba affrontare un algoritmo di crittografia debole ma sconosciuto, sviluppato da "Dave". Come lo spezzerei? Non saprei nemmeno da dove cominciare. Sarebbe una serie apparentemente insignificante di personaggi.

Ad esempio, supponiamo che l'algoritmo home-brew sia così:

  • Utilizzare un algoritmo di crittografia ben noto debole sui dati originali, quindi:
  • Esegue un bit-bit negativo su qualsiasi byte il cui numero seriale nel file ha una somma ripetuta di cifre che è primo. (O qualsiasi altra tale manipolazione matematica, questo è solo un esempio.)

Come si potrebbe hackerare un file prodotto da un tale algoritmo senza conoscendolo in anticipo?

Modifica: Tutti, per favore, non tentate di convincermi di quanto sia difficile mantenere segreto un algoritmo. Rispondi a questa domanda partendo dal presupposto che l'algoritmo è tenuto completamente segreto, nonostante quanto sia difficile da raggiungere nella vita reale.

Inoltre, supponiamo che non abbia alcun accesso all'algoritmo, solo ai dati risultanti.

87
Ram Rachum

Supponiamo che io sia un attaccante e che debba affrontare un algoritmo di crittografia debole ma sconosciuto, sviluppato da "Dave". Come lo spezzerei? Non saprei nemmeno da dove cominciare. Sarebbe una serie apparentemente insignificante di personaggi.

Esatto, non lo faresti. Ecco alcuni dati crittografati (4587556841584465455874588). Hai idea di cosa significhi? Assolutamente no.

Tuttavia, ti manca la chiave centrale, fondamentale e integralmente importante del pilastro centrale dell'universo che tiene insieme la crittografia. L'idea è semplice:

the key is everything

Questo è tutto. Questa è la parte che devi proteggere. La parte che devi custodire con la tua vita e la speranza che nessuno ti colpirà con un martello fino a quando non dici loro di cosa si tratta.

Su questa base, devi presumere che il tuo algoritmo possa essere letto dall'attaccante. Sanno come funziona. Possono documentarne il processo. Se ci sono punti deboli, li troveranno. E li sfrutteranno. Come quel arrabbiato CIA papà di Taken.

Si scopre che questo è meno di un presupposto e più del caso pratico in uso. Dave, il crittografo home brew, vuole includere un algoritmo di crittografia nel suo programma. Decidendo di evitare tutto il lavoro di test e progettazione che i crittografi hanno svolto per lui gratuitamente nel corso degli anni, scrive qualcosa che coinvolge lo strano xor, compila il suo programma e lo dà utile agli amici.

Quell'algoritmo è ora nelle loro mani. Gioco finito.

Ora, potresti chiedere "non posso semplicemente mantenere segreto l'algoritmo? Funzionerà, vero?" Oh Dave, per favore. Nonono. Il problema con gli algoritmi segreti è che è molto più probabile che vengano rubati. Dopotutto, la chiave è diversa per ogni utente (in realtà, questo non è un requisito, ma supponiamo che sia per semplicità) ma l'algoritmo rimane invariato. Quindi hai solo bisogno di una delle tue implementazioni per essere esposta a un attaccante ed è di nuovo finita.


Modifica : Ok, in risposta alla domanda aggiornata del PO. Supponiamo per un momento che l'algoritmo sia totalmente sconosciuto. Ognuno dei due partecipanti a una conversazione crittografata ha una perfetta sicurezza dell'implementazione dell'algoritmo.

In questo caso, hai dei dati da analizzare. È possibile effettuare una delle seguenti operazioni:

  • Analizza lettere conosciute frequentemente . Questo è il modo in cui rompi un tipico codice di spostamento di Cesare.
  • Tentativo di indovinare la lunghezza della chiave. Con queste informazioni, è possibile cercare blocchi ripetuti di testo cifrato che possono corrispondere allo stesso testo in chiaro.
  • Tentativo di coincidenza e altre misure simili utilizzate per infrangere il codice vigenere, poiché molti codici polialfabetici sono (probabilmente) solo varianti di questo.
  • Guarda per i modelli. Qualsiasi modello potrebbe darti la chiave.
  • Cerca altri indizi. Le lunghezze corrispondono a una certa misura, ad esempio sono multipli di un certo valore come un limite di byte e quindi sono (eventualmente) riempiti?
  • Tentativo di analisi con una delle tecniche di crittografia a cifratura simmetrica . Questi si basano sulla conoscenza dell'algoritmo in molti casi, quindi potrebbero non essere applicabili qui.
  • Se ritieni che i dati in questione rappresentino uno scambio di chiavi, puoi provare una delle molte tecniche per interrompere algoritmi a chiave pubblica .

Il fatto è che un breve pezzo di dati da un algoritmo sconosciuto potrebbe essere indecifrabile. Tuttavia, ciò non significa che si debba fare affidamento sul fatto che questo sia il caso. Più dati può recuperare un crittografo, più è probabile che rompano l'algoritmo. Probabilmente non si sa senza seria crittoanalisi quale sia quel limite - per esempio, è ragionevole supporre che si possa forzare un algoritmo di cifratura caeser per parole di tre lettere, poiché ce ne sono poche che abbiano un senso.

Anche tu sei contro i problemi di riutilizzo. Nella seconda guerra mondiale, l'Engima ha superato questo problema avendo impostazioni programmabili per il loro algoritmo segreto, ma anche questo è stato rotto.

C'è anche l'elemento umano della crittografia da considerare. Mi rendo conto che l'etichetta sulla scatola dice "usa una volta, non digerire" ecc., Ma gli esseri umani sono umani e probabilmente useranno due, tre volte ecc. Qualsiasi comportamento del genere gioca nelle mani del crittografo.

60
user2213

Un algoritmo di "crittografia" sconosciuto è stato storicamente raggiunto almeno una volta. Sto parlando di Minoan Linear B script , un metodo di scrittura che fu usato a Creta intorno al 1300 a.C. Il metodo è stato perso alcuni secoli dopo, con la morte di tutti i praticanti e il crollo generale della civiltà durante il cosiddetto età scura greca . Quando gli archeologi iniziarono a setacciare la terra intorno a Cnosso e in altre località, alla fine del 19 ° secolo, tutto ciò che ottennero fu un mucchio di tavolette con segni sconosciuti, senza la minima idea del sistema di scrittura utilizzato per produrle.

La storia interessante qui è che Linear B era svelato negli anni '50, usando gli stessi strumenti di analisi che erano impiegati contro i sistemi di crittografia di quel tempo. In effetti, la scrittura è stata considerata come un "algoritmo di crittografia sconosciuto". Ha ceduto ad analisi statistiche, inferenze concatenate e alcune ipotesi sul testo in chiaro (fondamentalmente, l'assunto che la lingua di base per una variante del greco). Questa è un'illustrazione classica e magistrale di come funziona la crittoanalisi contro i "sistemi crittografici manuali".


Naturalmente, supponendo che un algoritmo crittografico possa essere in uso e rimanere ancora segreto, non è plausibile. Per lo stesso presupposto, non esiste pirateria di videogiochi o contenuti multimediali. Il mondo reale ci ricorda implacabilmente che questo non è vero. L'unico modo noto con cui un algoritmo può rimanere segreto è quello di uccidere i suoi inventori e praticanti, distruggere il loro apparato e attendere alcuni secoli. Questo ha alcuni effetti collaterali scomodi.

E anche se, in una determinata istanza specifica, i dettagli di un algoritmo non sono trapelati ancora, non c'è modo di quantificare quanto segreto l'algoritmo è, vale a dire quanto tempo impiegherà il reverse engineering, tangenti o furti genuini per ricostruire l'algoritmo. Questo è il motivo principale per cui i crittografi, circa 40 anni fa, decisero che la chiave e l'algoritmo dovessero essere divisi, con la chiave segreta e l'algoritmo non -secret: è possibile quantificare la segretezza di una chiave, non la segretezza di un algoritmo.

Questo ci dà un'idea della tua domanda specifica. Il tuo "algoritmo segreto" si basa sul concetto di "manipolazione matematica". Quanti di questi sono? Puoi stimare o descrivere l'insieme di "manipolazioni matematiche"? Scoprirai che un algoritmo di crittografia è esso stesso una "manipolazione matematica", quindi la tua domanda è piuttosto mal definita.

51
Tom Leek

Per attaccare un protocollo crittografico, hai i seguenti metodi di attacco

  • Testo normale noto: Prova a trovare correlazioni tra il testo in chiaro che hai e il testo cifrato corrispondente.

  • Testo in chiaro scelto: Crittografia del testo in chiaro specifico e studio delle modifiche al testo cifrato man mano che il testo in chiaro cambia.

  • Testo cifrato scelto: Decodifica del testo cifrato specifico e studio delle modifiche al testo semplice e al testo cifrato.

  • Testo cifrato noto: Dove tutto ciò che hai è il testo cifrato, di seguito è riportato un semplice esempio.

Molto tempo fa ho seguito una lezione di crittografia, in una delle lezioni che ci hanno insegnato la crittotonalisi di cifre di sostituzione . Non è così che vanno le cose adesso, ma è qui che è iniziata la scienza della crittografia, ed è così che è iniziata la criptonalisi.

Diciamo che puoi attraverso questo testo cifrato.

Mx qeoiw wirwi xs qi xlex e lsqi-fvia epksvmxlq mw e zivc feh mhie, fyx xlivi'w sri xlmrk M'q rsx yrhivwxerhmrk.

Non conosci l'algoritmo, non conosci la chiave. Come dovresti iniziare?

  • Analizza la frequenza delle lettere: la lunghezza totale è di 87 lettere. Vediamo che i è stato usato 12 volte -> ~ 13%. Secondo articolo di Wikipedia sulla frequenza delle lettere , è probabile che questa lettera sia e. Il nostro testo cifrato è ora:

Mx qeoew werwe xs qe xlex e lsqe-fvea epksvmxlq mw e zevc feh mhee, fyx xleve'w sre xlmrk M'q rsx yrhivwxerhmrk.

  • Ora la seconda lettera più frequente è x è stata utilizzata 11 volte -> ~ 11%, quindi è probabile che sia t. Il nostro testo cifrato è ora:

Mt qeoew werwe ts qe tlet e lsqe-fvea epksvmtlq mw e zevc feh mhee, fyt tleve'w sre tlmrk M'q rst yrhivwterhmrk.

  • Ora stiamo iniziando a vedere gli schemi. Sostituzione i->e e x->t suggerisce che la chiave potrebbe essere 4. Proviamolo:

Per me ha senso che un algoritmo di birra fatta in casa sia una pessima idea, ma c'è una cosa che non capisco.

Ahaa! Ce l'abbiamo! Ora hai fatto la tua prima criptonalisi. Questo è un modo per analizzare il testo cifrato.

32
Adi

Penso che nessuno l'abbia detto ad alta voce qui, quindi lo farò.

Se a un crittografo viene assegnato un solo testo cifrato senza mezzi per ottenerne altri, il testo cifrato è breve e non viene fornita alcuna conoscenza del testo in chiaro, è quasi impossibile decifrare il testo. L'unico modo in cui ciò è ancora possibile è se la cifra è intorno al livello di difficoltà di una cifra di sostituzione.

Dato lo stesso algoritmo, se c'è un modo per ottenere più cifrati su richiesta, se il testo cifrato è sufficientemente lungo o se ci sono alcune parti conosciute del testo in chiaro per aiutare, è probabile che l'algoritmo possa essere decifrato con uno sforzo sufficiente.

Ma ancora, la crittoanalisi richiede molti sforzi rispetto allo sforzo di creare un semplice crittografo da zero, quindi è improbabile che qualcuno lo spenda a meno che non ci sia una buona ragione per farlo.

15
Nakedible

Se hai intenzione di distribuire un algoritmo segreto, perché non semplicemente distribuire i pad una tantum? È più sicuro.

Se non ti piace l'idea dei pad una tantum perché troppi dati si stanno spostando sul filo, allora perché stai supponendo che l'attaccante abbia un solo testo cifrato?

Supponendo che qualcuno abbia un solo testo cifrato e non abbia l'algoritmo (due ipotesi sbagliate), allora il tuo debole, ma noto sistema di crittografia sottostante probabilmente non ha alcuna vulnerabilità per cominciare.

13
mgjk

Esistono diversi modi.

Il primo e più ovvio è che gli aggressori hanno compromesso il tuo server nella misura in cui sono riusciti a ottenere il tuo codice sorgente. In quel caso particolare, il tuo schema nostrano è buono come niente.

Il secondo modo è che l'attaccante potrebbe essere in grado di inviare i propri valori al proprio algoritmo e vedere il risultato prima/dopo. Questo è noto come Chosen Plaintext Attack . Un buon schema di crittografia non dovrebbe essere vulnerabile ad esso. Probabilmente è uno schema nazionale.

Anche senza un attacco di testo in chiaro scelto, uno schema nostrano è generalmente ridicolmente debole. Un laico come te e io potremmo non essere in grado di dare un senso al risultato di uno schema fatto in casa. Tuttavia, ci sono una classe di persone molto intelligenti che dedicano il loro tempo e gli sforzi per rompere tali schemi crittografici di solito in cambio di una buona busta paga. Potresti averne sentito parlare, li chiamiamo crittografi.

8
user10211

Rispondi a questa domanda partendo dal presupposto che l'algoritmo è tenuto completamente segreto, nonostante quanto sia difficile da raggiungere nella vita reale.

Il problema è che stai ignorando il principio di Kerckhoffs , che dice che la sicurezza di uno schema di crittografia non dovrebbe dipendere dalla segretezza dell'algoritmo.

Ad ogni modo, se sei veramente interessato alla criptovaluta, dovresti seguire un corso come questo .

4
matugm

Dal momento che non è stato menzionato e questa domanda è in circolazione da un po '...

Uno scienziato informatico ha contribuito a decifrare il testo crittografato di una società segreta del XVIII secolo. Il testo era molto ornato, con simboli e glifi. Ha sconcertato gli esperti letterari per secoli. Il trucco era indovinare alcune delle lettere e ciò che potrebbero rappresentare e indovinare anche la lingua originale, poiché il tedesco ha frequenze di lettere diverse dall'inglese o dall'italiano.

Ecco la descrizione del testo cifrato e come è stato svelato.

http://phys.org/news/2011-10-scientist-mysterious-copiale-cipher.html

http://stp.lingfil.uu.se/~bea/copiale/

http://www.wired.com/dangerroom/2012/11/ff-the-manuscript/all/ (Molto lungo, molto interessante.)

Con il Copiale Cipher, il team di codebreaking non ha nemmeno iniziato a conoscere la lingua del documento crittografato. Ma avevano un'idea dei personaggi romani e greci distribuiti in tutto il manoscritto, quindi li isolarono dai simboli astratti e lo attaccarono come il vero codice.

"Ci è voluto un bel po 'di tempo e ha portato al completo fallimento", dice Knight. Dopo aver provato 80 lingue, il team di crittografia ha capito che i caratteri romani erano "nulli", intesi a fuorviare il lettore. Erano i simboli astratti a contenere il messaggio.

Il team ha quindi testato l'ipotesi che simboli astratti con forme simili rappresentassero la stessa lettera o gruppi di lettere. Alla fine, sono emerse le prime parole significative del tedesco: "Cerimonie di iniziazione", seguite da "Sezione segreta".

3
Chloe