Come posso proteggere la chiave segreta?

4

Sono un po 'confuso riguardo la protezione della chiave di crittografia segreta. Ecco lo scenario:

  1. Ho bisogno di crittografare alcuni dati (file)
  2. Questi dati saranno letti da un programma (diciamo scritto in C / C ++).
  3. Sia il programma binario che i dati crittografati saranno accessibili ad alcuni utenti arbitrari.

Tuttavia, per leggere i dati il programma deve avere la chiave segreta che è stata utilizzata per crittografare i dati. Una possibilità sarebbe quella di codificare la chiave segreta nel codice sorgente del programma stesso. Tuttavia, la chiave può essere trovata anche dal binario compilato! Inoltre, non ho alcuna possibilità di ricevere input dall'utente per password / chiave segreta, ecc. Inoltre, non ho alcun accesso alla rete per richiedere a un server di inviare la chiave. Per favore, supponiamo che il sistema operativo sia linux / linux come.

Quindi, la domanda è, come posso proteggere questa chiave?

    
posta user2219907 27.08.2014 - 18:22
fonte

3 risposte

2

Il miglior schema possibile sarebbe avere quella chiave di crittografia per ogni utente, simile a un codice di autorizzazione fornito per i prodotti Microsoft. L'unica differenza potrebbe essere che ogni singolo programma che fornisci dovrebbe avere una chiave di crittografia diversa incorporata in esso.

Questo sarebbe l'unico modo per proteggere in qualche modo i dati crittografati.

In entrambi i casi si sta infrangendo il principio di Kerckhoffs (2. Il nemico conosce il sistema), quindi sarebbe probabilmente opportuno implementare la decrittazione / offuscazione del tempo di esecuzione della classe che decodificherà il file di dati. Non fermerà le persone che vogliono davvero ottenerlo, ma sicuramente metterebbe una barriera.

Non esiste un modo valido per proteggere al 100% il tuo programma.

    
risposta data 27.08.2014 - 19:17
fonte
2

Per prima cosa, non inserire la chiave nel file binario. Come notato da Xander, un HSM è progettato per questo scopo in modo tale che una chiave sia accessibile solo all'applicazione e non si trova nel sistema. Potresti essere in grado di configurare un host bastione bloccato su una rete di gestione separata per servire invece questo scopo, che è un po 'meno sicuro. Il livello successivo sarebbe quello di mantenere almeno la chiave in un'area sicura sul file system locale. Quindi si utilizza il controllo degli accessi e la gestione e il monitoraggio delle identità privilegiate per limitare la possibilità che l'utente root ottenga la chiave e non venga rilevata.

Se i dati non sono mai utilizzati dai computer e sono solo utenti / soggetti identificati in modo esplicito, puoi provare qualcosa come Mylar dal MIT.

È necessario trovare la soluzione che massimizzerà il ritorno sull'investimento di sicurezza relativo al rischio di esposizione dei dati crittografati. Ci saranno sempre delle minacce, ma la probabilità e l'impatto dovranno essere considerati prima di selezionare eventuali contromisure.

Inoltre non è chiaro se si tratta di un'applicazione client-server, un'applicazione web o un programma desktop che utilizza un file di dati locale. Queste specifiche influenzerebbero ulteriormente la tua strategia.

    
risposta data 28.08.2014 - 04:35
fonte
1

Non potresti generare la chiave di crittografia basata su una passphrase fornita dall'utente che sta crittografando i dati? Quindi quella frase dovrebbe essere fornita nuovamente per decrittografare i dati crittografati. Ciò richiederebbe ovviamente che la passphrase sia conosciuta e inserita da un utente, in modo che nulla possa semplicemente accadere magicamente.

    
risposta data 22.06.2015 - 11:03
fonte

Leggi altre domande sui tag