Vorrei crittografare gli indirizzi IP nel mio database MySQL, con i seguenti vincoli:
- Non ha bisogno di essere resistente agli aggressori che possono eseguire interrogazioni.
- Deve essere resistente agli aggressori che hanno accesso ai file sul disco.
- Deve essere in grado di convalidare un IP contro il modulo crittografato, per verificare se corrisponde.
- Anche il controllo dei caratteri jolly
/24
(ad esempio10.20.30.*
) sarebbe utile. - Non è possibile immettere alcuna forma di chiave o password all'avvio del sistema, poiché questa verrà eseguita su un server in un data center e l'accesso tramite SSH ogni riavvio è un problema di cui posso fare a meno.
Attualmente sto usando connessioni di database separate per dare migliori restrizioni sui privilegi, con una tabella separata per le password. Sto anche usando MySQLi e recensioni di codice semi-automatizzate per garantire che non ci siano buchi di SQL injection.
Con un meccanismo di hash non salato (cioè deterministico), sarebbe facile calcolare tutti gli hash IP possibili. Con un hash salato, questo problema si riduce, ma non è ancora molto meglio se un utente malintenzionato sta solo cercando di rompere un hash IP. Ovviamente, tutto ciò impedisce anche le ricerche con caratteri jolly.
C'è una soluzione a questo?
Aggiornamento:
Dopo qualche riflessione, ho trovato il seguente schema:
- Webapp ha una chiave pubblica RSA 4096-bit incorporata nell'origine, tengo la chiave privata in un volume TrueCrypt sul mio computer di casa.
- Quando si inseriscono voci nella tabella dei log, l'IP viene riempito con una stringa casuale e crittografato con la chiave pubblica. Ciò rende impossibile la decrittografia e rende la crittografia non deterministica.
- La webapp fornisce un'API per esportare i log, a cui è possibile accedere solo tramite SSL da parte degli utenti amministratori autenticati.
- Scrivo un'applicazione per utilizzare l'API per sfogliare i registri della mia macchina domestica, utilizzando la chiave privata per decrittografare gli indirizzi IP.
- Quando un indirizzo IP è bannato, l'IP viene memorizzato in chiaro nella tabella dei ban.
Qualche commento o suggerimento?