Quanto è prezioso il segreto di un algoritmo?

43

In superficie, l'inavvisibilità di sicurezza attraverso l'oscurità è direttamente in disaccordo con il concetto di segreti condivisi (cioè "password"). Vale a dire: se la segretezza attorno alle password è preziosa, allora per estensione sicuramente deve essere di qualche valore mantenere l'algoritmo che utilizza anche la password segreta. Molte organizzazioni (discutibilmente fuorviate) potrebbero addirittura arrivare a dire che il sistema è la password.

Ma fino a che punto si può fare affidamento sulla segretezza di un algoritmo? O forse più appropriatamente, in che modo la segretezza circonda un algoritmo destinato a fallire mentre la segretezza che circonda le password non lo è?

Se, d'altra parte, la segretezza di un algoritmo è desiderabile, allora quanto è importante? Fino a che punto dovrebbe uno sviluppatore ragionevolmente andare a mantenere il suo criptocondrio?

Modifica
Per essere chiari, non si tratta di creare un nuovo algoritmo non testato, ma piuttosto di mantenere segreti i dettagli di quale algoritmo si sceglie. Ad esempio, la tecnica utilizzata da Windows per le password hash consiste nell'applicare algoritmi di hashing noti in una sequenza che non è pubblicata e che sembra cambiare tra le diverse versioni di Windows.

    
posta tylerl 24.11.2012 - 08:21
fonte

5 risposte

68

Gran parte del lavoro su password e chiavi è legato al controllo di dove sono memorizzati e copiati.

  • Una password è memorizzata nella mente di un utente umano. Viene immesso su una tastiera (o equivalente) e passa attraverso i registri di una CPU e la RAM del computer, mentre viene elaborato. A meno che non si esegua qualche errore terribile, la password non raggiunge mai un'area di memorizzazione permanente come un disco rigido.

  • Un algoritmo esiste come codice sorgente da qualche parte, sulla macchina di uno sviluppatore, un sistema di controllo delle versioni di origine e backup. Ci sono documenti di design, che sono stati mostrati a varie persone (ad esempio, coloro che decidono se finanziare lo sviluppo del sistema o meno), e spesso depositati in modo negligente su uno scaffale anonimo in qualche strato di crosta sul desktop tipico. Ancora più importante, l'algoritmo esiste anche come un file eseguibile sul sistema stesso; il binario non è leggibile come il codice sorgente, ma il reverse engineering funziona tuttavia.

Quindi non possiamo ragionevolmente ritenere che l'algoritmo sia segreto, o almeno così segreto come la password (o la chiave).

In realtà, i metodi di crittografia sono stati divisi un secolo fa nell'algoritmo e il chiave proprio per questo: in un sistema funzionante, parte del metodo perde necessariamente tracce ovunque. Avere una chiave significa concentrare la segretezza nell'altra metà, la parte che possiamo mantenere segreta.

"Sicurezza attraverso l'oscurità" è un'espressione che usa il termine oscurità , non segretezza . La crittografia riguarda il raggiungimento della sicurezza attraverso la segretezza . Questa è l'unica differenza: una password può essere secret ; un algoritmo è, nella migliore delle ipotesi, oscuro . L'oscurità viene dissipata non appena un ragazzo intelligente pensa a portare una lanterna metaforica. La segretezza è più simile a una cassastrong in acciaio: per romperla, hai bisogno di strumenti più potenti.

Il ragazzo intelligente Auguste Kerckhoffs l'ha già scritto più di un secolo fa. Nonostante l'invenzione del computer e tutta la tecnologia di oggi, i suoi risultati si applicano ancora. C'è voluto del tempo perché i praticanti di crittografia imparassero quella lezione; 60 anni dopo, i tedeschi stavano ancora facendo un sacco di cose nel "segreto" del design della macchina Enigma . Si noti che quando i tedeschi misero in uso il 4-rotore Navy Enigma, i crittografi alleati furono disturbati (i crack di routine si fermarono per alcuni mesi) ma non furono del tutto confusi perché alcuni documenti catturati dell'anno precedente alludevano allo sviluppo della nuova versione, con un quarto rotore "riflettore". Ecco qua: algoritmo segretezza non potrebbe essere raggiunto nella pratica.

Un'ulteriore svolta è che l'oscurità dell'algoritmo può danneggiare la sicurezza . Quello che spiego sopra è che l'oscurità non può essere considerata attendibile per la sicurezza: potrebbe potrebbe aumentare la sicurezza, ma non di molto (e non si può davvero sapere "quanto"). Si scopre che può anche diminuire sicurezza. Il problema è il seguente: è molto difficile creare un algoritmo crittografico sicuro. L'unico metodo noto è quello di pubblicare l'algoritmo e attendere la saggezza collettiva dei crittografi di tutto il mondo per rodersi e raggiungere una conclusione che può essere espressa come "può essere rotta in quel modo" o "apparentemente robusta". Un algoritmo è dichiarato "buono" solo se ha resistito all'assalto di dozzine o centinaia di crittografi competenti per almeno tre o quattro anni.

Internet, procrastinazione accademica e hubris umana sono tali che, con la giusta campagna di comunicazione, è possibile ottenere queste poche centinaia di crittografi per fare quel duro lavoro di valutazione gratuito - fornito che tu fai algoritmo pubblico (e "attraente" in qualche modo). Se si desidera mantenere l'algoritmo oscuro, non è possibile beneficiare di tale consulenza gratuita. Invece, devi pagare. Venti buoni crittografi per, diciamo, due anni di sforzi: stiamo parlando di milioni di dollari, qui. Nessuno lo fa, è troppo costoso. Corrispondentemente, gli algoritmi oscuri sono invariabilmente molto meno stressati rispetto agli algoritmi pubblici, e quindi meno sicuri .

