MySQL AES_ENCRYPT Uscita dei registri

0

Esigenza: Devo essere in grado di memorizzare dati utente crittografati AES (voci di diario) nel mio database e tali voci devono essere ricercabili in testo semplice.

Problema: MySQL invia query ai suoi log in testo semplice.

Cronologia: ho già realizzato il comportamento desiderato lasciando che MySQL gestisca la crittografia e la ricerca con AES_DYCRYPT e LIKE , ma significa che MySQL sta emettendo le voci dei miei utenti insieme al mio AES digita il testo in chiaro nei suoi registri.

Possibile soluzione: ho tentato di spostare il mio passo di crittografia sul server prima di inviare dati a MySQL, ma non di essere in grado di gestire la decrittografia del DB e quindi la ricerca in testo semplice complica davvero le cose. Non voglio dover inserire tutte le voci di un utente specifico e quindi filtrarle in base alla query di testo dal server.

Domanda: Quanto è grande il buco della sicurezza nel fatto che MySQL restituisce tutte le query ai log in testo normale quando decide di utilizzare la funzione AES_ENCRYPT di MySQL? Dovrei semplicemente usare le funzioni di crittografia di MySQL così posso anche usare la sua funzione LIKE , o dovrei cifrare sul server e cercare altre soluzioni come la memorizzazione di un indice di parola hash come una nuova colonna, così posso ancora fornire una sorta di testo ricercare?

Devo notare che sto usando una soluzione MySQL ospitata che, al prezzo che sto pagando attualmente, non mi consente di gestire da solo le impostazioni di amministrazione. La società di hosting ha accesso ai log.

    
posta jpodwys 29.01.2016 - 00:24
fonte

1 risposta

1

L'utilizzo delle funzioni integrate di MySQL per la crittografia e la decrittografia delle informazioni non è generalmente raccomandato per la ragione esatta che hai descritto - MySQL è spesso configurato per registrare le query. In questo caso, i dati di testo semplice (e le chiavi di crittografia / decrittografia!) Sono scritti in testo normale nei registri!

Detto questo: se devi utilizzare aes_encrypt e aes_decrypt per crittografare le informazioni che stai memorizzando nel tuo database, devi disabilitare la registrazione. Vedi link per informazioni su come farlo.

Se la tua istanza MySQL è in esecuzione su un host che non ti permette di disabilitare la registrazione, allora potrebbe essere il momento di ospitare tu stesso MySQL (cosa che non è difficile da fare su un VPS).

Ultimo ma non meno importante - dichiarazioni come ... where aes_decrypt(fieldname, key) like '%xyz%' saranno sloooowwww quando le tabelle inizieranno a ingrandirsi, perché MySQL dovrà decifrare i dati in ogni riga e applicare il confronto simile. Entrambe queste operazioni (la decrittografia e simili) sono piuttosto intensive in termini di risorse e gli indici non sono di aiuto.

    
risposta data 29.01.2016 - 03:00
fonte

Leggi altre domande sui tag