Prima di tutto, non mi riferirei a me stesso come esperto di sicurezza, ma sono stato nella posizione di dover rispondere a questa domanda. Quello che ho scoperto mi ha sorpreso un po ': Non esiste un sistema completamente sicuro . Bene, immagino che un sistema completamente sicuro sia quello in cui i server sono tutti spenti:)
Qualcuno che ha lavorato con me al momento ha descritto la progettazione di un sistema sicuro in termini di innalzamento della barra agli intrusi. Quindi, ogni livello di protezione diminuisce l'opportunità di un attacco.
Ad esempio, anche se si riuscisse perfettamente a proteggere la chiave privata, il sistema non è completamente sicuro. Ma, usando correttamente gli algoritmi di sicurezza e aggiornandosi con le patch si alza la barra. Ma sì, un super computer abbastanza potente e dato abbastanza tempo può rompere la crittografia. Sono sicuro che tutto questo è compreso, quindi tornerò alla domanda.
La domanda è chiara, quindi proverò prima ad affrontare ognuno dei tuoi punti:
Say the key is protected by the filesystem's security model; but what
about (malicious) superusers, or platforms that don't provide such
fidelity?
Sì, se utilizzi qualcosa come Chiave di Windows Memorizza o una chiave privata TLS crittografata con password che sei esposto agli utenti che hanno la password (o accesso) alle chiavi private. Ma, penso che sarete d'accordo sul fatto che alzi il tiro. Gli ACL del file system (se implementati correttamente) forniscono un livello di protezione piuttosto buono. E tu sei nella posizione di controllare e conoscere personalmente i tuoi super utenti.
Or the key is hardcoded into software binaries, but it could always be
decompiled and what about open source software or interpreted code?
Sì, ho visto chiavi hardcoded nei binari. Di nuovo, questo fa alzare un po 'la barra. Qualcuno che attacca questo sistema (se è Java) deve capire che Java produce codice byte (ecc.) E deve capire come decompilare lo si legge. Se si sta utilizzando una lingua che scrive direttamente su codice macchina, è possibile vedere che questo aumenta la barra un po 'più in alto. Non è una soluzione di sicurezza ideale, ma potrebbe fornire un certo livello di protezione.
If the key is generated, such an algorithm would need to be
deterministic (presumably) and then the same problem applies to the
seed.
Sì, in sostanza, l'algoritmo diventa la chiave privata per la creazione della chiave privata. Quindi, ora dovrebbe essere protetto.
Quindi, penso che tu abbia identificato un problema principale con qualsiasi politica di sicurezza, gestione delle chiavi . Avere una politica di gestione delle chiavi in atto è fondamentale per fornire un sistema sicuro. E, è un argomento piuttosto ampio .
Quindi, la domanda è: quanto è sicuro il tuo sistema (e, quindi, la chiave privata)? Quanto è elevato il livello nel tuo sistema?
Ora, se sei disposto a pagare, ci sono alcune persone là fuori che producono soluzioni a questo. Abbiamo finito per utilizzare un HSM (Hardware Security Module) . È fondamentalmente un server a prova di manomissione che contiene una chiave nell'hardware. Questa chiave può quindi essere utilizzata per creare altre chiavi utilizzate per la crittografia. L'idea è che (se configurato correttamente), la chiave non lascia mai l'HSM. Gli HSM costano molto . Ma in alcune aziende (proteggendo i dati della carta di credito), il costo di una violazione è molto più alto. Quindi, c'è un equilibrio.
Molti HSM utilizzano le key card da manutenzione e amministrazione delle funzionalità. Un quorum di key card (5 su 9 diciamo) deve essere fisicamente inserito nel server per poter cambiare una chiave. Quindi, questo aumenta la battuta piuttosto in alto consentendo solo una violazione se un quorum di super utenti collude.
Potrebbero esserci soluzioni software che offrono funzionalità simili a un HSM ma non sono a conoscenza di cosa siano.
So che questo è solo un modo per rispondere alla domanda, ma spero che questo aiuti.