Perché manteniamo le nostre chiavi segrete, piuttosto che i nostri algoritmi? [duplicare]

10

Su quasi tutti i siti web che contengono informazioni sulla crittografia in generale, esiste la nozione comune che quasi tutti gli algoritmi di crittografia / decrittografia dovrebbero utilizzare una chiave come uno dei loro input. La ragione di questo è che gli algoritmi di crittografia che non usano una chiave sono tecnicamente inutili.

Per questo motivo non posso fare a meno di chiedermi come siano arrivati a quella conclusione. Perché la tendenza comune nella crittografia è quella di mantenere segreta la chiave di sicurezza, ma consentire agli algoritmi di crittografia e decrittografia di essere pubblici. Cosa accadrebbe se gli algoritmi di crittografia e decrittografia fossero il segreto? In quel caso non ci sarebbe più bisogno di una chiave e semplificherebbe molto le cose.

Ad esempio: supponiamo di essere uno sviluppatore di software che desidera inviare messaggi testuali da un computer a un altro (e viceversa) per consentire la comunicazione (una semplice app di chat). Supponiamo che i computer comunichino tra loro su una rete non sicura con il protocollo TCP / IP. Supponiamo che io voglia assicurare alla loro conversazione un po 'di privacy e creare questo algoritmo di "crittografia" di base in cui aggiungo semplicemente 10 a ciascun codice ASCII per ogni lettera nel testo in chiaro prima di inviarlo come byte non elaborati sulla rete. Come tale un messaggio come "Ciao, fratello!" sarebbe intercettato da qualsiasi attaccante come "Rovvy6 * l | y ~ ro | +".

Come può qualcuno che intercetta il messaggio ricostruire il testo in chiaro originale se non avesse conoscenza degli algoritmi di crittografia o decrittografia? Quale sarebbe l'approccio migliore per rompere questo crittosistema? È davvero così facile in qualche modo interrompere gli schemi di crittografia che non usano le chiavi, che non sono soluzioni praticabili?

Infine, se vuoi dire qualcosa come "Beh ... non hai bisogno di un genio per capire che stai aggiungendo solo 10 a ogni byte del testo in chiaro", l'ho fatto per semplicità. Se vuoi rendere il messaggio ancora più criptico, sentiti libero di immaginare che la formula matematica sia molto più complessa (come aggiungere 7 e poi sottrarre 10 e poi moltiplicare per 2).

    
posta Mr Sir 11.06.2015 - 01:53
fonte

6 risposte

31

Non vogliamo solo segretezza. Vogliamo la segretezza quantificabile . Il punto non è solo quello di garantire la riservatezza dei dati, ma anche di essere in grado di sapere che abbiamo effettivamente assicurato la riservatezza dei dati.

Quando abbiamo un algoritmo pubblico e una chiave segreta, la segretezza può essere quantificata. Ad esempio, se utilizziamo AES con una chiave a 128 bit, allora sappiamo che un utente malintenzionato dovrà provare una media di 2 127 possibili chiavi (vale a dire troppe per farlo effettivamente) per trovare quella giusta.

Se invece tentassimo di utilizzare un algoritmo segreto, dovremmo affrontare tre grandi sfide:

  • Come spiega @Xander, creare un algoritmo di crittografia sicuro è terribilmente difficile. L'unico metodo conosciuto che offre una discreta affidabilità è il design pubblico: pubblicare l'algoritmo, liberare centinaia di crittografi su di esso e vedere se riescono a trovare qualcosa di sbagliato in esso. Se, dopo un paio di anni, nessuno di loro ha trovato nulla di male nell'algoritmo, allora probabilmente non è troppo debole. Con un algoritmo segreto, devi fare tutto quel lavoro di revisione incrociata da solo, il che non è fattibile in una quantità di tempo decente.

  • Non sappiamo quanti "algoritmi di crittografia decenti" possano esistere. Un utente malintenzionato può tentare di enumerare i possibili algoritmi, dove "possibile" significa "ciò che il progettista potrebbe aver inventato". Parte del problema è nel regno della psicologia, quindi la quantificazione sarà difficile.

  • Un algoritmo segreto esiste ancora come codice sorgente su alcuni computer, binari compilati su alcuni altri e nella testa di almeno un designer. A meno che tutti i computer di sviluppo coinvolti e il cadavere del progettista non siano stati disciolti in un grande calderone acido, è molto difficile impedire a quel "algoritmo segreto" di filtrare ovunque. D'altra parte, una chiave segreta è un piccolo elemento che può essere gestito in modo più efficiente e tenuto segreto (memorizzato solo nella RAM, eventualmente ricostruito da un algoritmo di scambio di chiavi come Diffie-Hellman ...).

Poiché l'algoritmo probabilmente perde, si può anche considerarlo pubblico e affidarsi solo alla segretezza della chiave. Rendendo effettivamente pubblico l'algoritmo, puoi beneficiare di una revisione estesa da parte di altre persone, il che è una precondizione quasi inevitabile per raggiungere la sicurezza.

    
risposta data 11.06.2015 - 02:44
fonte
17

Ci sono un paio di cose da considerare.

In primo luogo, arrivare a un algoritmo di crittografia sicura è difficile. Non è un tipo di duro, ma davvero difficile da comprendere che non possiamo dimostrare che gli algoritmi di crittografia siano effettivamente sicuri, ma solo dimostrare che con ciò che sappiamo, non sappiamo come romperli con uno sforzo di meno di 2 ^ n per qualche grande valore di n. E così, l'unico modo per essere ragionevolmente sicuri che non ci siano disastrosi difetti in un algoritmo (e ci sono praticamente in tutti gli algoritmi progettati da amatori, e molti disegnati da professionisti) è sottoporli a una rigorosa revisione da parte di persone qualificate. Quindi, se un algoritmo è controllato, non può, per definizione, essere segreto. D'altra parte, se non è controllato, non può essere considerato sicuro da nessuna misura ragionevole.

