Firma in modo sicuro un pacchetto contenitore

2

Ho un'applicazione desktop che usa un tipo di formato del pacchetto per caricare un blob e fare qualcosa con esso. Per garantire l'autenticità del blob, vorrei aggiungere una firma digitale. Ho studiato l'argomento e c'è una cosa che non capisco.

Se distribuisco la chiave pubblica con il pacchetto (avendo a disposizione i conteggi online come distribuzione) un utente malintenzionato può semplicemente sostituire quella chiave con la propria chiave pubblica e falsificare un pacchetto firmato (poiché l'unico modo per convalidare la firma è per controllarlo con la chiave pubblica). Mi sto perdendo qualcosa? Come posso firmare un pacco in modo veramente sicuro?

    
posta Tamás Szelei 27.10.2011 - 09:53
fonte

4 risposte

2

Le firme digitali non creano fiducia; lo spostano e lo concentrano. Hai ragione: se distribuisci la chiave pubblica con il pacchetto, non hai ottenuto nulla.

Ciò che le firme digitali ti danno è la capacità di gestire la tua fiducia separatamente. Devi ancora trovare un modo per i verificatori (le "applicazioni desktop") per assicurarti che una determinata chiave pubblica sia effettivamente la giusta chiave pubblica dal firmatario autentico. Ma una chiave pubblica è un po 'più breve (in genere poche centinaia di byte), può essere condivisa (puoi firmare diversi blob con la stessa chiave), e può essere distribuita in anticipo (puoi "dare" il chiave pubblica per i prima di che firmano i BLOB prima di sapere quanti blob si firmerà definitivamente.

La chiave pubblica non è l'unica fonte di fiducia. In effetti, il codice all'interno dell'applicazione che utilizza la chiave pubblica per verificare le firme sui blob di dati deve anche far parte del "regno attendibile"; se un utente malintenzionato può modificare quel codice, può sostituire il codice di verifica con qualcosa che dice sempre "quella firma è buona". Venuto a quello, potrebbe anche piantare un virus o un keylogger nell'applicazione. Quindi non solo devi iniziare a fidarti da qualche parte , ma il problema non è esattamente nuovo neanche.

Quindi possiamo presumere che hai già risolto il problema di assicurarti che quando un utente ottiene l'applicazione sul suo sistema desktop, ottiene il "giusto" e non una variante mal intenzionalmente modificata. Esistono diversi modi (ad es. Distribuzione Web tramite HTTPS o installazione eseguita sul posto da parte dell'utente). Questo ci porta alla seguente soluzione: incorporare la chiave pubblica all'interno dell'applicazione stessa.

I fornitori di sistemi operativi lo hanno fatto per anni, per consentire aggiornamenti di sistema sicuri. Quando un Windows decide che deve scaricare e installare un aggiornamento, in realtà verifica una firma digitale sul blob di aggiornamento prima di applicarlo, e lo fa relativamente a una chiave pubblica che è già incorporata in Windows codice.

(Il sistema può essere reso più complesso con certificates se si desidera supportare il rollover della chiave senza un aggiornamento software.)

    
risposta data 27.10.2011 - 14:38
fonte
1

L'idea della firma digitale è quella di proteggere i dati dal cambiamento da parte di qualcun altro nel mezzo senza che il destinatario possa controllare (non dal mittente o dal ricevente). Se vuoi proteggere i dati in modo che il client (ricevitore) non possa cambiarli, le tue opzioni sono limitate.

Poiché utilizzerai la stessa chiave pubblica / privata per tutti i tuoi clienti, potresti compilare la chiave pubblica nel codice (non il file di risorse esterne), quindi l'hacker dovrebbe decompilare il codice per cambiarlo. Ma se decompilerebbe il tuo codice, può rimuovere completamente il controllo della firma.

Aaron

    
risposta data 27.10.2011 - 11:44
fonte
1

Questo è per un particolare sistema operativo?

La maggior parte dei sistemi operativi ha una sorta di sistema integrato, così come Java e alcune altre soluzioni multipiattaforma in cui il sistema operativo o l'interprete bytecode ha una chiave CA radice installata per questo scopo. Oppure hanno un metodo di distribuzione in cui il fornitore del sistema operativo firmerà il pacchetto quando verrà inserito in quel sistema di distribuzione (la maggior parte delle distribuzioni di Linux, ad esempio).

    
risposta data 27.10.2011 - 13:05
fonte
1

Questo è il motivo per cui la maggior parte delle persone utilizza le autorità di certificazione per dimostrare la validità della firma.

Ci sono cose che puoi fare per limitare la tua esposizione senza dover pagare per qualcun altro per firmare il tuo certificato per te - soprattutto dal momento che (presumibilmente) stai distribuendo l'applicazione e il pacchetto:

  1. costruisci la chiave nel software - mentre questo non impedisce a un utente malintenzionato di modificare la chiave, questo è solo un problema se l'applicazione viene distribuita tramite lo stesso canale del pacchetto contenitore

  2. pubblica la tua autorità di certificazione - le implicazioni sono simili al metodo sopra - ma ti consente di utilizzare più di un certificato di firma

Ma questi non sono un sostituto dell'approccio CA affidabile.

    
risposta data 27.10.2011 - 13:45
fonte

Leggi altre domande sui tag