Mysql
 sql >> Database >  >> RDS >> Mysql

Qual è il modo migliore per archiviare dati sensibili in MySQL?

Seriamente, NON UTILIZZARE aes_encrypt() di MySQL È il metodo più insicuro per utilizzare un cifrario a blocchi. Sta usando la modalità ECB e posso fornire un semplice esempio di dimostrazione del perché si tratta di un grave errore.

Messaggio di testo normale:

Lo stesso messaggio crittografato con la modalità ECB (non importa quale cifra utilizzi):

Lo stesso messaggio ESATTO usando la modalità CBC (di nuovo, non importa quale cifra usi):

Ci sono ancora più ragioni per non usare aes_encrypt di mysql, in particolare ogni singola query che invii avrà anche la chiave aes che usi. Se il database è compromesso, l'attaccante abiliterà la registrazione e otterrà semplicemente la tua chiave aes e decrittograferà l'intero database .

Quindi cosa dovrebbe usate? Mi piace questa classe per ora. Sta usando la modalità CBC con una funzione String2Key e un IV. Puoi usare la chiave primaria come IV, ogni messaggio deve avere un IV univoco. Va bene se l'attaccante conosce l'IV e se sono sequenziali, a patto che l'implementazione della cifratura a blocchi sia sicura. Il riutilizzo di una flebo ha reso il WEP molto meno sicuro .