In secondo luogo, vi è la questione pratica del segreto a lungo termine. Se hai fatto affidamento solo sull'algoritmo per la segretezza, corri il rischio di dover modificare l'algoritmo se dovesse essere scoperto. È difficile, e comporta la modifica di ogni singola implementazione dell'algoritmo, che è costosa e dirompente. Se la chiave è l'unico segreto, le chiavi possono essere cambiate a basso costo e facilmente, il che rende gli schemi basati su chiavi molto più interessanti.

In definitiva, la crittografia moderna si basa sul principio di Kerckhoffs che afferma che: Un cryptosystem deve essere sicuro anche se tutto ciò che riguarda il sistema, ad eccezione della chiave, è di dominio pubblico. Questo perché con la consapevolezza di ciò che abbiamo, questo è davvero l'unico modo ragionevole per approcciare la progettazione di crittosistemi seria e sicura.

    
risposta data 11.06.2015 - 02:09
fonte
0

Lo schema che hai proposto utilizza la sostituzione di base. La mappatura, per quanto complicata, è (7 - 10) * 2 = -6. Quindi usare l'analisi della frequenza sul testo cifrato fornirebbe il testo in chiaro. In questo momento, la stringa che stai usando è troppo breve per qualsiasi analisi, ma dato il tempo, la quantità di dati che utilizza lo stesso schema fornirà i mezzi per ottenere il testo in chiaro.

Una volta lungo questo percorso, potresti considerare come viene generato il testo cifrato se la funzione viene modificata, come ogni 12 lettera o ogni 18 lettera, solo per confondere la distribuzione di frequenza del testo cifrato. Alla fine incontrerai gli enigmi enc / decoder usati durante la guerra mondiale. E molto presto, l'uso di diffie helman per negoziare in modo sicuro una chiave condivisa in pubblico. La DH è la pietra angolare attraverso la quale le trattative della chiave pubblica sono gestite su Internet. Uno sviluppo piuttosto interessante, dal momento che la chiave utilizzata per inizializzare le macchine dell'enigma richiedeva a qualcuno di trasmettere la chiave in primo luogo. Una cosa difficile da fare tra i combattimenti. Con ciò, il problema dell'uovo e della gallina è stato risolto.

Ora, se solo le autorità di certificazione riescono a controllare il numero di CA di secondo livello, tutto sarebbe meglio.

    
risposta data 11.06.2015 - 08:02
fonte
0

Una risposta meno accademica:

Immagina di essere il governo di qualche paese. Immagina di aver ingaggiato persone per progettare questo fantastico nuovo algoritmo di crittografia e hai assunto persone per costruire macchine che lo implementano e hai equipaggiato tutte le tue navi e aeroplani e centri di comando mobili, ambasciate e uffici e .. con esso.

E poi il tuo nemico cattura una delle macchine, o il tuo nemico trasforma una delle persone che ha costruito le macchine, o ...

Quale è più facile? Progettare un nuovo algoritmo, progettare nuove macchine e sostituirle tutte? O cambiare la chiave?

    
risposta data 11.06.2015 - 17:13
fonte
0

Può essere utile pensare a qualcosa come DES non come ad un algoritmo, ma piuttosto come un generatore di algoritmi che, dati 56 bit, produrrà uno degli algoritmi di crittografia 2 ^ 56, la maggior parte dei quali sono circa altrettanto forti; schemi più recenti come AES possono generare algoritmi 2 ^ 128 o più, tutti forti. Progettare da zero un algoritmo di crittografia sicuro è estremamente difficile; prendere un algoritmo sicuro e trasformarlo in un "generatore di algoritmi" che può generare un enorme numero di algoritmi sicuri è, per confronto, molto più facile. Data una scelta tra l'assunzione di alcuni esperti per progettare un algoritmo di crittografia da zero ad un costo di migliaia di dollari o più, o lanciare alcuni dadi e usare i risultati come una "chiave" per qualche altro "generatore di algoritmi", quest'ultimo non solo è molto più facile e più per la maggior parte degli utenti di crittografia, ma evita anche la necessità per loro di fidarsi di un estraneo con la loro segretezza. Se qualcuno tira un dado fisico e usa i risultati per generare una chiave usata per proteggere le informazioni segrete per il suo uso personale, e se vorrebbe non voler mai che qualcuno sia in grado di decodificare i suoi segreti, non c'è bisogno che lui lo faccia mai qualsiasi altra persona o gruppo di individui possiede conoscenze sufficienti per farlo.

    
risposta data 11.06.2015 - 17:49
fonte
0

Bene, quanti algoritmi riesci a immaginare? Tieni presente che non devono fare affidamento su una chiave per essere diversa, altrimenti stai usando i tasti.

Quanti non condividono il modo di attaccare? Per esempio. replace x with x+10 e replace x with k[d] sono entrambi vulnerabili a un attacco di frequenza delle lettere.

Quanti non sono l'equivalente di 123456 e password i.e. non saranno nella lista dei migliori algoritmi da controllare?

Sono sufficienti per renderlo troppo lento per consentire a qualcuno di controllarli tutti?

    
risposta data 11.06.2015 - 17:50
fonte

Leggi altre domande sui tag