Quindi il seguente è stato un po 'troppo lungo per un commento ...
Forse fare un passo indietro e confrontare i benefici dei controlli preventivi e detective potrebbe aiutare. I controlli preventivi includono la crittografia ma potresti anche codificare la password per renderla meno ovvia. Questo approccio ha lo scopo di proteggere la password dalla condivisione accidentale (una codifica b32 produrrebbe caratteri meno significativi (b32 produce una stringa più lunga di b64). Un simile approccio aumenta la difficoltà di memorizzare la sequenza casuale di numeri e il metodo che dovrebbe essere utilizzato per decodificare la stringa. La codifica Base32 / 64 è un modo semplice per proteggere le password che non richiedono l'aggiunta o la manutenzione di una logica aggiuntiva.
Gli altri approcci ai controlli preventivi probabilmente utilizzerebbero la crittografia. Esistono molti modi diversi per proteggere la chiave. Senza entrare nei dettagli o ribadire ciò che D.W. già pubblicato, è possibile sovrapporre i controlli detective per migliorare la postura di sicurezza. Ad esempio, è possibile controllare l'accesso a un file che contiene la chiave. È possibile correlare eventi (come il riavvio del server / servizio) con l'accesso al file chiave. Qualsiasi altra richiesta di accesso (andata a buon fine o meno) al file chiave potrebbe indicare attività anomale.
Per rispondere alle tue domande, ecco la mia opinione:
se devi memorizzare la password in un file di configurazione, ti consiglio di codificare almeno la password laddove possibile. La codifica della password ridurrebbe la possibilità che sia trapelata nel caso in cui qualcuno scorresse il file, ad esempio con un rappresentante del supporto del venditore che guardava. La crittografia della password è molto più sicura, ma richiede una complessità aggiuntiva.
Come gestire il fatto che una chiave deve essere codificata o memorizzata in un altro file. Bene, separare la chiave di crittografia in un altro file aumenta la difficoltà per qualcuno di visualizzare la chiave. Ad esempio, è possibile utilizzare il controllo accessi per limitare l'accesso al file chiave, mantenendo comunque un ACL più aperto per il file di configurazione. Allo stesso modo, è possibile implementare il controllo per l'accesso al file chiave, che è possibile utilizzare per correlare gli eventi che richiedono l'uso della chiave. La codifica hard della chiave può andare bene se si limita l'accesso al binario. Un'accurata codifica della password può essere facilmente rilevata eseguendo una "stringa" contro il binario. È possibile codificare / crittografare la password codificata (ovvero richiedere una funzione separata (magari con controllo) quando decodificare la password, ma ciò aumenta la complessità per lo sviluppatore e l'amministratore (ovvero come si cambia la chiave senza ricostruire / ricompilare il binario ?).
Le chiavi di crittografia per la password dovrebbero essere leggibili? Dipende. C'è solo un numero limitato di modi per proteggere la chiave. Una chiave di crittografia viene solitamente vista come una stringa alfanumerica difficile da memorizzare nella memoria. Puoi sempre codificare / cifrare la chiave, ma tali metodi non scoraggiano qualcuno abbastanza intelligente da fare uno screenshot. Tuttavia, è possibile utilizzare semplici "chiavi" (più come password) come input per una funzione di espansione dei tasti. In questi casi, forse misure aggiuntive come la codifica aggiungono un valore aggiuntivo rispetto al costo della complessità.
Se possibile, un buon approccio è implementare più livelli di controlli. I controlli preventivi sono più difficili mentre i controlli investigativi sono generalmente più facili da implementare. La separazione dei file chiave potrebbe semplificare l'architettura generale e l'implementazione dei controlli. Indipendentemente dal fatto che vengano utilizzati controlli preventivi o detective, è necessario abilitare alcune funzioni di controllo insieme alla revisione dei registri di controllo. In questo modo, se accade l'improbabile (accesso alla chiave), è possibile intraprendere azioni correttive.