C#: ¿por qué firmar una asamblea?


En algún código C# que he tomado (en Visual Studio 2005), he notado que todos los ensamblados están firmados con el mismo archivo .snk.

  • ¿Por qué el autor anterior habría firmado las asambleas de esta manera?
  • Es necesario firmar asambleas y qué ¿estaría mal no firmar?
  • ¿Qué desventajas hay en firmar asambleas - ¿causa retrasos?
 128
Author: Peter Mortensen, 2010-10-20

5 answers

¿Por qué el autor anterior habría firmado las asambleas de esta manera?

Ni idea, tal vez quería que todas sus asambleas fueran firmadas con la misma clave.

¿Es necesario firmar asambleas y qué tendría de malo no firmarlas?

No, no es necesario, pero es un mecanismo que le permite garantizar la autenticidad de un ensamblaje. Le permite asegurarse de que un ensamblaje no ha sido manipulado y, de hecho, se origina a partir de esto autor. También es necesario si desea ponerlos en el GAC.

¿Qué desventajas hay en la firma de asambleas - causa retrasos?

Los ensamblados firmados solo pueden cargar otros ensamblados firmados. También están vinculados a una versión específica, lo que significa que debe usar redirecciones de enlace o recompilar la aplicación si desea usar una versión diferente. Hay un poco de sobrecarga de rendimiento, así debido a la verificación de la firma, pero es tan poco de lo que no deberías preocuparte.

 151
Author: Darin Dimitrov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-10-20 07:50:06

Debe firmar ensamblajes si desea ponerlos en el GAC.

Si firma un ejecutable, entonces cualquier biblioteca de clases a la que enlace también debe estar firmada. Esto puede ser difícil si está utilizando una biblioteca de terceros (especialmente si necesita usar un control ActiveX o similar).

Richard Grimes ha escrito un buen taller sobre seguridad en .NET y que incluye un capítulo sobre este: Taller de Seguridad

El razón para que todas las asambleas sean firmadas con el mismo .el archivo snk podría ser si usó pruebas unitarias con cobertura de código. Para poder hacer cobertura de código (al menos con las herramientas integradas en la versión de prueba de Visual Studio 2005) y si los ensamblados están firmados, debe especificar qué .los archivos snk se utilizan para la firma, pero creo que solo se puede especificar uno .archivo snk para toda la solución, por lo que si firma las diversas bibliotecas de clases con diferente .archivos snk solo se puede comprobar el código cobertura en uno de ellos a la vez.

 31
Author: Hans Olsson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-08-30 17:21:38

Una razón muy importante para firmar una asamblea es para que pueda estar seguro de que es su asamblea. Dado que la clave privada es suya, nadie más puede firmar una asamblea con esa misma clave. Esto significa que cuando la clave pública de un ensamblado es una que usted conoce (puede recuperarla usando la función GetType().Assembly.GetName().GetPublicKey()), el ensamblado es suyo y no ha sido manipulado.

 15
Author: Pieter van Ginkel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-24 13:31:21

A pesar de todos los usos de la firma dll, la dll debe firmarse solo por dos razones

1. Versionado

2. Autenticación

A. Versioning denota en qué versión se ha construido el dll y mientras los empuja en GAC dos dll con el mismo nombre puede existir pero diferente versión

B. La autenticación indica si la dll no está manipulada y existe igual cuando se creó.

Si quieres entender más sobre el conceptos básicos y la firma dll se puede consultar aquí

 1
Author: Karthikeyan VK,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-07 17:51:49

Además de las respuestas existentes, me gustaría añadir que debe utilizar la firma cuando su DLL va a ser cargado dinámicamente y consumido por el software de terceros. No es un requisito técnico per se, pero es racional, por lo tanto, muy común, que el productor de software de terceros haga cumplir dicha política debido a preocupaciones de seguridad.

Ejemplos donde se debe firmar una asamblea:

  • desarrollo de la extensión Shell / Explorador de Windows, como: extensión del menú contextual para el explorador de Windows
  • desarrollo de extensiones de Visual Studio, como: Project/Item Template Wizard GUI
 0
Author: hardyVeles,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-19 21:16:34