¿Para qué sirve un .snk?

153

¿Para qué sirve un archivo .snk? Sé que significa Clave fuertemente nombrada , pero todas las explicaciones de qué es y cómo funciona se me pasan por la cabeza.

¿Hay alguna explicación simple sobre cómo se usa una clave con un nombre fuerte y cómo funciona?

oɔɯǝɹ
fuente

Respuestas:

212

El archivo .snk se usa para aplicar un nombre seguro a un ensamblado .NET . un nombre tan fuerte consiste en

un nombre de texto simple, número de versión e información cultural (si se proporciona), más una clave pública y una firma digital.

El SNK contiene un par de claves único: una clave privada y pública que se puede utilizar para garantizar que tenga un nombre seguro único para el ensamblado. Cuando el ensamblado tiene un nombre fuerte, se construye un "hash" a partir del contenido del ensamblaje, y el hash se cifra con la clave privada. Luego, este hash firmado se coloca en el ensamblado junto con la clave pública del .snk.

Más tarde, cuando se necesita a alguien para verificar la integridad de la fuerte llamado a montar, que construyen un hash de los contenidos de la asamblea, y el uso de la clave pública del conjunto de desencriptar el hash que se incluye con el conjunto - si los dos valores hash coinciden, La verificación de montaje pasa.

Es importante poder verificar los ensamblados de esta manera para garantizar que nadie intercambie un ensamblaje por uno malicioso que subvierta toda la aplicación. Esta es la razón por la cual no se confía en los ensamblados con nombres no seguros de la misma manera que los ensamblados con nombres fuertes, por lo que no se pueden colocar en el GAC. Además, hay una cadena de confianza: no puede generar un ensamblado con un nombre fuerte que haga referencia a ensamblados sin nombre.

El artículo " The Secrets of Strong Naming (archivado en Wayback Machine) ". Hace un excelente trabajo al explicar estos conceptos con más detalle. Con imagenes.

Blair Conrad
fuente
2
¿Significa esto que cuando firmas un ensamblaje con un .PFX, en realidad solo lo usa para generar un .SNK sobre la marcha cada vez que se compila?
Patrick
55
@Patrick no, esa es la firma Authenticode que, aunque también prueba que el archivo no se modificó entre la firma y el cheque, no cumple con los requisitos de nombre seguro. El problema es que Authenticode no requiere una cadena de confianza de los ensamblados que requiere un nombre seguro, por lo que puede autenticar Authenticode para firmar un ensamblaje que se basa en ensamblados con nombre / firma no seguros.
Scott Chamberlain
1
Simplemente puede quitar el snk y reemplazarlo por otro ... No conozco un escenario real donde sea útil ... Básicamente son nuestros pares clave en los que no puede confiar
Ibrahim
8
Enlace de WayBackMachine a The Secrets of Strong Name
asfeynman el
Actualice el enlace en la respuesta (al sugerido por @asfeynman), ya que el enlace está muerto y no todos leen los comentarios.
XelaNimed
22

En un mundo the.Net, el archivo SNK se utiliza para firmar sus archivos binarios compilados. Esto permite que sucedan un par de cosas:

  1. Puede registrar la Asamblea en el GAC (Global Assembly Cache) . Básicamente para que pueda consultarlo desde muchos lugares en la misma máquina sin tener que mantener varias copias).
  2. Puede usar sus archivos binarios desde otros archivos binarios que también están firmados (este es un tipo de comportamiento viral extraño con respecto a los ensamblados firmados).
  3. Su ensamblado no puede ser modificado (fácilmente) por terceros que no tienen acceso al archivo SNK, lo que proporciona al menos una pequeña cantidad de seguridad.

No estoy familiarizado con el funcionamiento del servidor BizTalk , por lo que no creo que pueda arrojar mucha luz sobre el propósito específico que cumplen dentro de ese entorno.

Espero que esto haya sido de alguna ayuda.

ckramer
fuente
7

El archivo .snk se usa para firmar los ensamblados para poder agregarlos al Caché de ensamblados global (GAC).

El archivo .snk contiene los tokens públicos y privados para su clave. Cuando desee firmar algunos datos (o binarios) con esa clave, se calcula una suma de verificación sobre los datos, que luego se cifra con el token privado. La suma de verificación cifrada se agrega a los datos. Cualquiera puede usar el token público de su clave para descifrar la suma de verificación y compararla con la suma de verificación que calcularon para verificar que los datos firmados no hayan sido alterados.

Puede leer más sobre la criptografía de clave pública en http://en.wikipedia.org/wiki/Public-key_cryptography .

Franci Penov
fuente
4

Un archivo .snk es una versión persistente de su "Clave" producida por la utilidad sn en el conjunto de utilidades del marco. Luego usa este archivo para 'firmar digitalmente' sus ensamblajes. Es una clave de 2 partes ... combinación de clave privada-pública. La parte pública de la clave se publica, es decir, es conocida por todos. La parte privada es conocida solo por usted, el desarrollador del componente / aplicación y está destinada a mantenerse así.

Cuando firma su ensamblaje, utiliza la clave privada y un valor hash para su ensamblaje para crear una firma digital que está incrustada en su ensamblaje. A partir de entonces, cualquier persona que cargue su ensamblaje pasa por un paso de verificación. La clave pública se usa para validar si el ensamblado realmente proviene de usted ... solo necesita la clave pública para esto (que también está incrustada en forma de token en el manifiesto del ensamblado). Si el ensamblaje ha sido alterado, el valor de hash sería diferente y la carga del ensamblado sería abortada. Este es un mecanismo de seguridad.

Gishu
fuente
3

Se utiliza un archivo .snk para garantizar que alguien más no pueda deslizar un ensamblaje propio en el lugar del suyo. Proporciona un par de claves de cifrado / descifrado.

Cuando se utiliza un archivo .snk para firmar un ensamblaje, se calcula un valor de código hash a partir del archivo de ensamblaje y se cifra utilizando la clave privada. Ese "resumen" cifrado se agrega al ensamblado junto con la clave pública del archivo .snk.

Luego, cuando alguien recibe su ensamblaje, también puede calcular ese valor de código hash. Utilizan la clave pública para descifrar la que calculó y comparar los valores calculados. Si el conjunto se hubiera cambiado, esos valores serán diferentes y el usuario del conjunto sabrá que el conjunto que tiene no es el que proporcionó.

En el contexto de BizTalk Server, quien cree los ensamblados personalizados que utiliza su solución BizTalk necesitará usar un archivo .snk para firmar el ensamblado para que el servidor BizTalk pueda cargarlo en el GAC y usarlo.

Michael Lang
fuente