2011-12-06 9 views
13

Ho visto in molti articoli che è scritto che La firma ritardata e il nome sicuro per un assieme lo impediscono dal jack hi-jack.Che cosa sono esattamente la firma ritardata e i nomi forti in .net?

Che cosa significa?

L'unica cosa che so è senza un nome sicuro non è possibile installare un assembly in GAC. Quindi supponiamo di avere un'assemblea senza un nome forte, può essere hi-jacked?

Qualcuno per favore chiarisci il mio dubbio.

risposta

31

Su MSDN sono disponibili numerose informazioni; per esempio: Strong Naming e Delay Signing

In sintesi l'idea di base:

Forte di denominazione è un modo di stampaggio vostra assemblea con un marchio di identificazione semplice, che può essere utilizzato in seguito per confermare che non è stato modificato dal è stato schierato. Il nome sicuro è fondamentalmente un hash del nome dell'assembly, della versione e di una "chiave strong-name" univoca per lo sviluppatore. I riferimenti alle assemblee dei nomi forti passano attraverso una convalida più rigorosa che fa riferimento a quelli non fortemente definiti; in particolare, i riferimenti con nome sicuro devono corrispondere ai numeri di versione e l'hash del nome sicuro deve corrispondere.

Questo aiuta a evitare due fonti comuni di potenziali vulnerabilità di sicurezza nei programmi:

  1. Un utente malintenzionato sostituisce un'assemblea nel vostro programma con un gruppo diverso con lo stesso nome del file, ma che contiene codice dannoso, e convince il tuo programma a caricarlo ed eseguirlo.
  2. Un utente malintenzionato sostituisce un assembly nel programma con una versione diversa dello stesso assembly, ma con bug noti che sono stati corretti.

Il processo con nome sicuro rifiuterà entrambe le azioni perché i dati del nome sicuro non corrispondono. Questo è il motivo per cui le assemblee nel GAC devono avere un nome forte: sono utilizzate in modo così onnipresente, altrimenti diverrebbero gli obiettivi principali per questo tipo di dirottamento.

Si noti, tuttavia, che i nomi forti non eseguono assolutamente nulla per verificare l'identità dell'editore. Chiunque può pubblicare un assembly con un nome forte che dichiara di essere Microsoft e non c'è nulla nel nome forte per confutare tale asserzione. La verifica dell'identificazione è il lavoro delle firme digitali Authenticode, che sono diverse da una denominazione forte. I due sono spesso usati insieme, ma sono concetti ortogonali.

La firma di ritardo è una tecnica per la firma di assembly al di fuori del processo di generazione. L'idea è che la tua azienda potrebbe disporre di criteri che non consentono la disponibilità delle chiavi dei nomi forti al momento della compilazione (forse sono mantenute offline o protette da una password.) Un assembly firmato in ritardo è contrassegnato da un segno di spunta vuoto. chiave del nome: fondamentalmente riserva spazio per la chiave da aggiungere successivamente, da un utente autorizzato. Nel frattempo, è inclusa una chiave con un nome di battitura parziale: solo le informazioni sufficienti per gli altri assiemi per fare un riferimento forte, ma non abbastanza per rilevare cambiamenti o modifiche.

Problemi correlati