Opções do compilador C# para segurança

As opções a seguir controlam as opções de segurança do compilador. A nova sintaxe do MSBuild é mostrada em negrito. A sintaxe csc.exe mais antiga é mostrada em code style.

  • PublicSign / -publicsign: Assine publicamente a assembleia.
  • DelaySign / -delaysign: assine o assembly usando apenas a parte pública da chave de nome forte.
  • KeyFile / -keyfile : Especifique um arquivo de chave de nome forte.
  • KeyContainer / -keycontainer: especifique um contêiner de chave de nome forte.
  • HighEntropyVA: / -highentropyva Habilitar ASLR (Address Space Layout Randomization) de alta entropia

Nota

Consulte Opções do compilador para obter mais informações sobre como configurar essas opções para seu projeto.

Sinal Público

Essa opção faz com que o compilador aplique uma chave pública, mas não assina o assembly. A opção PublicSign também define um pouco no assembly que informa ao tempo de execução que o arquivo está assinado.

<PublicSign>true</PublicSign>

A opção PublicSign requer o uso da opção KeyFile ou KeyContainer. As opções KeyFile e KeyContainer especificam a chave pública. As opções PublicSign e DelaySign são mutuamente exclusivas. Às vezes chamado de "sinal falso" ou "sinal OSS", a assinatura pública inclui a chave pública em um assembly de saída e define o sinalizador "assinado". Na verdade, a assinatura pública não assina o assembly com uma chave privada. Os desenvolvedores usam sinal público para projetos de código aberto. As pessoas criam assemblies que são compatíveis com os assemblies "totalmente assinados" liberados quando não têm acesso à chave privada usada para assinar os assemblies. Como poucos consumidores realmente precisam verificar se a montagem está totalmente assinada, essas montagens construídas publicamente são utilizáveis em quase todos os cenários em que a totalmente assinada seria usada.

DelaySign

Essa opção faz com que o compilador reserve espaço no arquivo de saída para que uma assinatura digital possa ser adicionada posteriormente.

<DelaySign>true</DelaySign>

Use DelaySign- se quiser um assembly totalmente assinado. Use DelaySign se quiser colocar apenas a chave pública no assembly. A opção DelaySign não tem efeito a menos que seja usada com KeyFile ou KeyContainer. As opções KeyContainer e PublicSign são mutuamente exclusivas. Quando você solicita um assembly totalmente assinado, o compilador faz hash do arquivo que contém o manifesto (metadados do assembly) e assina esse hash com a chave privada. Essa operação cria uma assinatura digital que é armazenada no arquivo que contém o manifesto. Quando um assembly é assinado com atraso, o compilador não calcula e armazena a assinatura. Em vez disso, o compilador mas reserva espaço no arquivo para que a assinatura possa ser adicionada posteriormente.

O uso do DelaySign permite que um testador coloque o assembly no cache global. Após o teste, você pode assinar totalmente o assembly colocando a chave privada no assembly usando o utilitário Assembly Linker . Para obter mais informações, consulte Criando e usando assemblies de nome forte e Atrasar a assinatura de um assembly.

Arquivo-chave

Especifica o nome do arquivo que contém a chave criptográfica.

<KeyFile>filename</KeyFile>

file é o nome do arquivo que contém a chave de nome forte. Quando essa opção é usada, o compilador insere a chave pública do arquivo especificado no manifesto do assembly e, em seguida, assina o assembly final com a chave privada. Para gerar um arquivo de chave, digite sn -k file na linha de comando. Se você compilar com -target:module, o nome do arquivo de chave será mantido no módulo e incorporado ao assembly criado quando você compila um assembly com AddModules. Você também pode passar suas informações de criptografia para o compilador com KeyContainer. Use DelaySign se quiser um assembly parcialmente assinado. Caso KeyFile e KeyContainer sejam especificados na mesma compilação, o compilador tentará primeiro o contêiner de chave. Se isso for bem-sucedido, o assembly será assinado com as informações no contêiner de chaves. Se o compilador não encontrar o contêiner de chave, ele tentará o arquivo especificado com KeyFile. Se isso for bem-sucedido, o assembly será assinado com as informações no arquivo de chave e as informações de chave serão instaladas no contêiner de chaves. Na próxima compilação, o contêiner de chave será válido. Um arquivo de chave pode conter apenas a chave pública. Para obter mais informações, consulte Criando e usando assemblies de nome forte e Atrasar a assinatura de um assembly.

KeyContainer

Especifica o nome do contêiner de chave criptográfica.

<KeyContainer>container</KeyContainer>

container é o nome do contêiner de chave de nome forte. Quando a opção KeyContainer é usada, o compilador cria um componente compartilhável. O compilador insere uma chave pública do contêiner especificado no manifesto do assembly e assina o assembly final com a chave privada. Para gerar um arquivo de chave, digite sn -k file na linha de comando. sn -i Instala o par de chaves em um contêiner. Esta opção não é suportada quando o compilador é executado no CoreCLR. Para assinar um assembly ao criar no CoreCLR, use a opção KeyFile . Se você compilar com TargetType, o nome do arquivo de chave é mantido no módulo e incorporado ao assembly quando você compila este módulo em um assembly com AddModules. Você também pode especificar essa opção como um atributo personalizado (System.Reflection.AssemblyKeyNameAttribute) no código-fonte de qualquer módulo de linguagem intermediária comum (CIL). Você também pode passar suas informações de criptografia para o compilador com KeyFile. Use DelaySign para adicionar a chave pública ao manifesto do assembly, mas assinando o assembly até que ele tenha sido testado. Para obter mais informações, consulte Criando e usando assemblies de nome forte e Atrasar a assinatura de um assembly.

Alta EntropiaVA

A opção de compilador HighEntropyVA informa ao kernel do Windows se um determinado executável suporta ASLR (Address Space Layout Randomization) de alta entropia.

<HighEntropyVA>true</HighEntropyVA>

Esta opção especifica que um executável de 64 bits ou um executável marcado pela opção de compilador PlatformTarget suporta um espaço de endereço virtual de alta entropia. A opção é habilitada por padrão para todas as versões do .NET Standard e .NET Core e versões do .NET Framework começando com o .NET Framework 4.5.

A opção HighEntropyVA permite que versões compatíveis do kernel do Windows usem graus mais altos de entropia ao randomizar o layout do espaço de endereçamento de um processo como parte da ASLR. Usar graus mais altos de entropia significa que um número maior de endereços pode ser alocado para regiões de memória, como pilhas e pilhas. Como resultado, é mais difícil adivinhar a localização de uma determinada região de memória. A opção de compilador HighEntropyVA requer o executável de destino e quaisquer módulos dos quais ele depende podem manipular valores de ponteiro maiores que 4 gigabytes (GB) quando estão sendo executados como um processo de 64 bits.