Passa al contenuto principale

La firma del codice è il processo di firma digitale di file e script eseguibili utilizzando uno strumento di firma e un certificato digitali. Questo processo si basa su una tecnologia chiamata infrastruttura a chiave pubblica (PKI).

Il codice di firma richiede uno strumento di firma dedicato come SignTool di Microsoft, Jarsigner di Java o anche OpenSSL, a seconda del tipo di file da firmare. La firma stessa consiste in un'operazione crittografica che lega il contenuto del file a un certificato digitale.

Qual è lo scopo della firma digitale del codice?

Ci sono due ragioni principali per la firma digitale del codice:

  1. Per fornire agli utenti l'identità dell'organizzazione che pubblica il file firmato
  2. Fornire un mezzo per verificare l'integrità del file, vale a dire controllare che non sia stato danneggiato o alterato in modo improprio da quando è stato firmato

In che modo la firma del codice fornisce l'identità dell'organizzazione che pubblica il file firmato?

Una firma digitale genera un legame crittografico tra un file e un certificato digitale, dove quest'ultimo rappresenta un'organizzazione. Immagina che il certificato sia un timbro di gomma digitalizzato, che contiene informazioni sull'organizzazione come nome legale, indirizzo e-mail, indirizzo fisico e paese. La firma del codice corrisponde quindi all'apposizione di un timbro digitale sul codice, che riporterà le informazioni sull'organizzazione.

È possibile verificare le informazioni di una firma del codice a ogni apertura del file firmato. Nella maggior parte dei casi, ciò viene svolto automaticamente dai sistemi operativi, che mostrano il nome dell'organizzazione contenuto nel certificato utilizzato per la firma.

Richiesta di controllo dell'account dell'utente

Apertura di un file eseguibile con firma digitale su Microsoft Windows 10.

In che modo la firma del codice fornisce un mezzo per verificare l'integrità del file?

Ogni firma del codice viene creata in base al contenuto del file. Senza entrare troppo nei dettagli tecnici, uno strumento di firma calcolerà una versione ridotta del file da firmare, che chiameremo hash, e firmerà questa versione ridotta utilizzando il certificato digitale fornito. L’hash firmato viene quindi incorporato nel file in un luogo dedicato a ospitare le firme digitali.

Una volta avviata la distribuzione del file firmato, i sistemi operativi e le relative applicazioni rileveranno la presenza della firma. Calcoleranno automaticamente l'hash del file (senza includere l'hash firmato nel calcolo) e lo confronteranno con l'hash firmato incorporato nel file. Se corrispondono, supereranno la verifica. Se l'hash calcolato non corrisponde all'hash firmato, non supereranno la verifica. Se la verifica non viene superata significa che il contenuto del file è stato modificato dopo l'esecuzione della firma (a causa di un errore o di un intento dannoso).

L'affidabilità di questo meccanismo si basa sulla forza dell'algoritmo utilizzato per calcolare il valore hash: più lungo è il valore, più sicuro è. Uno degli standard attualmente in uso è lo SHA-256, un algoritmo che produce hash a 256 bit.

Quali sono i vantaggi della firma del codice?

La firma digitale del codice prevede diversi vantaggi:

  • Aumenti la fiducia degli utenti nel tuo software. Il codice firmato dimostra che il file non solo appartiene all'organizzazione prevista, ma garantisce anche che non è stato manomesso (per inserire malware, per esempio).
  • Migliori la tua reputazione come sviluppatore di software. Più software firmati pubblichi, migliore sarà la tua reputazione. Per esempio, Microsoft firma il codice dei software per garantire che i clienti scarichino i file corretti. I software firmati sono utili anche per gli antivirus e i rilevatori di malware. Se firmi il tuo software, saranno in grado di segnalare versioni sospette e non firmate del tuo software.
  • Eviti gli avvisi e i blocchi dai sistemi operativi. Si aspettano appunto che tutti gli editori di software firmino i loro file eseguibili. È molto probabile che all’avvio di un software non firmato i tuoi utenti visualizzino un messaggio di avviso inviato dal sistema operativo. MacOS notoriamente impedisce l’avvio di file non firmati, costringendo l'utente a bypassare la sicurezza per procedere con l'installazione.

Messaggio di avviso

Messaggio di avviso per l'installazione di software non firmato su Microsoft Windows 10.

Messaggio di blocco

Messaggio di blocco per l'installazione di software non firmato su MacOS.

Per i dispositivi IoT che utilizzano un firmware, uno dei modi migliori per garantire aggiornamenti sicuri è creare un firmware che obblighi ad accettare solo i file aggiornati firmati utilizzando i certificati di firma del codice interni (privati).

Leggi il White paper: L'importanza della firma del codice

Qual è la differenza tra la firma del codice pubblico e la firma del codice privato?

I certificati di firma del codice sono emessi dalle Certificate Authority (CA), che sono motori di emissione dei certificati. La maggior parte delle organizzazioni possiede una o più CA "private" (interne) e può emettere tutti i tipi di certificati digitali, compresi i certificati di firma del codice. Tuttavia, le firme generate con questi certificati sono attendibili solo nell'ambiente interno dell'organizzazione.

