Možnosti kompilátoru jazyka C# pro zabezpečení

Následující možnosti řídí možnosti zabezpečení kompilátoru. Nová syntaxe nástroje MSBuild je zobrazena tučně. Starší syntaxe csc.exe je zobrazena v code stylesouboru .

  • PublicSign / -publicsign: Veřejně podepište sestavení.
  • DelaySign / -delaysign: Delay-sign the assembly using only the public part of the strong name key.
  • KeyFile / -keyfile : Zadejte soubor silného názvu klíče.
  • KeyContainer / -keycontainer: Zadejte kontejner klíče silného názvu.
  • HighEntropyVA / -highentropyva: Povolení náhodného rozložení adresního prostoru s vysokou entropií (ASLR)

PublicSign

Tato možnost způsobí, že kompilátor použije veřejný klíč, ale ve skutečnosti nepodepíše sestavení. Možnost PublicSign také nastaví bit v sestavení, které říká modulu runtime, že je soubor podepsaný.

<PublicSign>true</PublicSign>

Možnost PublicSign vyžaduje použití parametru KeyFile nebo KeyContainer. Možnosti KeyFile a KeyContainer určují veřejný klíč. Možnosti PublicSign a DelaySign se vzájemně vylučují. Někdy se označuje jako "falešné znaménko" nebo "znaménko operačního systému", veřejné podepisování zahrnuje veřejný klíč ve výstupním sestavení a nastaví příznak "signed". Veřejné podepisování ve skutečnosti neoznamuje sestavení privátním klíčem. Vývojáři používají veřejné přihlašování pro opensourcové projekty. Lidé sestavení sestavení, která jsou kompatibilní s vydanými "plně podepsanými" sestaveními, pokud nemají přístup k privátnímu klíči použitému k podepsání sestavení. Vzhledem k tomu, že je ve skutečnosti potřeba zkontrolovat, jestli je sestavení plně podepsané, dají se tato veřejně sestavená sestavení použít téměř ve všech scénářích, kdy by se použila plně podepsaná.

Delaysign

Tato možnost způsobí, že kompilátor rezervuje místo ve výstupním souboru, aby bylo možné digitální podpis přidat později.

<DelaySign>true</DelaySign>

Pokud chcete plně podepsané sestavení, použijte delaySign . DelaySign použijte pouze v případě, že chcete umístit veřejný klíč do sestavení. Možnost DelaySign nemá žádný vliv, pokud se nepoužívá se souborem KeyFile nebo KeyContainer. Možnosti KeyContainer a PublicSign se vzájemně vylučují. Když požádáte o plně podepsané sestavení, kompilátor zatřidí soubor, který obsahuje manifest (metadata sestavení) a podepíše hodnotu hash pomocí privátního klíče. Tato operace vytvoří digitální podpis uložený v souboru, který obsahuje manifest. Když je sestavení podepsáno zpožděním, kompilátor nevypočítá a uloží podpis. Místo toho kompilátor rezervuje místo v souboru, aby bylo možné podpis přidat později.

Použití delaySign umožňuje testeru umístit sestavení do globální mezipaměti. Po otestování můžete sestavení plně podepsat umístěním privátního klíče do sestavení pomocí nástroje Assembly Linker . Další informace naleznete v tématu Vytváření a používání sestavení se silným názvem a zpoždění podepisování sestavení.

Keyfile

Určuje název souboru obsahující kryptografický klíč.

<KeyFile>filename</KeyFile>

file je název souboru obsahujícího klíč silného názvu. Při použití této možnosti kompilátor vloží veřejný klíč ze zadaného souboru do manifestu sestavení a poté podepíše konečné sestavení privátním klíčem. Pokud chcete vygenerovat soubor klíče, zadejte sn -k file na příkazovém řádku. Pokud kompilujete pomocí parametru -target:module, název souboru klíče se uchovává v modulu a je začleněn do sestavení vytvořeného při kompilaci sestavení pomocí addModules. Šifrovací informace můžete předat také kompilátoru pomocí KeyContaineru. Pokud chcete částečně podepsané sestavení, použijte delaySign. V případě, že jsou ve stejné kompilaci zadány soubory KeyFile i KeyContainer , kompilátor nejprve vyzkouší kontejner klíčů. Pokud je to úspěšné, sestavení se podepíše informacemi v kontejneru klíčů. Pokud kompilátor kontejner klíčů nenajde, zkusí soubor zadaný pomocí souboru KeyFile. Pokud je to úspěšné, sestavení se podepíše informacemi v souboru klíče a informace o klíči se nainstalují do kontejneru klíčů. Při další kompilaci bude kontejner klíčů platný. Soubor klíče může obsahovat pouze veřejný klíč. Další informace naleznete v tématu Vytváření a používání sestavení se silným názvem a zpoždění podepisování sestavení.

Keycontainer

Určuje název kontejneru kryptografických klíčů.

<KeyContainer>container</KeyContainer>

container je název kontejneru klíče silného názvu. Když se použije možnost KeyContainer, kompilátor vytvoří komponentu s možností sharable. Kompilátor vloží veřejný klíč ze zadaného kontejneru do manifestu sestavení a podepíše konečné sestavení privátním klíčem. Pokud chcete vygenerovat soubor klíče, zadejte sn -k file na příkazovém řádku. sn -i nainstaluje pár klíčů do kontejneru. Tato možnost není podporována, když kompilátor běží na CoreCLR. Pokud chcete při sestavování v CoreCLR podepsat sestavení, použijte možnost KeyFile. Pokud kompilujete pomocí TargetType, název souboru klíče se uchovává v modulu a při kompilaci tohoto modulu do sestavení s AddModules se začlení do sestavení. Tuto možnost můžete také zadat jako vlastní atribut (System.Reflection.AssemblyKeyNameAttribute) ve zdrojovém kódu pro libovolný modul jazyka MSIL (Microsoft Intermediate Language). Šifrovací informace můžete předat také kompilátoru pomocí souboru KeyFile. Pomocí delaySign přidejte veřejný klíč do manifestu sestavení, ale podepisujte sestavení, dokud ho netestujete. Další informace naleznete v tématu Vytváření a používání sestavení se silným názvem a zpoždění podepisování sestavení.

HighEntropyVA

Možnost kompilátoru HighEntropyVA říká jádru Windows, zda konkrétní spustitelný soubor podporuje vysokou entropii Rozložení adresního prostoru randomizace (ASLR).

<HighEntropyVA>true</HighEntropyVA>

Tato možnost určuje, že 64bitový spustitelný soubor nebo spustitelný soubor označený možností kompilátoru PlatformTarget podporuje vysoce entropní virtuální adresní prostor. Tato možnost je ve výchozím nastavení povolená pro všechny verze .NET Standard a .NET Core a verze rozhraní .NET Framework počínaje rozhraním .NET Framework 4.5.

Možnost HighEntropyVA umožňuje kompatibilním verzím jádra Systému Windows používat vyšší stupně entropie při náhodném rozložení adresního prostoru procesu jako součást ASLR. Použití vyšších stupňů entropie znamená, že větší počet adres lze přidělit oblastem paměti, jako jsou zásobníky a haldy. V důsledku toho je obtížnější odhadnout umístění konkrétní oblasti paměti. Možnost kompilátoru HighEntropyVA vyžaduje cílový spustitelný soubor a všechny moduly, na kterých závisí, mohou zpracovávat hodnoty ukazatele větší než 4 gigabajty (GB), když běží jako 64bitový proces.