Chiave segreta HMAC per proteggere le comunicazioni: come mantenere privato su DB

2

Ho un'app mobile che comunica al server su HTTPS. Per autenticare il client e per assicurarmi chi è ciò che ritengo, restituisco con successo la registrazione (a parte il nome utente) di una chiave API segreta (salvata localmente sull'app). Ogni chiamata al metodo privato che segue la registrazione è SHA256 utilizzando [method_name + parameters] con la chiave segreta dell'API.

La mia domanda è questa:

Come faccio a mantenere la chiave API segreta al sicuro sul DB lato server?

Voglio dire, ne ho bisogno in testo normale, quindi posso firmare ogni parametro di richiesta con questa chiave segreta per assicurarmi che la firma corrisponda a quella inviata dal client, quindi se è conservata sul server db come testo in chiaro, allora qualsiasi violazione dei nomi utente + la combinazione di tasti segreta sarà terribile.

    
posta Ami 08.09.2014 - 11:22
fonte

1 risposta

1

È necessario memorizzare la chiave segreta in forma crittografata nel DB in modo che anche se il DB viene compromesso, la chiave è in forma crittografata e non è di alcuna utilità per l'utente malintenzionato a meno che non venga decifrata. Inoltre, è necessario disporre di un meccanismo che consente di decodificare la chiave al volo ogni volta che è necessario utilizzarla.
Aggiunto Il DB memorizza i dati e la logica / codice dell'applicazione è separata dalla memoria DB. La tua chiave segreta verrà archiviata nel DB ma utilizzata nella logica / codice dell'applicazione. Non dovrebbe essere codificato nella logica dell'applicazione, altrimenti non sarà possibile cambiarlo in seguito, quindi è necessario memorizzarlo in DB. Tuttavia, DB può essere compromesso, quindi è necessario archiviarlo in modo sicuro. Per proteggere la chiave è necessario archiviarla in forma crittografata e decodificarla al volo. Ma per applicare questa sicurezza (crittografia / decrittografia) è necessaria un'altra chiave (o coppia di chiavi) che deve anche essere protetta. Un metodo per proteggere quella chiave è che, invece di utilizzare una chiave fissa ben definita, è possibile prendere in considerazione alcuni parametri, ad esempio la data di nascita dell'utente o i dati di creazione dell'account dell'utente (qualsiasi parametro il cui valore può variare per ciascun utente, ma può rimanere atleast costante per qualche tempo per un utente particolare). Prendi il valore di quel parametro specifico, applica una funzione di trasformazione e usa il valore risultante di quella trasformazione come chiave (puoi usarlo direttamente come chiave segreta o la chiave necessaria per la crittografia / decrittografia della chiave segreta). La tua funzione di trasformazione è la parte della logica dell'applicazione e quel parametro è memorizzato in db. Nel caso in cui il tuo db venga compromesso, la funzione di trasformazione non sarà ancora esposta. Nel caso in cui la logica / codice dell'applicazione venga analizzata, il parametro di base per la generazione della chiave non sarà disponibile. In questo modo, sarai in grado di proteggere il tuo sistema a meno che l'hacker non abbia accesso sia al db (per il parametro di generazione della chiave) che alla tua logica / codice dell'applicazione (per la funzione di trasformazione) per ottenere le conoscenze necessarie per la crittografia / decrittografia del tuo chiave segreta. Spero che spieghi la tua domanda.

    
risposta data 08.09.2014 - 11:54
fonte

Leggi altre domande sui tag