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.)