Domanda

Ok, devo essere stupido perché ho già letto questo: http://www.csharp411.com/ net-assemblaggio-faq-parte-3-forte-nomi-e-firma /

E ancora non capisco ...

Diciamo che apro le proprietà del mio progetto e vado in " Firma " scheda, quindi seleziono " Firma l'assembly " e genera un nuovo assembly con una password. È stato creato un file di chiavi con nome sicuro con estensione .pfx, sia con le chiavi pubbliche che private, e VS firmerà digitalmente il mio assembly durante la compilazione, giusto?

E la chiave privata? Non dovrei essere privato e io, lo sviluppatore, essere l'unico ad averlo? L'assemblea non dovrebbe essere firmata solo con la chiave pubblica?

Qualcuno può spiegarmelo? Fondamentalmente, voglio firmare l'assembly del mio progetto e permettermi agli utenti di verificare se l'assembly è stato davvero sviluppato da me, dove sono l'unico a mantenere la chiave privata (cosa che penso dovrei).

È stato utile?

Soluzione

In pratica hai ragione.

Si crea una coppia di chiavi e la si utilizza per la firma. Ma non spedire il file pfx (o snk), contiene sia le chiavi pubbliche che private e dovrebbe essere tenuto al sicuro.

La chiave pubblica viene aggiunta all'assembly come parte del processo di firma.

Questa firma viene verificata quando un assembly viene caricato in un'applicazione. Gli utenti finali possono anche controllare il token a chiave pubblica nel GAC ma questo non è davvero un processo conveniente. E devi dire loro il token della tua chiave pubblica in qualche modo.

E il tutto è affidabile quanto la tua capacità di mantenere privato il file chiave.

Nota inoltre che idealmente dovresti avere solo 1 chiave per azienda. Se ti preoccupi di condividerlo con (molti) colleghi, esamina la firma ritardata.

Altri suggerimenti

La firma digitale implica il calcolo di un hash del file binario e la crittografia dell'hash generato utilizzando la chiave privata della coppia di chiavi generata. Inoltre, VS aggiungerà anche la chiave pubblica all'assembly. Ora, quando questo viene eseguito sul lato client, il runtime utilizzerà la chiave pubblica nell'assembly per decrittografare la firma (hash) e quindi corrisponderà a questo con l'hash calcolato del file binario sul client. Se corrispondono, significa che il binario non è stato manomesso.

La firma dell'assembly si basa su cryptogrpahy a chiave pubblica (PKI). Il concetto generale in breve è che quando si firma crittograficamente qualcosa con PKI, la chiave privata viene utilizzata per eseguire la firma, ma la chiave pubblica viene utilizzata per verificare la firma. Una chiave privata non può essere utilizzata per verificare la firma, ma solo per crearla. Una chiave pubblica non può essere utilizzata per creare una firma, ma solo per verificarla.

Detto questo, è molto importante mantenere la chiave privata al sicuro e privata. Se desideri mantenere il massimo livello di sicurezza e fornire il massimo livello di autenticità ai tuoi clienti, è probabilmente meglio usare la firma ritardata e avere un singolo individuo o reparto responsabile della gestione delle coppie di chiavi pubbliche / private complete . Gli sviluppatori non dovrebbero avere accesso alla chiave privata e potrebbero utilizzare l'opzione di segno di ritardo per sviluppare ancora assembly con nome sicuro senza compromettere la sicurezza e l'autenticità.

Firma = Crittografia dell'hash SHA1 dell'Assemblea mediante la chiave privata
Verifica = Confronto tra la firma decodificata PublicKey e l'hash calcolato dell'Assemblea

Quindi, chiunque con PublicKey può verificare l'assembly ma solo l'Autore con PrivateKey può firmare un assembly.

Token PublicKey = ultimi 64 bit dell'hash SHA1 di PublicKey in ordine di byte little-endian.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top