Vorrei dare a un processo in stile demone (cioè nessuna interazione dell'utente) l'accesso a una chiave segreta condivisa in modo che possa accedere a un file di dati crittografato condiviso. Le applicazioni utente che accedono agli stessi dati crittografati memorizzano la chiave segreta condivisa nel portachiavi del sistema operativo dell'utente (ad esempio, Keychain OS X o Gnome Keyring, ecc.). Il portachiavi del sistema operativo, a sua volta, protegge la chiave segreta con la password di accesso dell'utente (o altra specifica dell'utente).
La crittografia qui viene utilizzata per proteggere i dati mentre transita nelle reti pubbliche tra server e client. I dati in questione sono dati grezzi da esperimenti scientifici. Per lo più non prezioso (vale a dire improbabile che un utente malintenzionato possa interrompere la crittografia e sfogliare i dati), ma alcuni di essi sono potenzialmente molto preziosi e gli utenti desiderano mantenere i propri dettagli privati finché non decidono di condividerli pubblicamente (ad es. da osservatori casuali sulla rete). Il valore dei dati è difficile da determinare senza analisi scientifiche, quindi osservare l'attività degli utenti (incluse le query) mentre transitano sul cavo non crittografato fornisce alcuni indizi agli osservatori sul valore di un dato.
Il processo daemon è un server di query per il sistema. Legge dai dati condivisi, elabora una query e restituisce identificatori per un set di risultati al client che quindi estrae i dati identificati dall'archivio condiviso.
Consentiamo la sincronizzazione dei dati crittografati con le workstation / portatili locali degli utenti, quindi la crittografia dei dati su disco è tutt'al più un fastidio per un determinato utente malintenzionato. Noi anche consentiamo agli utenti di eseguire il server di query localmente (ancora avviato da init.d / launchd), quindi voglio fare tutto il possibile per proteggere la chiave segreta archiviata con il demone. Il rischio maggiore è che un determinato utente malintenzionato sia in grado di scoprire la chiave segreta dal demone sul proprio sistema. L'esposizione di quella chiave richiederebbe la modifica della chiave, l'aggiornamento di tutti gli utenti e la successiva crittografia del database.
Qual è il modo migliore per memorizzare la chiave segreta condivisa per il processo demone? Posso mettere la chiave sul disco e crittografare il file su disco, ma il processo daemon deve quindi avere la chiave per decrittografarlo. Ciò sembra equivalente alla semplice condivisione della chiave segreta per i dati crittografati originali. Il mio approccio ingenuo sarebbe quello di memorizzare la chiave nel binario dell'applicazione, ma non riesco a immaginare che sia l'opzione migliore. Qualche consiglio?