Sebbene sia ideale per molti casi d'uso riguardanti applicazioni interne e IoT, l'uso di una CA privata non è indicato quando è prevista la distribuzione del codice in ambienti esterni, dove la CA non viene riconosciuta.

I certificati di firma del codice emessi da CA pubblicamente attendibili, come Entrust, genereranno firme che saranno riconosciute e considerate attendibili da tutti i principali sistemi operativi e applicazioni a livello globale. Le organizzazioni CA pubbliche (chiamate anche semplicemente CA pubbliche) come Entrust applicano standard rigidi per il rilascio dei certificati, devono essere sottoposte a controlli regolari e devono presentare domanda per essere considerate attendibili da tutti i principali sistemi operativi o provider di applicazioni come Microsoft, Apple, Google o Mozilla.

Davanti a un codice firmato, i sistemi operativi e le applicazioni verificano la CA che emette il certificato utilizzato per la firma. Se la CA emittente non è presente nella sua "lista di servizi di fiducia" (chiamata anche archivio radice), la firma non risulterà attendibile e la verifica avrà esito negativo. Da qui l'importanza di ottenere certificati di firma del codice pubblicamente attendibili quando si pubblicano software su internet.

Qual è la differenza tra la firma del codice OV e la firma del codice EV?

Sebbene le organizzazioni siano libere di includere tutti i dettagli che desiderano nei propri certificati di firma del codice privati, i certificati pubblici devono contenere solo informazioni che sono state verificate accuratamente dalla CA pubblica prima di emettere il certificato.

Una CA pubblica può emettere due categorie di certificati di firma del codice pubblicamente attendibili: OV ed EV. Queste categorie corrispondono al livello di verifica dell'organizzazione che viene eseguito dalla CA pubblica prima di emettere il certificato e anche al requisito di archiviazione per il certificato (in particolare, per la sua chiave privata).

  • OV (Convalida dell'organizzazione): Si tratta di un metodo di convalida standard di un'organizzazione eseguito dalle CA. Prevede controlli aziendali (l'azienda esiste? Ha una buona reputazione? Dove si trova?) e la verifica della persona che richiede il certificato per conto dell'organizzazione (è davvero dipendente dell'organizzazione?).
  • EV (convalida estesa): Come suggerisce il nome, si tratta di un processo di convalida esteso che richiede un'ulteriore verifica delle informazioni relative all'organizzazione e del richiedente del certificato. La CA richiederà maggiori informazioni e ulteriore documentazione e procederà effettuando una o più chiamate all'organizzazione e al richiedente prima di rilasciare il certificato. L'archiviazione sicura è obbligatoria per i certificati di firma del codice EV, il che significa che avrai bisogno di un token USB sicuro o di un modulo di sicurezza hardware (HSM) per archiviare il certificato e la sua chiave privata.

Entrust può fornire token USB o nShield HSM per tutti gli ordini di firma del codice, siano essi certificati OV o EV.

Ulteriori informazioni sugli HSM di firma del codice.

Come funziona la marcatura temporale con un certificato di firma del codice?

Nel contesto di una firma del codice, la marcatura temporale è il processo di applicazione di una marcatura temporale digitale, che include la data e l'ora esatte nella firma del codice.

La marcatura temporale è un passaggio cruciale, ma spesso dimenticato, della firma del codice. Le firme hanno infatti una data di scadenza, che corrisponde alla data di scadenza del certificato di firma del codice utilizzato per la firma. Una firma scaduta causerà una verifica non riuscita all'avvio del codice firmato, il che comporterebbe messaggi di avviso e persino l'impossibilità di eseguire il codice.

Se necessario, i certificati privati possono avere una durata molto lunga (10 anni e oltre), che spesso è sufficiente perché il codice firmato potrebbe non essere più utilizzato dopo un periodo così lungo. Tuttavia, i certificati di firma del codice pubblici sono attualmente validi per un massimo di tre anni e ci sono ottime probabilità che il tuo codice sia ancora disponibile una volta terminato questo periodo. La marcatura temporale di una firma del codice attribuirà ulteriori 9 – 10 anni di validità (a seconda del periodo di validità del certificato di marcatura temporale utilizzato). Inoltre potrai riapplicare una nuova marcatura temporale quando quella attuale sta per scadere per estendere ulteriormente la validità della tua firma del codice ed evitare avvisi/blocchi.

La marcatura temporale è utile anche se hai necessità di revocare il certificato di firma del codice se è stato compromesso. La revoca può essere retrodatata alla data e all'ora in cui ritieni che il certificato sia stato compromesso. Se tutte le tue firme sono state marcate temporalmente, rimarranno valide solo le firme generate prima della data di revoca. Qualsiasi firma del codice priva di marcatura temporale risulterà non valida quando il certificato è scaduto o revocato.

È possibile eseguire la marcatura temporale utilizzando certificati di marcatura temporale privati provenienti da una CA interna. Tuttavia, per il codice che deve essere condiviso esternamente, è necessario utilizzare un servizio di marcatura temporale pubblico, che sarà riconosciuto e considerato attendibile da tutti i sistemi operativi e le applicazioni principali. La maggior parte se non tutte le CA pubbliche, inclusa Entrust, offrono un servizio di marcatura temporale pubblico, disponibile tramite un URL dedicato.