2009-07-31 15 views
8

Ok, debo ser causa mudo ya he leído esto: http://www.csharp411.com/net-assembly-faq-part-3-strong-names-and-signing/Me parece que no puede entender esto NET cosa firma

Y todavía no lo entiendo ...

Digamos que abro las propiedades de mi proyecto y voy a la pestaña "Firma", luego marque "Firmar el ensamblaje" y generaré un nuevo ensamblaje con una contraseña. Se creó un archivo de clave de nombre fuerte con la extensión .pfx, con las claves pública y privada, y VS firmará digitalmente mi ensamblaje al compilar, ¿verdad?

¿Qué pasa con la clave privada? ¿No debería ser privado y yo, el desarrollador, ser el único en tenerlo? ¿No debería la asamblea estar firmada solo con la clave pública?

¿Alguien me puede explicar esto? Básicamente, quiero firmar el ensamblaje de mi proyecto y permitir que los usuarios comprueben si el ensamblado fue realmente desarrollado por mí, donde soy el único que guarda la clave privada (que creo que se supone que debo).

Respuesta

8

Tienes razón.

Crea un par de claves y lo usa para firmar. Pero no envíe el archivo pfx (o snk), contiene claves públicas y privadas y debe mantenerse a salvo.

La clave pública se agrega al ensamblaje como parte del proceso de firma.

Esta firma se comprueba cuando se carga un ensamblaje en una aplicación. Los usuarios finales también pueden verificar el token de clave pública en el GAC, pero ese no es realmente un proceso conveniente. Y tienes que decirles tu token de clave pública de alguna manera.

Y todo es tan confiable como su capacidad para mantener la privacidad del archivo de la llave.

También tenga en cuenta que lo ideal es que solo tenga 1 clave por empresa. Si le preocupa compartirlo con (muchos) compañeros de trabajo, investigue el retraso en la firma.

2

La firma de ensamblaje se basa en public-key cryptogrpahy (PKI). El concepto general en pocas palabras es que cuando usted firma criptográficamente algo con PKI, la clave privada se usa para hacer la firma, pero la clave pública se usa para verificar la firma. No se puede usar una clave privada para verificar la firma, solo créela. Una clave pública no se puede usar para crear una firma, solo verificarla.

Dado que es muy importante que mantenga su clave privada segura y privada. Si desea mantener el más alto nivel de seguridad y proporcionar el más alto nivel de autenticidad a sus clientes, probablemente sea mejor utilizar la firma de demora y tener un solo individuo o departamento responsable de gestionar sus pares de claves públicas/privadas completas. . Los desarrolladores no deben tener acceso a la clave privada, y pueden usar la opción de signo de retraso para desarrollar ensamblajes de nombre seguro sin comprometer la seguridad y la autenticidad.

+0

En realidad, el uso de claves públicas/privadas es bastante simétrico. La codificación normal (sin firmar) utiliza la clave pública. –

+0

@Henk: si está hablando de encriptación, sí, la clave pública se usa para encriptar, y la clave privada se usa para descifrar. En el ámbito de la firma, se invierte. Y no estoy seguro de por qué llamaría a eso simétrico ... el concepto completo de usar una clave para encriptar/firmar y otra clave para descifrar/verificar es bastante asimétrico. – jrista

+0

La firma es efectivamente encriptación en reversa, esa es la parte simétrica. Pero tienes razón, se llama criptografía asimétrica. –

4

La firma digital implica calcular un hash de su binario y luego encriptar el hash generado usando la clave privada del par de claves que generó. Además de esto, VS agregará la clave pública también al ensamblado. Ahora, cuando esto se ejecuta en el lado del cliente, el tiempo de ejecución usará la clave pública en el ensamblaje para descifrar la firma (hash) y luego hará coincidir esto con el hash calculado del binario en el cliente. Si coinciden, significa que el binario no ha sido alterado.

1

Firma = Cifrar el hash SHA1 de la Asamblea mediante la clave privada
Verificación = comparar la firma PublicKey-descifra con la Computada Hash de la Asamblea

Por lo tanto, cualquier persona con PublicKey puede verificar la Asamblea, pero sólo el El autor con PrivateKey puede firmar un ensamblaje.

Token PublicKey = últimos 64 bits de hash SHA1 de PublicKey en orden de bytes little-endian.

Cuestiones relacionadas