2009-10-01 13 views
5

Sto scrivendo un semplice programma per la crittografia dei file. Principalmente come esercizio accademico, ma probabilmente per uso futuro futuro. Tutto il lavoro pesante è fatto con le librerie di terze parti, ma mettere insieme i pezzi in modo sicuro è ancora una sfida per il non crittografo. Fondamentalmente, ho praticamente tutto funziona come penso che dovrebbe.Utilizzo di MD5 per generare una chiave di crittografia dalla password?

Sto utilizzando AES a 128 bit per la crittografia con una chiave di 128 bit. Voglio che gli utenti siano in grado di inserire password di lunghezza variabile, quindi ho deciso di cancellare la password con MD5 e utilizzare l'hash come chiave. Ho pensato che fosse accettabile: la chiave dovrebbe sempre essere un segreto, quindi non c'è motivo di preoccuparsi degli attacchi di collisione.

Ora che l'ho implementato, ho trovato un paio di articoli che indicano che questa è una cattiva idea. La mia domanda è: perché? Se viene scelta una buona password, il cifrario dovrebbe essere abbastanza forte da non rivelare mai la chiave se non tramite uno sforzo brute-force straordinario (leggi: attualmente non fattibile), giusto? Dovrei usare qualcosa come PBKDF2 per generare la chiave o è solo eccessivo per tutte le applicazioni di crittografia più estreme?

+1

salt la password – helloandre

risposta

4

Questo articolo lo Key strengthening potrebbe aiutarti. Fondamentalmente si vuole rendere la chiave più forte (più entropia che in una password) e rendere la sua derivazione dalla password affidabile in termini di tempo.

+0

Grazie, è esattamente quello che stavo cercando. – Charles

1

Bene, come il tuo post è generale, lasciatemi dire un paio di cose generali:

  1. MD5, SHA-0, SHA-1 sono tutti gli hash rotti, e non li dovrebbe utilizzare per qualsiasi crittografia scopo, utilizzare SHA-2.

  2. In generale, è necessario utilizzare approcci ben noti e documentati alla disattivazione delle chiavi dalle password (non si parla di quale lingua, per favore indicare quale si sta utilizzando).

  3. Quando si esegue una sorta di programmazione di sicurezza, la cosa più importante da fare è, prima di fare qualsiasi cosa, documentare rigorosamente il proprio "modello di minaccia". Questo è fondamentalmente un elenco di tutti gli attacchi che stai tentando di prevenire, e di come lo farai, e anche quale tipo di attacchi non puoi evitare. È piuttosto divertente da fare e imparerai a conoscere tutti gli attacchi e altre cose interessanti.

+1

1. Le vulnerabilità in MD5 non contano per i miei scopi perché Lo sto solo usando per ricavare una chiave da una stringa di lunghezza variabile.Se un avversario ottiene l'hash, il gioco è finito perché è quello che doveva essere il segreto da sempre. Gli attacchi di collisione non entrano nemmeno nel campo di gioco qui, per quanto ne so. 2. Questo è ciò che sto cercando di fare ponendo la domanda sopra. :) Il linguaggio di programmazione non ha importanza perché questa è una questione di teoria, non di implementazione. Ma se sei semplicemente curioso, sto usando Python. 3. Questo è anche quello che sto cercando di fare qui. :) – Charles

+0

Amico, non penso che tu stia leggendo quello che sto scrivendo. :) – Charles

+0

Charles, la seta è giusta. Non usare nessuno degli hash che menziona. Se stai facendo le domande che sei, non capisci le implicazioni di una funzione di hash compromessa (non sto nemmeno sostenendo che lo faccia io). Vai a leggere http://www.daemonology.net/blog/2009-06-11-cryptographic-right-answers.html – lambacck

0

La risposta alla tua nuova domanda è: dovresti usare sicuramente qualcosa come PBKDF2 per generare la chiave.

Suppongo che abbiate una password (almeno 10 caratteri in alto e la punteggiatura destra?) Che genererà quindi una chiave AES-256. La chiave verrà utilizzata per crittografare/decrittografare i file. Vuoi usare qualcosa come PBKDF2 per diminuire la capacità di qualcuno che ottiene il tuo file per capire la tua chiave/password attraverso attacchi di forza bruta. Usando qualcosa come PBKDF2 (e un sale casuale!) Aumenta il costo di rompere la crittografia sul file.

Quello che ho veramente consiglio è di utilizzare questo come un giocattolo e non per proteggere qualcosa di davvero a cuore. Se non sei un esperto di sicurezza, commetti errori, anche gli esperti (e molti di loro insieme) commettono errori: http://www.sslshopper.com/article-ssl-and-tls-renegotiation-vulnerability-discovered.html

+0

Grazie per i suggerimenti. Ho fatto molte più ricerche dopo aver posto questa domanda e ho finito per implementare PBKDF2. La maggior parte del sollevamento pesante è fatto da biblioteche scritte da individui molto più intelligenti di me. A parte questo, ho bisogno di iniziare da qualche parte e quale modo migliore per garantire che il mio programma sia corretto piuttosto che proteggerlo (si spera) dai miei dati personali? Sono ben consapevole dei rischi di far rotolare la mia soluzione qui e di accettarli completamente. Se finisco il progetto, spero di rilasciarlo come software open source in modo che altri possano scrutare il codice, aggiungere correzioni e, eventualmente, umiliare pubblicamente il mio lavoro. :) – Charles

Problemi correlati