Assume I'm an attacker, and I am faced with an weak-but-unknown encryption algorithm developed by "Dave". How would I crack it? I wouldn't even know where to begin. It would be a seemingly meaningless string of characters.
È corretto, non lo faresti. Ecco alcuni dati crittografati (4587556841584465455874588). Hai idea di cosa significhi? Assolutamente no.
Tuttavia, ti manca la fondamentale chiave fondamentale del pilastro centrale, fondamentale per l'universo che tiene insieme la crittografia. L'idea è semplice:
the key is everything
Questo è tutto. Questo è il bit che devi proteggere. Il pezzo che devi proteggere con la tua vita e spero che nessuno ti colpisca con un martello finché non dici loro di cosa si tratta.
Su questa base, devi presumere che il tuo algoritmo possa essere letto dall'attaccante. Loro sanno come funziona. Possono documentare il suo processo. Se ci sono dei punti deboli, li troveranno. E li sfrutteranno. Come quel papà arrabbiato della CIA di Taken.
Questo, si scopre, è meno di un'ipotesi e più del caso pratico in uso. Dave, il cryptographer della birra fatta in casa, vuole includere un algoritmo di crittografia nel suo programma. Decidendo di sfuggire a tutti i test e progetti che i crittografi hanno fatto per lui gratuitamente nel corso degli anni, scrive qualcosa che riguarda lo strano xor, compila il suo programma e lo dà volentieri agli amici.
Questo algoritmo è ora nelle loro mani. Game over.
Ora potresti chiedere "non posso semplicemente mantenere l'algoritmo segreto? Funzionerà, giusto?" Oh Dave, fermati. Nonono. Il problema con gli algoritmi segreti è che è molto più probabile che vengano rubati. Dopo tutto, la chiave è diversa per ogni utente (in realtà, questo non è un requisito, ma, assumiamo che sia per semplicità) ma l'algoritmo rimane invariato. Quindi è necessario che una delle tue implementazioni sia esposta a un utente malintenzionato ed è di nuovo in corso.
Modifica : Ok, in risposta alla domanda aggiornata dell'OP. Supponiamo per un momento che l'algoritmo sia totalmente sconosciuto. Ciascuno dei due partecipanti in una conversazione crittografata ha una perfetta sicurezza della loro implementazione algoritmica.
In questo caso, hai dati da analizzare. Potresti fare una delle seguenti azioni:
- Analizza le lettere frequentemente conosciute . Questo è il modo in cui si rompe un tipico codice cesareo
- Tentativo di indovinare la lunghezza della chiave. Con queste informazioni, puoi passare alla ricerca di blocchi di testo cifrato ripetuti che potrebbero corrispondere allo stesso testo in chiaro.
- Tentativo indice di coincidenza e altre misure simili utilizzate per rompere il cifrario vigenere, dal momento che molti cifrari polialfabetici sono (probabilmente) solo varianti di questo.
- Guarda i motivi. Qualsiasi modello potrebbe darti la chiave.
- Cerca altri indizi. Le lunghezze corrispondono a una certa misura, sono per esempio multipli di un certo valore come un limite di byte e quindi sono (possibilmente) imbottiti?
- Tenta di analizzare con una delle tecniche di crittanalisi a crittografia simmetrica . Questi si basano sulla conoscenza dell'algoritmo in molti casi, quindi potrebbe non essere applicabile qui.
- Se ritieni che i dati in questione rappresentino uno scambio chiave, puoi provare una delle tante tecniche per rompere la chiave pubblica algoritmi .
Il fatto è che un breve frammento di dati da un algoritmo sconosciuto potrebbe essere indecifrabile. Tuttavia, questo non significa che dovresti fare affidamento su questo. Più dati possono essere recuperati da un crittanalista, più è probabile che interrompano l'algoritmo. Probabilmente non si conosce senza crittografia seria ciò che è il limite - ad esempio, è ragionevole supporre che si possa rafforzare la forza di un algoritmo di cage-key per le parole di tre lettere, poiché ce ne sono poche che abbiano senso.
Anche tu hai problemi di riutilizzo. Nella seconda guerra mondiale, Engima ha superato questo problema disponendo di impostazioni programmabili per il loro algoritmo segreto, ma anche questo era rotto.
C'è anche l'elemento umano della crittografia da considerare. Mi rendo conto che l'etichetta sulla latta dice "usa una volta, non digerire" ecc., Ma gli umani sono umani e probabilmente useranno il doppio, il triplo, ecc. Qualsiasi comportamento del genere è nelle mani del crittanalista.