Dove memorizzo in modo sicuro la chiave simmetrica specifica per l'applicazione?

8

Sto scrivendo un'applicazione App1 . Questa applicazione utilizza il database SQLite e ho intenzione di crittografarlo usando AES256 . Per la crittografia simmetrica ho bisogno di una chiave, che ho bisogno di memorizzare da qualche parte.

Da una domande simili ho alcune opzioni, ma nessuna è applicabile nel mio caso:

  1. Collega la chiave di crittografia al tuo accesso amministratore

    Non mi fido dell'utente attualmente loggato. Infatti, voglio nasconderlo a chiunque, ma App1 .

  2. Collega la chiave di crittografia all'hardware.

    App1 viene distribuito su migliaia di macchine, alcuni potrebbero non avere l'hardware necessario.

  3. Digitare la chiave di crittografia all'avvio, memorizzarla nella memoria.

    L'utente non deve avere accesso alla chiave App1 .

  4. Archivia la chiave su un altro server.

    La macchina può essere offline, mentre App1 è in esecuzione.

  5. Archivia la chiave altrove sullo stesso server.

    Quindi può essere trovato.

  6. Memorizza la chiave nel database.

    Ho bisogno di proteggere il database, che è un po 'ricorsivo nel mio caso.

La soluzione possibile è quella di memorizzare la chiave utilizzando DPAPI di Windows , ma

  1. DPAPI si concentra sulla protezione dei dati > per gli utenti <.

    Considerando che ho bisogno di proteggere un'applicazione. Ho anche bisogno che App1 abbia funzionato da diversi utenti sulla stessa macchina

  2. Posso aggiungere entropia secondaria, per limitare l'accesso dell'utente ai dati attualmente registrati.

    Tuttavia, ho bisogno di memorizzare questi dati segreti sulla macchina. Come posso proteggerlo ... Sembra essere di nuovo ricorsivo.

Domanda: dove memorizzo in modo sicuro la chiave simmetrica specifica per l'applicazione?

    
posta oleksii 14.03.2013 - 16:12
fonte

5 risposte

5

Questo è il problema magico del DRM e la risposta breve è che non c'è una buona risposta e se ne trovi una, sarai molto ricco. Affinché l'applicazione possa accedere alla chiave, deve essere in grado di raggiungerla da uno stato non crittografato e qualsiasi cosa possa fare, può farlo anche un utente sufficientemente avanzato.

Potresti usare un TPM (modulo di piattaforma fidato) o HSM (modulo di sicurezza hardware) per memorizzare la chiave fintanto che l'utente non ha accesso amministrativo sul sistema, ma se sono un amministratore, probabilmente saranno in grado di ottenere il TPM o HSM per rinunciare alla chiave. Sarebbe anche difficile assicurarsi che solo il programma sia in grado di ottenere il TPM o l'HSM per eseguire operazioni poiché l'applicazione non ha modo di autenticarsi al keystore che l'utente non può simulare, ma almeno manterrebbe la chiave è sicura.

Risposta così breve, sei completamente sfortunato se gli utenti hanno un amministratore sulla scatola in cui verrà eseguita l'app. Se puoi dare loro solo conti limitati, allora ci sono alcune opzioni, ma non sono ancora particolarmente forti a meno che non blocchi un po 'il sistema.

    
risposta data 14.03.2013 - 16:32
fonte
1

HSM sarebbe un buon modo per andare. Sfortunatamente non sono a conoscenza di eventuali implementazioni di FOSS. Occasionalmente ho considerato di fare il mio "abbastanza buono / molto meglio di niente" HSM. Non sarebbe FIPS certificato o racchiuso in resina epossidica con sigilli di sicurezza, ma sarebbe meglio che avere una chiave solo su una scatola.

La cosa bella di HSM è che puoi controllare l'accesso alla chiave indipendentemente dall'ospite che richiede / usa la chiave. Se la chiave è stata recuperata durante un periodo in cui non è stato effettuato il riavvio o il processo della macchina che ne ha bisogno, è possibile iniziare un'indagine e magari modificare la chiave.

Dato che la soluzione più probabile sta memorizzando la chiave in un posto segreto sul server, ti consiglio di utilizzare SELinux per proteggere la chiave dalla lettura da parte di tutti gli utenti / contesti di sicurezza approvati.

Raccomando anche di utilizzare auditd per posizionare speciali regole di controllo sul file contenente la chiave in modo da poter tenere traccia di ogni volta che il file viene letto. Si consiglia vivamente di inviare i registri di controllo off-host a un host di raccolta registri. Ciò ti consente di verificare l'audit di avere un HSM.

    
risposta data 15.03.2013 - 01:17
fonte
0

E riguardo quanto segue?

1) creazione di una coppia di chiavi pubblica / privata.

2) crittografa la tua chiave simmetrica con la chiave pubblica e la memorizzi nel codice.

3) presenta la tua chiave privata all'avvio per essere letta dal programma (copia / incolla sulla riga di comando).

Lo svantaggio di questo è che il processo è manuale e il "proprietario" deve essere il tipo che avvia il programma.

Il vantaggio, è che ti dà la sicurezza, in quanto la chiave privata va nella memoria locale e, se codificata correttamente, può essere cancellata una volta che è stata usata per decifrare (in java, usa un byte [] quindi cancellala out).

    
risposta data 13.02.2016 - 20:30
fonte
0

Il keystore del provider di servizi di crittografia di Windows può memorizzare solo chiavi asimmetriche. Perché Microsoft l'ha progettato in questo modo è un'ottima domanda. In ogni caso, la tua unica soluzione è usare un HSM. Dovresti memorizzare le chiavi dell'applicazione in un archivio dati che crei e crittografarlo con una chiave master, che è memorizzata in HSM.

La maggior parte dei moderni HSM supporta la sintassi PKCS # 11 per le chiamate API. Gli HSM sono disponibili come schede PCI e box indipendenti. Devi anche considerare il tuo profilo generale Crypto necessita prima di selezionare l'opzione PCI o autonoma.

Separerai anche le funzioni di amministrazione HSM dal server e dagli amministratori del database. Ottieni la separazione dei compiti, che è il principio base di InfoSec quando inizi a gestire la crittografia delle applicazioni e i dati sensibili.

Tieni presente che la crittografia è una tecnica, chiunque può crittografare chiamando le API del provider di servizi Crypto. La crittografia è l'intero processo di generazione di chiavi in modo sicuro, cifrando sicuro e decifrare i dati, memorizzazione sicuro chiavi, impedendo l'accesso non autorizzato e tasti rotanti. Applicare la crittografia a casaccio ti dà un falso senso di sicurezza.

    
risposta data 04.07.2018 - 16:59
fonte
0

Dipende.

Il requisito 2 elimina qualsiasi soluzione basata sull'hardware incluso HSM.

Non hai esattamente descritto da quali tipi di utenti vuoi proteggerli. Hai scritto Voglio nasconderlo a chiunque . Se per qualcuno intendi anche amministratori di sistema, allora c'è no solution . Se intendi utenti con minori privilegi, non amministratori , allora può esserci una soluzione. È possibile creare una risorsa (file, voce di registro, ...) e memorizzare la chiave lì. Dare accesso a questa risorsa solo per l'account in cui è in esecuzione l'applicazione. Quindi tali utenti (eccetto gli amministratori) non potranno accedere alla tua chiave. Ma gli amministratori saranno comunque in grado di modificare le autorizzazioni e ottenere l'accesso alla tua chiave.

    
risposta data 05.07.2018 - 00:01
fonte

Leggi altre domande sui tag