(Si noti la stampa fine: la sicurezza non riguarda solo il non essere infranto, ma anche il fatto di avere una conoscenza a priori che le violazioni non si verificano.Voglio poter dormire la notte. )

Riepilogo:

  • Tu non dovresti mantenere segreto il tuo algoritmo.
  • Tu non sai quanto il tuo algoritmo è segreto.
  • non puoi mantenere segreto il tuo algoritmo.
  • Ma puoi e devi mantenere segreta la tua password, e puoi sapere "quanto" è segreto (è tutto il business "entropia").
risposta data 24.11.2012 - 14:08
fonte
8

Mantenere il tuo cripto segreto non è fattibile. Hai bisogno di averlo fuori, se fosse solo così le persone potrebbero testarlo se funziona davvero. Non vedo alcun motivo per mantenere la crittografia segreta. Puoi mettere un lucchetto sulla porta tutti possono vedere il lucchetto tutti sanno come funziona il lucchetto e sa che senza la chiave è inutile. La password è la tua chiave.

Oltre a tutto ciò ci sono alcune regole d'oro come "non reinventare la ruota" e "non provare a creare la tua cripta". Abbiamo standard criptati perché possono testarlo su vasta scala. Inoltre fai riferimento a Principio di Kerckhoffs

    
risposta data 24.11.2012 - 08:47
fonte
6

Esistono due importanti differenze tra algoritmi e password / chiavi:

  1. È possibile (e dovrebbe) modificare le chiavi di crittografia in modo sistematico o quando si sospetta un compromesso. Ciò riduce la perdita di segretezza. Allo stesso modo, è necessario modificare la password ogni volta che si ha motivo di sospettare che la password possa essere compromessa. Al contrario, è raramente possibile modificare l'algoritmo di crittografia utilizzato in modo tempestivo, quindi è necessario essere in grado di sopravvivere (senza perdita di sicurezza) in situazioni in cui l'algoritmo diventa noto.

  2. Una copia dell'algoritmo è inclusa in ogni pezzo di software in grado di crittografare o decodificare. Ciò significa che basta un utente del software per decodificare l'algoritmo e pubblicarlo su Internet, e l'algoritmo non è più segreto. In altre parole, non puoi ragionevolmente aspettarti di mantenere segreto l'algoritmo. Al contrario, la tua password o la tua chiave di crittografia sono memorizzate solo sulla tua macchina - non sulla macchina di milioni di altri utenti.

Queste ragioni furono articolate da Auguste Kerckhoffs nel 1883 - sì, più di un secolo fa. (Sembra che quella gente non fosse un maniaco!) Vedi Wikipedia sul principio di Kerckhoff , in particolare la regola 2 ("[L'algoritmo ] non deve essere richiesto di essere segreto, e deve essere in grado di cadere nelle mani del nemico senza inconvenienti ").

Raccomando anche di leggere altre domande qui su 'sicurezza attraverso oscurità', tra cui, ad esempio, Come definire i requisiti di sicurezza per garantire che gli sviluppatori ... non forniscano sicurezza per oscurità? e Il ruolo valido dell'oscurità e Dimostrazione di come la sicurezza attraverso l'oscurità non funzioni e NSA Suite A Crittografia: sicurezza attraverso l'oscurità? e Versione nascosta - preziosa o solo sicurezza per oscurità? . Riguardano argomenti correlati e giustificazione. Ricordati di utilizzare la barra di ricerca o guarda a destra nella barra laterale "Related".

    
risposta data 24.11.2012 - 08:56
fonte
3

Ci sono solo una manciata di buoni algoritmi, mentre ci sono forse 10 40 buone password con 20 caratteri o meno. Quindi è abbastanza facile per un utente malintenzionato indovinare il tuo algoritmo o enumerare tutti i probabili algoritmi, mentre è impossibile per loro fare lo stesso con una password ben scelta. Immagina la situazione se gli utenti dovessero scegliere la loro password da un elenco di dieci possibilità, ed era la stessa lista per tutti - questa è fondamentalmente la posizione per gli algoritmi.

    
risposta data 24.11.2012 - 08:43
fonte
2

Una cosa che tutti qui non hanno menzionato è che, presupponendo che l'algoritmo di conoscenza pubblica, rende molto più facile dimostrare che uno schema di sicurezza è veramente sicuro. Assumendo che il tuo aggressore conosca lo schema che hai usato, è più facile dimostrare che uno schema non è sicuro. Pertanto, sapresti evitare di utilizzare lo schema.

L'algoritmo di protezione è molto più difficile della protezione della chiave per i vari motivi menzionati negli altri post, quindi se qualcuno può ottenere la chiave, è molto probabile che sia anche in grado di ottenere l'algoritmo; ma il contrario è molto meno probabile.

Inoltre, è un principio di sicurezza generale che tanto meno lo schema si basa per mantenere la sua sicurezza, tanto più sicuro è lo schema. In definitiva, questo si riduce a: sugli schemi più sicuri, solo la chiave deve essere tenuta segreta.

Questo non significa necessariamente che dovresti pubblicare l'algoritmo che usi. L'oscurità può essere usata come uno strato di difesa (sebbene, come detto, la pubblicazione obietta lo schema a un controllo più pubblico), ma l'oscurità non dovrebbe mai essere usata come unico livello di difesa.

    
risposta data 24.11.2012 - 18:46
fonte