La chiave è solo una stringa, qualsiasi stringa lo farà, si vuole solo tenerlo lontano da persone a cui non è permesso vedere i dati in chiaro. Potresti semplicemente generare una chiave usando SecureRandom.base64
. Ciò lo renderebbe praticamente impossibile da usare con la forza bruta, con uno sforzo minimo da parte tua.
La cosa interessante qui è la gestione delle chiavi. Le opzioni disponibili con questa gemma sembrano essere:
Inserire la chiave nell'applicazione. Ciò impedisce la lettura "accidentale" di dati sensibili, ad es. un DBA o un tecnico di supporto, ma non è sicuro da chiunque sappia come funziona la gemma, se possono accedere sia al codice sorgente che al database.
Riferimento a un metodo denominato che determinerà la chiave. Questo è più interessante, ma attenzione: mettere la chiave nel database non aggiunge molta sicurezza. Qualcuno che può accedere al database e al codice può fare lo stesso come se il valore fosse hard-coded.
È possibile migliorare le cose un po ', o almeno avere il team di sviluppo separato dai dati crittografati, avendo l'un'applicazione di leggere almeno una parte della chiave da una posizione che gli sviluppatori (o forse solo la maggior parte degli sviluppatori) non può accedere in produzione. Andare oltre è più difficile, almeno con questa gemma così com'è, perché l'applicazione dovrà essere eseguita con l'accesso alle chiavi di crittografia/decrittografia.
Se questo è abbastanza buono dipende dal motivo per cui si stanno crittografando i dati in primo luogo.
fonte
2013-07-01 16:31:22
Ho provato a rispondere, ma ho una domanda: chi (o che tipo di scenario) stai cercando di mantenere segreti i dati in chiaro? –
Alcuni campi del database devono essere crittografati a riposo principalmente per scopi di backup off-site (in cui il sistema di backup off-site non ha accesso alla chiave di crittografia). –
In tal caso, suppongo che il sistema off-site abbia accesso ai dati, ma non la configurazione o il codice sorgente? Probabilmente dovrei comunque errare nei confronti della configurazione per memorizzare almeno parte della chiave, e usare l'abilità della gem per chiamare un metodo per recuperare la chiave corretta come modo di alimentarla. Ma se il codice sorgente è protetto indipendentemente dai dati di backup anche l'hard-coding delle chiavi di cifratura per campo è praticabile. –