c# assemblies

C#: ¿por qué firmar un montaje?



assemblies (4)

En algún código de C # que he asumido (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 ensamblajes y cuál sería el error al no firmar?
  • ¿Qué desventajas hay en la firma de ensamblajes? ¿Causa retrasos?

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

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

¿Es necesario firmar ensamblajes y cuál sería el error al no firmarlo?

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 haya sido alterado y, de hecho, proviene de este autor. También es necesario si desea incluirlos en el GAC.

¿Qué desventajas hay en la firma de ensamblajes? ¿Causa retrasos?

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


A pesar de todos los usos de firmar dll, el dll debería estar firmado solo por dos razones

1. Control de versiones

2. Autenticación

a. Las versiones denotan en qué versión se ha basado el archivo dll y, mientras las empuja hacia el GAC, pueden existir dos archivos DLL con el mismo nombre, pero con una versión diferente

segundo. La autenticación indica si el dll no está alterado y si existe el mismo cuando se creó.

Si quieres saber más sobre los conceptos básicos y la firma de dll, puedes consultar here


Debe firmar ensamblajes si desea incluirlos en el GAC .

Si firmas un archivo ejecutable, también se debe firmar cualquier biblioteca de clase a la que se vincule. Esto puede ser difícil si está usando 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 eso incluye un capítulo sobre esto: Taller de seguridad

El motivo de todas las asambleas que se firman con el mismo archivo .snk podría ser si utilizó pruebas unitarias con cobertura de código. Para poder hacer una cobertura de código (al menos con las herramientas incorporadas en la versión de prueba de Visual Studio 2005) y si los ensamblajes están firmados, debe especificar qué archivos .snk se utilizan para la firma, pero creo que solo puede especifique un archivo .snk para la solución completa, de modo que si firma las distintas bibliotecas de clases con diferentes archivos .snk, solo puede verificar la cobertura del código en uno de ellos a la vez.


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