Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    48

    Metodo migliore per crittografare password

    In previsione di uno script che gestisca degli utenti per un sito, mi stavo documentando per crittografare la password in modo che non resti memorizzata nel database.
    Ho trovato le funzioni sha1() e md5() che potevano andar bene per lo scopo, tuttavia la documentazione ufficiale di PHP sconsiglia il loro utilizzo per le password, e consiglia i affidarsi a crypt().
    tuttavia per essere recuperata la password originale, necessario per verificare la correttezza dei dati inseriti da un utente, è necessario utilizzare crypt() con un salt.
    Questo fatto mi lascia molto perplesso sulla sicurezza di questo metodo, anche perchè facendo delle prove vedo che il salt è contenuto nella stringa crittografata.
    Insomma, cosa devo usare per tenere memorizzate le password sul server in modo sicuro?

  2. #2
    Utente di HTML.it L'avatar di las
    Registrato dal
    Apr 2002
    Messaggi
    1,221
    Stai paragonando due cose molto diverse, secondo me la domanda che ti devi fare è: "Mi serve tenermi la possibilità di recuperare la password originale o no?"
    ..... normalmente non è necessario e quindi si usa un algoritmo a senso unico (sha1 o md5)
    ..... se invece per qualche ragione è meglio poter 'tornare indietro' usa crypt o altri algoritmi che consentano di decriptare.

    Il calcolatore è straordinariamente veloce, accurato e stupido.
    L'uomo è incredibilmente lento, impreciso e creativo.
    L'insieme dei due costituisce una forza incalcolabile.
    (Albert Einstein)

  3. #3

    Re: Metodo migliore per crittografare password

    Originariamente inviato da Filuz
    ...
    Insomma, cosa devo usare per tenere memorizzate le password sul server in modo sicuro?
    sha1() o md5()
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  4. #4
    sha1() e md5() non criptano, ma "hashano". Ovvero da una qualsiasi stringa di qualsiasi lunghezza restituiscono una stringa di 160 o 128bit, rispettivamente di 40 o 32bytes. Teoricamente è possibile trovare una stringaA diversa da una stringaB le quali risultano sha1(stringaA) == sha1(stringaB) (e stessa cosa, con maggiori probabilità, anche con md5).

    Per criptare veramente qualcosa da salvare nel database prova a vedere se il tuo server mysql ti dà a disposizione le funzioni AES_ENCRYPT() e AES_DECRYPT() ( http://dev.mysql.com/doc/refman/5.5/...functions.html ), ti risolvi un sacco di problematiche.

  5. #5
    Originariamente inviato da Ratatuia
    ti risolvi un sacco di problematiche.
    Tranne per il fatto che un algoritmo reversibile da' la possibilita' di ottenere le password in chiaro, cosa che un algoritmo di hashing non permette.

    IMHO la crittografia reversibile va usata solo se necessario.

  6. #6
    Io personalmente per il mio sito, utilizzo entrambi gli hash, in quanto se cripti solo con l'md5 e un possibile attacker ti beccasse la password ha una buonissima probabilita di andare su siti che hanno un dizionario abbastanza ampio di parole in md5 decriptate, ed in tal modo di decodifica la password, quindi anche se la stessa cosa si può fare con sha1(); io preferisco complicare la vita al doppio, quindi li utilizzo entrambi.

  7. #7
    Originariamente inviato da k.b
    Tranne per il fatto che un algoritmo reversibile da' la possibilita' di ottenere le password in chiaro, cosa che un algoritmo di hashing non permette.

    IMHO la crittografia reversibile va usata solo se necessario.
    Tutto dipende da dove viene salvata la chiave per criptare, se si usa una funzione di hash senza salt si può sempre cambiare la password e poter eseguire un login legittimamente.

  8. #8
    Originariamente inviato da SkyBlue
    Io personalmente per il mio sito, utilizzo entrambi gli hash, in quanto se cripti solo con l'md5 e un possibile attacker ti beccasse la password ha una buonissima probabilita di andare su siti che hanno un dizionario abbastanza ampio di parole in md5 decriptate, ed in tal modo di decodifica la password, quindi anche se la stessa cosa si può fare con sha1(); io preferisco complicare la vita al doppio, quindi li utilizzo entrambi.
    Il massimo della paranoia è concatenare la password con una stringa molto lunga in maniera tale da aumentare l'entropia della funzione di hash.

  9. #9
    Scusate anche, la curiosità per i più esperti ma supponendo l'md5(), se la parola "ciao" mi viene trasformata, e da quella trasformazione non posso risalire alla parola non conoscendola, questo non è un pò fuori logica ? Se la trasformazioni è sempre la stessa vuol dire che la decodifica sarebbe "volendo" possibile...
    Sbaglio ?

  10. #10
    Originariamente inviato da SkyBlue
    Scusate anche, la curiosità per i più esperti ma supponendo l'md5(), se la parola "ciao" mi viene trasformata, e da quella trasformazione non posso risalire alla parola non conoscendola, questo non è un pò fuori logica ? Se la trasformazioni è sempre la stessa vuol dire che la decodifica sarebbe "volendo" possibile...
    Sbaglio ?
    come già spiegato in linea teorica con un attacco bruteforce puoi trovare una stringa, diversa da 'ciao', che abbia un hash uguale a quello di ciao.

    Questo perchè md5 da una qualsiasi stringa di estensione qualsiasi (basti pensare al checksum delle distro linux) genera una impronta da 128bit. Se aggiungi un salt nel salvare la password aumenti al sicurezza dell'hash perchè anche trovata la stringa di cui sopra e inserita nel campo password (ammesso che non ci sia un controllo sulla lunghezza della password inserita) non sarebbe uguale alla password salvata dal momento che a tale stringa viene ri-applicato il salt.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.