2011-12-06 9 views
13

He visto en muchos artículos que está escrito que La firma diferida y el nombre seguro para un ensamble previene que salga de hi-jacked.¿Qué son exactamente la firma de Delay y los nombres seguros en .net?

¿Qué significa eso?

Lo único que sé es que, sin un nombre seguro, no se puede instalar un ensamblaje en GAC. Supongamos que tengo un ensamblaje sin un nombre fuerte, ¿puede ser hi-jacked?

Alguien aclare mi duda.

Respuesta

31

Hay mucha información acerca de esto en MSDN; por ejemplo: Strong Naming y Delay Signing

para resumir la idea básica:

denominación Fuerte es una manera de estampar su ensamblaje con una simple marca de identificación, que puede ser utilizado más tarde para comprobar que no se ha modificado desde fue desplegado El nombre seguro es básicamente un hash del nombre de la asamblea, la versión y una "clave de nombre seguro" exclusiva para el desarrollador. Las referencias a ensamblajes de nombres seguros pasan por una validación más estricta que la referencia a nombres no fuertemente nombrados; en particular, las referencias de nombres fuertes deben coincidir con los números de versión, y el hash de nombres fuertes debe coincidir.

Esto ayuda a evitar dos fuentes comunes de posibles vulnerabilidades de seguridad en sus programas:

  1. Un usuario malintencionado sustituye a una asamblea en su programa con un conjunto diferente con el mismo nombre de archivo, pero que contiene código malicioso, y convence a su programa para que lo cargue y lo ejecute.
  2. Un usuario malintencionado reemplaza un ensamblado en su programa con una versión diferente del mismo ensamblado, pero que tiene errores conocidos que se han solucionado desde entonces.

El proceso de nombre seguro rechazará estas dos acciones porque los datos del nombre seguro no coincidirán. Esta es la razón por la cual las asambleas en el GAC deben tener un nombre fuerte: se usan de manera ubicua, de lo contrario serían objetivos principales para este tipo de secuestro.

Tenga en cuenta, sin embargo, que los nombres fuertes no hacen absolutamente nada para verificar la identidad del editor. Cualquiera puede publicar una asamblea con un nombre fuerte que diga ser Microsoft y no hay nada en el nombre fuerte para refutar esa afirmación. Verificar la identidad es el trabajo de las firmas digitales de Authenticode, que son diferentes de los nombres fuertes. Los dos se usan a menudo juntos, pero son conceptos ortogonales.

La firma de retardo es una técnica para firmar ensamblajes fuera del proceso de compilación. La idea aquí es que su empresa podría tener políticas que no permitan que las claves de nombre seguro estén disponibles en el momento de la compilación (tal vez se mantengan fuera de línea o protegidas por una contraseña). Un ensamblaje con retraso firmado se marca con un espacio en blanco. clave de nombre: básicamente reserva espacio para la clave que se agregará más tarde, por un usuario autorizado. Mientras tanto, se incluye una clave de nombre fuerte parcial: la información suficiente para que otros ensambles hagan una referencia sólida, pero no lo suficiente como para detectar cambios o modificaciones.

Cuestiones relacionadas