2009-07-31 5 views
8

Ok, devo essere motivo stupido ho già letto questo: http://www.csharp411.com/net-assembly-faq-part-3-strong-names-and-signing/Non riesco a capire questo assembly .NET firma cosa

E io ancora non capisco ...

Diciamo che apro le proprietà del mio progetto e vado alla scheda "Firma", quindi controllo "Firma l'assemblaggio" e creo un nuovo assieme con una password. È stato creato un file chiave con un nome forte con estensione .pfx, con le chiavi pubbliche e private e VS firma digitalmente il mio assembly durante la compilazione, giusto?

E la chiave privata? Non dovrebbe essere privato e io, lo sviluppatore, essere l'unico ad averlo? Non si dovrebbe firmare l'assemblaggio solo con la chiave pubblica?

Qualcuno può spiegarmi questo? Fondamentalmente, voglio firmare l'assemblaggio del mio progetto e consentire agli utenti di verificare se l'assemblaggio è stato realmente sviluppato da me, dove sono l'unico a mantenere la chiave privata (che penso che dovrei).

risposta

8

Hai praticamente ragione.

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

La chiave pubblica viene aggiunta all'assieme 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 della chiave pubblica nel GAC, ma non è davvero un processo conveniente. E devi dire loro il token chiave pubblica in qualche modo.

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

Si noti inoltre che idealmente si dovrebbe avere solo 1 chiave per azienda. Se ti preoccupi di condividerlo con (molti) colleghi di lavoro, cerca di firmare il ritardo.

2

La firma di assiemi è basata su public-key cryptogrpahy (PKI). Il concetto generale in poche parole è che quando firmi crittograficamente qualcosa con PKI, la chiave privata viene utilizzata per eseguire la firma, ma la chiave pubblica viene utilizzata per verificare la firma. Non è possibile utilizzare una chiave privata per verificare la firma, ma solo crearla. Non è possibile utilizzare una chiave pubblica per creare una firma, ma solo verificarla.

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

+0

In realtà, l'uso di chiavi pubbliche/private è abbastanza simmetrico. La codifica normale (non firmata) utilizza la chiave pubblica. –

+0

@Henk: Se si parla di crittografia, sì, la chiave pubblica viene utilizzata per crittografare e la chiave privata viene utilizzata per decrittografare. Nell'ambito della firma, è invertito. E non sono sicuro del perché lo chiamereste simmetrico ... l'intero concetto di usare una chiave per cifrare/firmare e un'altra chiave per decifrare/verificare è abbastanza asimmetrica. – jrista

+0

La firma è efficacemente la crittografia al contrario, questa è la parte simmetrica. Ma hai ragione, si chiama crittografia asimmetrica. –

4

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

1

Firma = Crittografia Hash SHA1 dell'Assemblea utilizzando la chiave privata
verifica = Confrontando la firma PublicKey-decifrati con la Computerizzata Hash dell'Assemblea

Così, chiunque con PublicKey in grado di verificare l'assemblea, ma solo il L'autore di PrivateKey può firmare un assembly.

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