Ho implementato la crittografia per alcune colonne in un database. In alcuni casi potrebbe essere necessario cercare in queste colonne, sia per le corrispondenze esatte che per sottostringhe. Al momento, ci sono meno di 10000 righe da cercare (al massimo). Tuttavia questo probabilmente cambierà in futuro, quindi sto anticipando i problemi di efficienza.
I dati rimarranno crittografati nel database, ma quando recuperati dall'applicazione, possono essere decodificati. Ciò significa che il recupero non deve essere accurato al 100%, può recuperare più record di quelli effettivamente corrispondenti alla query e l'applicazione stessa può scartare i record non corrispondenti.
Con questo in mente ho trovato le seguenti soluzioni:
-
Per la corrispondenza esatta del testo, hash i dati crittografati e modulo questo con un numero relativamente basso (forse 2 ^ 16) e memorizza quel valore in una colonna aggiuntiva. Quando si esegue una query sul database, è necessario eseguire la stessa operazione sulla stringa di input e recuperare tutti i record con valore hash corrispondente.
-
Per trovare sottostringhe, cancellate ogni lettera e mod 32 il risultato. Quindi imposta il bit corrispondente in un numero intero. Eseguire la stessa operazione sulla stringa di query. Quindi è solo necessario recuperare i record in cui il risultato di un AND binario sulla query con il valore memorizzato è maggiore di 0. Questo potrebbe essere fatto usando ogni coppia di lettere, forse con un numero intero a 64 bit o più lungo per consentire più record da scartare.
La mia domanda è: una di queste tecniche avrà un impatto reale sulla sicurezza dei dati nelle colonne crittografate? Lo schema di crittografia è AES-256.