Crear y utilizar ensamblados con nombre seguroCreate and use strong-named assemblies

Un nombre seguro se compone de la identidad del ensamblado, es decir, de su nombre de texto simple, número de versión e información sobre referencia cultural (si se proporciona), más una clave pública y una firma digital.A strong name consists of the assembly's identity—its simple text name, version number, and culture information (if provided)—plus a public key and a digital signature. Se genera a partir de un archivo de ensamblado mediante la clave privada correspondiente.It is generated from an assembly file using the corresponding private key. (El archivo de ensamblado contiene el manifiesto del ensamblado, que a su vez contiene los nombres y códigos hash de todos los archivos que forman el ensamblado).(The assembly file contains the assembly manifest, which contains the names and hashes of all the files that make up the assembly.)

Advertencia

Para garantizar la seguridad, no confíe únicamente en el uso de nombres seguros.Do not rely on strong names for security. Estos solo proporcionan una identidad única.They provide a unique identity only.

Un ensamblado con nombre seguro solo puede usar tipos de otros ensamblados con nombre seguro.A strong-named assembly can only use types from other strong-named assemblies. De lo contrario, se pondría en peligro la integridad del ensamblado con nombre seguro.Otherwise, the integrity of the strong-named assembly would be compromised.

Escenario de nombre seguroStrong name scenario

En el siguiente escenario se firma un ensamblado con un nombre seguro y después se hace referencia a él con ese nombre.The following scenario outlines the process of signing an assembly with a strong name and later referencing it by that name.

  1. El ensamblado A se crea con un nombre seguro mediante uno de los métodos siguientes:Assembly A is created with a strong name using one of the following methods:

    • Usar un entorno de desarrollo que admita la creación de nombres seguros, como Visual Studio.Using a development environment that supports creating strong names, such as Visual Studio.

    • Crear un par de claves criptográficas mediante la herramienta de nombre seguro (Sn.exe) y asignar ese par de claves al ensamblado con un compilador de línea de comandos o Assembly Linker (Al.exe).Creating a cryptographic key pair using the Strong Name tool (Sn.exe) and assigning that key pair to the assembly using either a command-line compiler or the Assembly Linker (Al.exe). El Kit de desarrollo de Software (SDK) de Windows proporciona ambas utilidades Sn.exe y Al.exe.The Windows Software Development Kit (SDK) provides both Sn.exe and Al.exe.

  2. El entorno de desarrollo o la herramienta firma el hash del archivo que contiene el manifiesto del ensamblado con la clave privada del programador.The development environment or tool signs the hash of the file containing the assembly's manifest with the developer's private key. Esta firma digital se almacena en el archivo portable ejecutable (PE) que contiene el manifiesto del ensamblado A.This digital signature is stored in the portable executable (PE) file that contains Assembly A's manifest.

  3. El ensamblado B es un consumidor del ensamblado A. La sección de referencia del manifiesto del ensamblado B contiene un token que representa la clave pública del ensamblado A.Assembly B is a consumer of Assembly A. The reference section of Assembly B's manifest includes a token that represents Assembly A's public key. Un token es una parte de la clave pública completa y se usa en lugar de la propia clave para ahorrar espacio.A token is a portion of the full public key and is used rather than the key itself to save space.

  4. Common Language Runtime comprueba la firma de nombre seguro cuando el ensamblado se ubica en la caché global de ensamblados.The common language runtime verifies the strong name signature when the assembly is placed in the global assembly cache. Al enlazar por nombre seguro en tiempo de ejecución, Common Language Runtime compara la clave almacenada en el manifiesto del ensamblado B con la clave usada para generar el nombre seguro del ensamblado A. Si se superan las comprobaciones de seguridad de .NET Framework y el enlace se realiza correctamente, el ensamblado B tiene la garantía de que los bits del ensamblado A no se han alterado y que esos bits proceden realmente de los desarrolladores del ensamblado A.When binding by strong name at run time, the common language runtime compares the key stored in Assembly B's manifest with the key used to generate the strong name for Assembly A. If the .NET Framework security checks pass and the bind succeeds, Assembly B has a guarantee that Assembly A's bits have not been tampered with and that these bits actually come from the developers of Assembly A.

Nota

Este escenario no soluciona los problemas de confianza.This scenario doesn't address trust issues. Los ensamblados pueden llevar firmas completas de Microsoft Authenticode además de un nombre seguro.Assemblies can carry full Microsoft Authenticode signatures in addition to a strong name. Las firmas de Authenticode incluyen un certificado que establece la confianza.Authenticode signatures include a certificate that establishes trust. Es importante tener en cuenta que los nombres seguros no requieren que el código se firme de esta manera.It's important to note that strong names don't require code to be signed in this way. Los nombres seguros solo proporcionan una identidad única.Strong names only provide a unique identity.

Omitir la verificación de la firma de ensamblados de confianzaBypass signature verification of trusted assemblies

