PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

postgresql des encrypt

Crypt e DES sono vecchi codici e non dovrebbero essere usati

Plain old DES è un algoritmo obsoleto. Non puoi davvero confrontarlo in modo utile con AES128; è come lamentarsi del fatto che un hash SHA256 è più grande di un hash MD5 - sì, lo è, ma solo uno di essi potrebbe rallentare l'attaccante per un po'. DES era ampiamente considerato debole anche nel 1999 e non dovrebbe mai essere utilizzato in nuove applicazioni. Non usarlo.

Non credo sia una buona idea cercare un metodo di crittografia che "fornisca la dimensione dei dati più piccola possibile", perché è fondamentalmente una perdita di tempo crittografare i dati utilizzando DES. Perché non usare ROT13 (caesar cypher)? Il risultato "crittografato" ha le stesse dimensioni dell'input, peccato che la crittografia possa essere violata da un bambino di 3 anni.

criptare è di un'annata simile. Il vecchio algoritmo di hashing della crittografia UNIX è... anziano... e totalmente inadatto a qualsiasi nuova applicazione. Gli hash dovrebbero essere almeno SHA256, davvero.

Crypt è un hash a senso unico

Per quanto riguarda il non riuscire a capire come decifrare i dati crittografati:crypt non è un algoritmo di crittografia, è una funzione di hash crittografica o "hash a senso unico". Gli hash unidirezionali sono adatti per verificare che i dati non siano modificati, confrontandoli con un salato hash per l'autenticazione della password, da utilizzare nell'autenticazione challenge-response , ecc. Non è possibile decrittografare i dati crittografati.

Tratta la taglia

Usa una funzione crittografica decente e vivi con l'aumento delle dimensioni. bf o aes128 sono i più deboli che puoi ragionevolmente utilizzare.

Personalmente preferisco eseguire la crittografia/decodifica nell'app, non nel DB. Se è fatto nel DB, le chiavi possono essere rivelate da pg_stat_statements , nei log di log_statement o errori, ecc. Meglio che la chiave non sia mai nella stessa posizione dei dati memorizzati.

La maggior parte dei linguaggi di programmazione ha buone routine crittografiche che puoi usare.

È difficile offrire altri consigli perché non hai spiegato cosa stai crittografando, perché, quali sono i tuoi requisiti, quali sono le minacce, ecc.

Password?

Se stai memorizzando le password, probabilmente stai sbagliando.

  • Se possibile, lascia che qualcun altro esegua l'autenticazione:

    • OAuth o OpenID per Internet

    • SSPI, Kerberos/GSSAPI, Active Directory, binding LDAP, SASL, HTTP DIGEST, ecc. per intranet

  • Se devi davvero eseguire l'autenticazione da solo, aggiungi un sale alle password e cancella il risultato. Conserva l'hash e il sale. Quando devi confrontare le password, sala il nuovo testo in chiaro dell'utente con lo stesso sale che hai usato per l'hash memorizzato, usa l'hash della nuova password + sale e verifica se l'hash è lo stesso di quello che hai memorizzato. Se lo è, hanno fornito la password corretta.

  • Quasi certamente non è necessario recuperare le password in chiaro. Implementa invece una reimpostazione della password sicura. Se proprio devi, usa un algoritmo decentemente sicuro come aes per crittografarli e pensa attentamente all'archiviazione e alla gestione delle chiavi. Vedi altri post su SO sull'archiviazione/gestione delle chiavi con pgcrypto.

Vedi anche: