Crypt e decrypt

di il
6 risposte

Crypt e decrypt

Salve a tutti,
scrivo qui perchè i risultati di google non funzionano..

Sto cercando un modo per salvare le pwd su un db mysql ma scrivendole non in chiaro.. ma allo stesso tempo se l'utente ne fa richiesta si riesca a recuperarla senza cambiarla.. quindi mi servirebbe un algoritmo (anche semplice ed insicuro) per criptare e decriptare delle stringhe.


Ne ho provati un pò ma la maggior parte di quelli che ho provato mi danno il seguente errore:
Call to undefined function mcrypt_get_iv_size() in ..
Devo installare qualcosa sul server linux?

Grazie

6 Risposte

  • Re: Crypt e decrypt

    Puoi usare la funzione sha1.
    in pratica setti il campo del db su varchar(45) (la lunghezza minima, sennò ti tronca la password).
    e poi la salvi con sha1('LA_TUA_PASSWORD')
  • Re: Crypt e decrypt

    Non si può fare
  • Re: Crypt e decrypt

    +m+ ha scritto:


    non si può fare
    Sì appunto.. volevo avere conferma.. perchè md5 e sha1 sono "one-way"
  • Re: Crypt e decrypt

    c3n2o ha scritto:


    +m+ ha scritto:


    non si può fare
    Sì appunto.. volevo avere conferma.. perchè md5 e sha1 sono "one-way"
    Non è quello l'elemento rilevante.
    Esistono le funzioni AES_ENCRYPT ed AES_DECRYPT.
    A parte che bisogna saperle usare bene (vettore di inizializzazione), cosa non banale, il punto è che memorizzi sul database delle password in formato criptato, ma "da qualche parte", nel sorgente PHP, ci sarà la password IN CHIARO.
    Pertanto questo approccio può avere un suo vago utilizzo nel caso in cui qualcuno si copiasse il tuo database.
    Se ha accesso al sorgente (per buchi di sicurezza e così via) allora non serve a nulla.

    Il normale meccanismo (e trovi 1 miliardo di script di esempio, se sei pigro) è che la password viene rigenerata casualmente (qualora richiesta) ed inviata in forma temporanea all'utente.

    ---
    Poi se vogliamo entrare nell'ambito professionale la risposta è:
    - ti serve mariadb >=10.1
    - devi abilitare la criptazione dell'intero database
    - la chiave (che poi è un file) la devi mettere su un'altra macchina, che usualmente monterai con un tunnell SSH-NFS per renderla visibile al server mariadb. In questo caso metterai sul secondo server un'autenticazione a chiave pubblica.
    Purtroppo, di nuovo, se qualcuno ha l'accesso root alla macchina può benissimo (avendone le capacità) pigliarsi la chiave privata, fakare quella pubblica e leggersi tranquillamente la chiave, e poi decriptare il database (ad esempio dumpandolo)

    Riassumendo: la sicurezza del sistema è quella del suo punto più debole, che generalmente sono gli esseri umani, a seguire programmi e script di cui non si sa bene il funzionamento (copia-incollati) e scritti coi piedi.
    Poi buchi vari di sicurezza, configurazioni errate e così via.
  • Re: Crypt e decrypt

    Quindi potresti provare con qualcosa del genere
    
    select hex(aes_encrypt('password messa da utente', unhex(sha2(sha1('EccoLaMiaSuperPassword'),512))));
    
    '387699DF1F04C6F09D71F1630FB75EA54D13B8DCF7207929229054E3B66113A3'
    
    select aes_decrypt(unhex('387699DF1F04C6F09D71F1630FB75EA54D13B8DCF7207929229054E3B66113A3'),unhex(sha2(sha1('EccoLaMiaSuperPassword'),512)));
    
    Il primo doppio sha2 e sha1 serve per rendere meno utili le tabelle precalcolate (qui puoi fare come vuoi, comporre ad esempio con altri hash a piacere, iterare etc)
    C'è un "problemino" di analisi crittografica differenziale (lo vedi se concludi con A1 invece che A3 la stringa); debolezze varie (torna spesso NULL quindi facile per attacchi brute force), che non sto a sottolineare.
    Non c'è sale, non c'è IV, insomma una schifezza dal punto di vista di un lavoro fatto a regola d'arte.

    Diciamo quindi che per il "bimbominkia" classico può andar bene, per gente come me non tanto, vedi te a cosa ti serve.
  • Re: Crypt e decrypt

    +m+ ha scritto:


    Il normale meccanismo (e trovi 1 miliardo di script di esempio, se sei pigro) è che la password viene rigenerata casualmente (qualora richiesta) ed inviata in forma temporanea all'utente.
    A sto punto posso usare tranquillamente md5 o sha1 e in caso di richiesta pwd genera una pwd casuale temporanea.. devo creare la pagina dove l'utente viene riconosciuto tramite la pwd temporanea e può fare l'upload della nuova pwd.. mi metto subito al lavoro!!

    +m+ ha scritto:


    Poi se vogliamo entrare nell'ambito professionale la risposta è:
    - ti serve mariadb >=10.1
    - devi abilitare la criptazione dell'intero database
    - la chiave (che poi è un file) la devi mettere su un'altra macchina, che usualmente monterai con un tunnell SSH-NFS per renderla visibile al server mariadb. In questo caso metterai sul secondo server un'autenticazione a chiave pubblica.
    Stiamo parlando di un sito web in LAN non raggiungibile dall'esterno se non via VPN che dovrebbe essere abbastanza corazzata; quindi non c'è un gran che di password da proteggere.. ma mi dava fastidio che le pwd fossero scritte in chiaro.. Ma grazie cmq per la tua spiegazione.. spero di averne bisogno un giorno
Devi accedere o registrarti per scrivere nel forum
6 risposte