strongly strong name c# .net assembly-signing

c# - strong - Firma de Asambleas.NET



strongly named key (5)

Como puede leer en esta pregunta anterior relacionada , evitar manipular un conjunto con nombre sólido no es tan sencillo como puede esperar.

¿Qué tiene que ver la firma digital con ensamblajes con nombre fuerte? Leí que un ensamblaje con un nombre seguro tiene una clave pública y una firma digital con él.

Del artículo de Wikipedia "Asamblea (CLI)" :

"Firmar el ensamblaje implica tomar un hash de partes importantes del ensamblaje y luego cifrar el hash con la clave privada. El hash firmado se almacena en el ensamblaje junto con la clave pública. La clave pública descifrará el hash firmado. Cuando el CLR carga un ensamblaje con un nombre seguro que generará un hash desde el ensamblaje y luego lo comparará con el hash descifrado. Si la comparación tiene éxito, significa que la clave pública en el archivo (y por lo tanto el token de clave pública) está asociada con la clave privada se utiliza para firmar el ensamblaje. Esto significará que la clave pública en el ensamblaje es la clave pública del editor del ensamblaje y, por lo tanto, se frustra un ataque de suplantación de identidad ".

¿Es precisa la información anterior? No tiene ninguna referencia a la firma digital. No pude encontrar una página de MSDN que explique cómo se firman los ensamblados, cómo se verifica la firma y cómo se elimina la posibilidad de piratería. Me gustaría saber más sobre estos.



He encontrado una explicación interesante here . Publicar aquí para rastro de papel. Espero que pueda ayudar a alguien.


La firma digital es esencialmente el bit que evita la manipulación. Una vez que se firma el ensamblaje, cualquier cambio invalidará la firma y el clr sabrá que no debe cargarla.

Lea el artículo de wikipedia. Las firmas digitales evitan la manipulación de cualquier documento digital. No sólo montajes. Lo explica mucho mejor de lo que jamás pude.


Tanto la denominación fuerte como las firmas digitales utilizan la criptografía de clave pública para proporcionar evidencia sobre el origen de un ensamblaje, de modo que puede aplicar la política de seguridad para determinar qué permisos se otorgan al ensamblaje .

No difieren en sus detalles técnicos, sino en los problemas que deben resolver.

El propósito de un nombre seguro es únicamente para garantizar que cuando carga un ensamblaje por nombre, está cargando exactamente el ensamblaje que cree que está cargando . Ese es el único propósito de diseño de un nombre fuerte. Dices "Quiero cargar Frobber, versión 4, que vino de FooCorp". El engranaje de nombre seguro asegura que usted realmente cargue precisamente esa DLL, y no otro conjunto llamado Frobber, versión 4, que vino de Dr. Evil Enterprises.

Para lograr esto, todo lo que se requiere es que conozca el token de clave pública asociado con la clave privada de FooCorp. Cómo llega a saber que el token de clave pública es completamente su negocio. No existe una infraestructura diseñada para ayudarlo a obtener esa información de manera segura. Solo se espera que sepas de qué se trata, de alguna manera.

El propósito de una firma digital de un certificado de editor es establecer una cadena de identidad y confianza verificable . La cadena de confianza va desde un fragmento de código de origen desconocido o incierto hasta una "raíz confiable", una entidad en la que ha configurado su sistema operativo para confiar. Usted descarga algún código, y el código tiene una firma digital con un certificado de FooCorp. Usted examina el certificado y dice "este programa proviene de FooCorp. VeriSign confirma la precisión de este certificado". Ya que VeriSign es una de sus raíces de confianza, ahora tiene confianza en que este código realmente proviene de FooCorp.

Observe cuánto más complejo es el problema resuelto por las firmas digitales. No estamos tratando de determinar simplemente "¿está este trozo de código asociado con este nombre o no?" En lugar de eso, estamos tratando de determinar de dónde proviene este código y quién responde por la existencia de la compañía presuntamente responsable, ¿y debemos confiar en esa compañía?

La diferencia entre nombres fuertes y firmas digitales enfatiza lo difícil de la seguridad basada en criptografía. El problema difícil no es la criptografía; eso es sólo matemáticas. El problema difícil es administrar de forma segura la distribución de información sobre las claves y asociarlas con las entidades correctas. Los nombres fuertes, porque intentan resolver un problema muy pequeño pero importante, no tienen problemas de administración clave. O, mejor dicho, le impiden el problema de administración de claves a usted, el usuario. Las firmas digitales tratan de automatizar la distribución segura de información clave a través de certificados, para resolver problemas de confianza e identidad mucho más complejos.

¿Está claro?

(Gran pregunta; esto subirá en mi blog el 3 de septiembre).