Crea la tua crittografia personalizzata con una svolta

-4

Ho familiarità con la legge di Schneier:

Any person can invent a security system so clever that he or she can't imagine a way of breaking it.

Ho letto i numerosi post su questo scambio pieni di domande su come scrivere il proprio algoritmo di sicurezza e ho letto le ovvie risposte sul motivo per cui è una pessima idea al di fuori di un esperimento mentale.

Questa domanda vuole essere diversa, anche se probabilmente sarà ugualmente ignorante come tutto il resto. Tuttavia, sono interessato a ciò che tutti voi avete da dire.

Quando penso alla crittografia, la penso più o meno così:

(data) * (algo % key) = (encrypted data)  

in altre parole, prendi alcuni dati, aggiungi una password tramite un algoritmo e ottieni dati crittografati.

E se l'algoritmo stesso fosse la password? Che cosa succede se hai scritto un programma semplice e di dimensioni ridotte che modifica i dati che hai fornito, quindi distruggi il programma dopo ogni utilizzo?

Ad esempio, lo terremo molto semplice. Hai una stringa di parole come

"My name is Alice"

Supponiamo quindi di scrivere un programma molto, molto semplice che prende questa stringa e la modifica:

std::string input="My name is Alice";
std::string output;
std::string oginput;

for(char& c : input) {
    output += (c + 1); 
}   

for(char& c : output) {
    oginput+= (c - 1); 
}   

std::cout<<output<<std::endl;
std::cout<<oginput<<std::endl;

Output:

Nz!obnf!jt!Bmjdf

My name is Alice

L'idea è semplice: aggiungi 1 a ciascun carattere da crittografare, sottrai 1 da ciascun carattere per decrittografarlo. Questo tipo di programma è abbastanza semplice che l'idea di ciò che fa può essere ricordata, ed è abbastanza semplice da ri-implementare - anche se la sintassi o i mezzi (funziona invece) sono diversi. Anche un'idea più complessa, può essere ancora abbastanza semplice da ricordare come implementare, anche se è una pagina o due di codice per farlo.

Quindi, se prendi questo algoritmo nella tua testa, scrivi un programma che modifica in un modo un blocco di dati, quindi distruggi il programma (supponiamo che il codice, il programma compilato, i file obj, ecc. non siano memorizzati sull'HDD o salvati in qualsiasi modo - sono al 100% andati per sempre).

Ora sei seduto con un blob casuale di dati Nz!obnf!jt!Bmjdf senza punto di partenza per inserirli, nessun algoritmo noto per decrittografarlo contro w / un mazzo di chiavi, ecc. Hai appena preso un input, lo hai trasformato in modo incomprensibile in un certo modo che solo tu sai come invertire e distrutto qualsiasi briciola di biscotti lungo la strada.

Si tratta di una forma di crittografia valida per i tecnici inclini? Ovviamente questo esempio è abbastanza semplice da decifrare, i pattern possono essere trovati, ecc. Ma una serie di piccole modifiche ai dati in un ordine segreto, e forse più iterazioni, si sommano a molta entropia molto rapidamente.

    
posta RollYourOwn 15.06.2016 - 21:29
fonte

4 risposte

9

Il difetto nel tuo pensiero è qui:

You have just taken an input, turned it into gibberish in a certain way that only you know how to reverse...

Confronta ciò con l'uso di una crittografia strong e provata con una lunga chiave di decrittografia che solo tu sai di cosa si tratta .

È possibile che il tuo algoritmo sia altrettanto sicuro dell'algoritmo provato e vero, ma potrebbe anche non esserlo (e molto probabilmente non lo è). Allora perché preoccuparsi? In entrambi i casi qualcosa deve essere tenuto segreto da te, quindi non ottieni nulla se non più rischi.

Morale della trama (dato che viene fuori così spesso):

When you have a flat tire, you could hire a really strong guy to lift and hold your car for you while you change the tire, or you can use a tire jack.

    
risposta data 15.06.2016 - 21:57
fonte
5

L'algoritmo nel tuo esempio è fondamentalmente un Caesar Cipher molto semplice con una chiave fissa (1), e no, questo non è sicuramente sicuro. Un utente malintenzionato potrebbe determinare quale algoritmo è stato utilizzato piuttosto facilmente analizzando il testo cifrato. Altri schemi che potreste trovare potrebbero benissimo avere vulnerabilità simili che permetterebbero a un cryptanalyst di decodificare l'algoritmo dal testo cifrato in modo simile.

Quindi no, la rotazione della tua crittografia non è una buona idea, indipendentemente dalle misure che prendi per mantenere l'algoritmo segreto (inclusa la cancellazione dopo ogni utilizzo).

    
risposta data 15.06.2016 - 21:55
fonte
1

Non è un metodo di crittografia praticabile per i tecnici inclini.

1) Tutte le parti a cui fornirai il testo cifrato dovranno conoscere i passaggi di crittografia / decrittografia. Questo assicura già che non sei solo tu a conoscere l'algoritmo.

2) Non lo farai a mano. Dovrai trasformare il tuo algoritmo in un prodotto software, che sarà distribuito tra i tuoi utenti.

3) Non hai alcun controllo sul pacchetto software fornito agli utenti. Questo apre il rischio del punto 1).

Risultato 2) Non hai modo di sapere se qualcuno ha rotto il tuo algoritmo.

    
risposta data 15.06.2016 - 22:17
fonte
0

L'uso di una crittografia non valida e invalida per inviare messaggi segreti non è l'unico rischio di questo schema.

Come qualsiasi altro programma per computer, a un livello la tua chiave diventa un algoritmo che dice a qualcun altro come calcolarlo. Anche se tu fossi in grado di elaborare un algoritmo buono come AES (mi spiace, non lo sei), avresti bisogno di un linguaggio per esprimerlo in modo da poterlo condividere. Questo linguaggio dovrebbe essere elaborato dal ricevente per decifrare i messaggi. E questo linguaggio, che richiede l'implementazione della logica di ramificazione, sarebbe completo per Turing, e quindi sarebbe vulnerabile a una nuova classe di attacchi che non avrebbe nulla a che fare con il tuo schema di crittografia!

Considera: un utente malintenzionato potrebbe inviare una chiave di decifratura falsa a una vittima, sostenendo che segue un messaggio legittimo. La vittima mette la chiave falsa nella sua routine di decrittazione. L'utente malintenzionato invia il messaggio e la vittima prova a decrittografarlo. La combinazione di false key e messaggio alterato fa sì che il motore di decrittografia esegua abbastanza regole personalizzate per generare il codice necessario per eseguire un exploit e quindi fornisce lo shellcode per fornire una backdoor.

    
risposta data 15.06.2016 - 22:34
fonte

Leggi altre domande sui tag