A partir de .NET Framework 3.5 Service Pack 1.NET Framework 3.5 Service Pack 1, las firmas de nombre seguro no se validan cuando un ensamblado se carga en un dominio de aplicación de plena confianza, como el dominio de aplicación predeterminado para la zona MyComputer.Starting with the .NET Framework 3.5 Service Pack 1.NET Framework 3.5 Service Pack 1, strong-name signatures are not validated when an assembly is loaded into a full-trust application domain, such as the default application domain for the MyComputer zone. Esta característica se denomina omisión de nombres seguros.This is referred to as the strong-name bypass feature. En un entorno de plena confianza, las peticiones de StrongNameIdentityPermission siempre se realizan correctamente para los ensamblados de plena confianza firmados, independientemente de su firma.In a full-trust environment, demands for StrongNameIdentityPermission always succeed for signed, full-trust assemblies, regardless of their signature. La característica de omisión de nombres seguros evita en esta situación la sobrecarga innecesaria por comprobación de firmas de nombre seguro de ensamblados de plena confianza, lo que permite cargar los ensamblados con mayor rapidez.The strong-name bypass feature avoids the unnecessary overhead of strong-name signature verification of full-trust assemblies in this situation, allowing the assemblies to load faster.

La característica de omisión se aplica a cualquier ensamblado que esté firmado con un nombre seguro y que:The bypass feature applies to any assembly that is signed with a strong name and that has the following characteristics:

  • tenga plena confianza sin evidencia StrongName (por ejemplo, con la evidencia de zona MyComputer);Fully trusted without StrongName evidence (for example, has MyComputer zone evidence).

  • se cargue en un AppDomain de plena confianza;Loaded into a fully trusted AppDomain.

  • se cargue desde una ubicación en la propiedad ApplicationBase de ese AppDomain;Loaded from a location under the ApplicationBase property of that AppDomain.

  • no tenga firma retrasada.Not delay-signed.

Esta característica puede deshabilitarse en aplicaciones concretas o en todo un equipo.This feature can be disabled for individual applications or for a computer. Consulte How to: Disable the Strong-Name Bypass Feature (Cómo: Deshabilitar la característica de omisión de nombres seguros).See How to: Disable the Strong-Name Bypass Feature.

TitleTitle DescripciónDescription
How to: Create a Public-Private Key Pair (Cómo: Crear un par de claves pública y privada)How to: Create a Public-Private Key Pair Describe cómo crear un par de claves criptográficas para firmar un ensamblado.Describes how to create a cryptographic key pair for signing an assembly.
Cómo: Firmar un ensamblado con un nombre seguroHow to: Sign an Assembly with a Strong Name Describe cómo crear un ensamblado con nombre seguro.Describes how to create a strong-named assembly.
Nombres seguros mejoradosEnhanced Strong Naming Describe las mejoras en nombres seguros en .NET Framework 4.5.NET Framework 4.5.Describes enhancements to strong-names in the .NET Framework 4.5.NET Framework 4.5.
Cómo: Hacer referencia a un ensamblado con nombre seguroHow to: Reference a Strong-Named Assembly Describe cómo hacer referencia a tipos o recursos en un ensamblado con nombre seguro en tiempo de compilación o tiempo de ejecución.Describes how to reference types or resources in a strong-named assembly at compile time or run time.
Cómo: Deshabilitar la característica de omisión de nombres seguros.How to: Disable the Strong-Name Bypass Feature Describe cómo deshabilitar la característica que omite la validación de firmas de nombre seguro.Describes how to disable the feature that bypasses the validation of strong-name signatures. Esta característica puede deshabilitarse para todas las aplicaciones o para aplicaciones específicas.This feature can be disabled for all or for specific applications.
Creación de ensambladosCreating Assemblies Proporciona información general sobre los ensamblados de archivos individuales y múltiples archivos.Provides an overview of single-file and multifile assemblies.
Cómo retrasar la firma de un ensamblado en Visual StudioHow to Delay Sign an Assembly in Visual Studio Explica cómo firmar un ensamblado con un nombre seguro después de haber creado el ensamblado.Explains how to sign an assembly with a strong name after the assembly has been created.
Sn.exe (Herramienta de nombre seguro)Sn.exe (Strong Name Tool) Describe la herramienta incluida en .NET Framework que ayuda a crear ensamblados con nombres seguros.Describes the tool included in the .NET Framework that helps create assemblies with strong names. Esta herramienta proporciona opciones para la administración de claves, así como para la generación y comprobación de firmas.This tool provides options for key management, signature generation, and signature verification.
Al.exe (Assembly Linker)Al.exe (Assembly Linker) Describe la herramienta incluida en .NET Framework que genera un archivo que tiene un manifiesto de ensamblado a partir de archivos de recursos o módulos.Describes the tool included in the .NET Framework that generates a file that has an assembly manifest from modules or resource files.