2012-06-15 7 views
7

Al momento sto lavorando a un progetto che gestirà alcune informazioni personali molto delicate, anche se non sono numeri di backlogcount, sono comunque informazioni personali sensibili e voglio fare tutto ciò che posso fare per crittografare e archiviare queste informazioni all'interno di un mysql nel modo più sicuro possibile. Quindi ora sto cercando intensamente alcune misure di sicurezza che potrebbero gestire queste informazioni sensibili.PHP Mcrypt, quanto è sicuro?

Un modo semplice che ho trovato per crittografare/decifrare stringhe e blocchi di testo, sarebbe l'utilizzo di mcrypt. Ma quando cerco su mcrypt qui su StackOverflow, ho notato che molte persone dicono che mcrypt non è poi così sicuro.

Quindi ora mi chiedo, quanto è sicuro? Ci vogliono molte abilità di hacking, diciamo abilità di esperti, per decifrare e decriptare le informazioni memorizzate se la chiave è memorizzata in modo sicuro? Devo aver paura che un hacker con poche abilità possa decodificare le informazioni crittografate che sto per memorizzare nel server mysql? Quindi quali sono le competenze necessarie per decifrare le informazioni crittografate crittografate con mcrypt?

Se Mcrypt non è abbastanza utilizzabile, quali sono le buone alternative che non sono complesse come utilizzare le estensioni gnupg?

+4

Tenete a mente che la tecnologia è solo una parte dell'equazione ... l'applicazione deve essere anche sicura. Concentrarsi esclusivamente sulla tecnologia può farti assumere che sei più sicuro di te. –

+1

* "ho notato che molte persone dicono che mcrypt non è poi così sicuro." * - non è sicuro? È senza ragionamento? – hakre

+1

mcrypt non è una soluzione con un solo clic, supporta diversi algoritmi in diverse modalità. È un piccolo ingranaggio che frantuma i numeri reali, attorno ai quali devi costruire il tuo sistema di sicurezza. Il più delle volte l'insicurezza deriva dagli sviluppatori che utilizzano mcrypt in modo inappropriato perché non capiscono l'immagine più grande. – deceze

risposta

16

Una piccola guida da seguire per evitare alcune insidie ​​e applicare alcune raccomandazioni.

  • Non riutilizzare la stessa chiave di crittografia e il vettore di inizializzazione (IV) per due diversi messaggi.

In questo modo si rischia l'esposizione del testo in chiaro, se un avversario riesce a intercettare due o più messaggi durante il trasporto utilizzando la stessa chiave e IV.

  • non utilizzare la modalità BCE; Le modalità OFB e CTR sono leggermente migliori, ma si consiglia di utilizzare la modalità CBC o CFB.

Il motivo principale per non utilizzare BCE è perché questa modalità perdite informazioni sui blocchi di testo normale duplicati che possono minare il vostro flusso di dati codificata.

OFB e CTR sono migliori, ma soffrono del suddetto problema di sicurezza dell'utilizzo della stessa combinazione di tasti IV + più di una volta.

CFB e CBC sono i più resilienti contro il riutilizzo delle chiavi IV +, ma i messaggi separati con lo stesso prefisso comune perdono la lunghezza di detto prefisso. Inoltre, CFB perde la differenza tra i primi blocchi di testo non identici.

  • Assicurarsi di avere una forte crittografia a chiave

    Dovrebbe Non essere scelto da ASCII stampabili (per esempio non "il mio super forte chiave segreta"); PBKDF2 sarebbe preferibile (presto sarà supportato in modo nativo, fino ad allora Google). Dovrebbe essere ovvio che questa chiave deve essere tenuta al sicuro; se lo perdi, ciao ciao dati.

  • Utilizzare una buona fonte di entropia per generare il vettore di inizializzazione.

    Mcrypt ha la possibilità di utilizzare MCRYPT_DEV_RANDOM o MCRYPT_DEV_URANDOM quando si chiama mcrypt_create_iv().

Spero che questo vi aiuterà a :)

+0

Grazie mille Jack! – HermesTrismegistus