A cosa serve un .snk?


153

A cosa serve un file .snk? So che sta per Strongly Named Key , ma tutte le spiegazioni di cosa è e come funziona mi vengono in mente.

C'è una semplice spiegazione su come viene utilizzata una chiave con un nome sicuro e su come funziona?

Risposte:


212

Il file .snk viene utilizzato per applicare un nome sicuro a un assembly .NET . consiste in un nome così forte

un semplice nome di testo, numero di versione e informazioni sulla cultura (se fornite), oltre a una chiave pubblica e una firma digitale.

SNK contiene una coppia di chiavi univoca: una chiave privata e pubblica che può essere utilizzata per garantire un nome sicuro univoco per l'assembly. Quando l'assembly ha un nome sicuro, viene creato un "hash" dal contenuto dell'assembly e l'hash viene crittografato con la chiave privata. Quindi questo hash firmato viene inserito nell'assembly insieme alla chiave pubblica di .snk.

Più tardi, quando ha bisogno di qualcuno per verificare l'integrità del fortemente nome in assemblea, essi costruire un hash dei contenuti del montaggio, e utilizzare la chiave pubblica dal gruppo per decifrare l'hash che è venuto con il gruppo - se i due hash corrispondono, la verifica dell'assemblaggio passa.

È importante poter verificare gli assembly in questo modo per garantire che nessuno sostituisca un assembly con uno dannoso che sovvertirà l'intera applicazione. Questo è il motivo per cui gli assembly con nome non sicuro non sono attendibili allo stesso modo degli assembly con nome sicuro, quindi non possono essere inseriti nel GAC. Inoltre, esiste una catena di fiducia: non è possibile generare un assembly con nome sicuro che faccia riferimento a assembly con nome non forte.

L'articolo " I segreti del nome forte (archiviato nella Wayback Machine) ". Fa un ottimo lavoro nel spiegare questi concetti in modo più dettagliato. Con le immagini.


2
Questo significa che quando si firma un assembly con un .PFX, che in realtà lo utilizza per generare un .SNK al volo ogni volta che viene compilato?
Patrick

5
@Patrick no, ovvero la firma Authenticode che, pur dimostrando anche che il file non è stato modificato tra la firma e il controllo, non soddisfa i requisiti del nome sicuro. Il problema è che Authenticode non richiede una catena di attendibilità degli assembly richiesta dalla denominazione avanzata, in modo da poter Authenticode firmare un assembly che si basa su assembly non nominati / firmati.
Scott Chamberlain,

1
Puoi semplicemente togliere lo snk e sostituirlo con un altro .. Non conosco uno scenario reale in cui è utile .. è fondamentalmente le nostre coppie di chiavi su cui non puoi fidarti di questo
Ibrahim

8
Link WayBackMachine a The Secrets of Strong Name
asfeynman,

Aggiorna il link nella risposta (a quello suggerito da @asfeynman), poiché il link è morto e non tutti leggono i commenti.
XelaNimed

22

In un mondo the.Net il file SNK viene utilizzato per firmare i file binari compilati. Ciò consente a un paio di cose di accadere:

  1. È possibile registrare l'Assemblea nel GAC (Global Assembly Cache) . Fondamentalmente in modo da poterlo fare riferimento da più punti sullo stesso computer senza dover conservare più copie).
  2. Puoi usare i tuoi binari da altri binari anch'essi firmati (questo è uno strano tipo di comportamento virale nei confronti degli assiemi firmati).
  3. L'assembly non può (facilmente) essere modificato da terze parti che non hanno accesso al file SNK, fornendo almeno una piccola quantità di sicurezza.

Non ho familiarità con il server BizTalk , quindi non credo di poter fare molta luce su quale scopo specifico servano all'interno di quell'ambiente.

Spero che questo sia stato in qualche modo utile.


7

Il file .snk viene utilizzato per firmare gli assembly per poterli aggiungere alla Global Assembly Cache (GAC).

Il file .snk contiene i token pubblici e privati ​​per la tua chiave. Quando si desidera firmare alcuni dati (o binari) con quella chiave, viene calcolata una somma di controllo sui dati, che viene quindi crittografata con il token privato. Il checksum crittografato viene quindi aggiunto ai dati. Chiunque può utilizzare il token pubblico della propria chiave per decrittografare il checksum e confrontarlo con il checksum calcolato per verificare che i dati firmati non siano stati manomessi.

Puoi leggere di più sulla crittografia a chiave pubblica su http://en.wikipedia.org/wiki/Public-key_cryptography .


4

Un file .snk è una versione persistente della "Chiave" prodotta dall'utilità sn nel set di utilità del framework. Quindi utilizzare questo file per "firmare digitalmente" i propri assiemi. È una chiave in 2 parti .. combinazione di chiave privata-pubblica. La parte pubblica della chiave è pubblicata, cioè nota a tutti. La parte privata è nota solo a te, lo sviluppatore del componente / app e intende essere mantenuta in questo modo.

Quando si firma l'assembly, viene utilizzata la chiave privata e un valore hash per l'assembly per creare una firma digitale incorporata nell'assembly. Successivamente, chiunque carica il tuo assieme passa attraverso una fase di verifica. La chiave pubblica viene utilizzata per convalidare se l'assembly proviene davvero da te .. hai solo bisogno della chiave pubblica per questo (che è anche incorporata in una forma tokenizzata nel manifest dell'assembly). Se l'assemblaggio è stato manomesso, il valore dell'hash sarebbe diverso e il carico dell'assemblaggio verrebbe interrotto. Questo è un meccanismo di sicurezza.


3

Un file .snk viene utilizzato per garantire che qualcun altro non possa far scivolare un assieme al posto del tuo. Fornisce una coppia di chiavi di crittografia / decrittografia.

Quando un file .snk viene utilizzato per firmare un assembly, un valore hashcode viene calcolato dal file assembly e crittografato utilizzando la chiave privata. Quel "digest" crittografato viene quindi aggiunto all'assembly insieme alla chiave pubblica dal file .snk.

Quindi, quando qualcuno riceve l'assemblaggio, può anche calcolare quel valore di codice hash. Usano la chiave pubblica per decrittografare quella calcolata e confrontare i valori calcolati. Se l'assembly è stato completamente modificato, tali valori saranno diversi e l'utente dell'assembly saprà che l'assembly che hai non è quello che hai fornito.

Nel contesto di BizTalk Server, chiunque costruisca eventuali assembly personalizzati utilizzati dalla soluzione BizTalk dovrà utilizzare un file .snk per firmare l'assembly in modo che il server BizTalk possa caricarlo nel GAC e utilizzarlo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.