Vylepšené silné názvy
Podpis silného názvu je mechanismus identity v rozhraní .NET Framework pro identifikaci sestavení. Jedná se o digitální podpis veřejného klíče, který se obvykle používá k ověření integrity dat předávaných od původce (podepisující osoby) příjemci (ověřovatele). Tento podpis se používá jako jedinečná identita sestavení a zajišťuje, že odkazy na sestavení nejsou nejednoznačné. Sestavení je podepsáno jako součást procesu sestavení a následně ověřeno při jeho načtení.
Podpisy silného názvu pomáhají zabránit úmyslným stranám v manipulaci se sestavením a následné opětovné podepsání sestavení pomocí klíče původního podepisující osoby. Klíče silného názvu ale neobsahují žádné spolehlivé informace o vydavateli ani neobsahují hierarchii certifikátů. Podpis silného jména nezaručuje důvěryhodnost osoby, která podepsala sestavení, nebo označuje, zda byla tato osoba oprávněným vlastníkem klíče; označuje pouze, že vlastník klíče podepsal sestavení. Proto nedoporučujeme používat podpis silného názvu jako validátor zabezpečení pro důvěřování kódu třetí strany. Microsoft Authenticode je doporučený způsob ověřování kódu.
Omezení konvenčních silných názvů
Silná technologie pojmenování použitá ve verzích před rozhraním .NET Framework 4.5 má následující nedostatky:
Klíče jsou neustále pod útokem a vylepšené techniky a hardware usnadňují odvozování privátního klíče z veřejného klíče. Pro ochranu před útoky jsou nezbytné větší klíče. Verze rozhraní .NET Framework před rozhraním .NET Framework 4.5 umožňují podepsat libovolný klíč velikosti (výchozí velikost je 1024 bitů), ale podepsání sestavení s novým klíčem přeruší všechny binární soubory, které odkazují na starší identitu sestavení. Proto je velmi obtížné upgradovat velikost podpisového klíče, pokud chcete zachovat kompatibilitu.
Podepisování silných názvů podporuje pouze algoritmus SHA-1. Sha-1 se nedávno zjistilo, že pro zabezpečené aplikace hash není dostatečná. Proto je nutný silnější algoritmus (SHA-256 nebo vyšší). Je možné, že SHA-1 ztratí své postavení kompatibilní se standardem FIPS, což by způsobovalo problémy pro ty, kteří se rozhodli používat pouze software a algoritmy kompatibilní se standardem FIPS.
Výhody vylepšených silných názvů
Hlavní výhody rozšířených silných názvů jsou kompatibilita s existujícími silnými názvy a schopností deklarovat, že jedna identita je ekvivalentní jiné:
Vývojáři, kteří mají již existující podepsaná sestavení, mohou migrovat své identity do algoritmů SHA-2 a zachovat kompatibilitu se sestaveními, která odkazují na staré identity.
Vývojáři, kteří vytvářejí nová sestavení a nezajímají předem existující podpisy silného názvu, můžou používat bezpečnější algoritmy SHA-2 a podepisovat sestavení tak, jak mají vždy.
Použití rozšířených silných názvů
Klíče silného názvu se skládají z klíče podpisu a klíče identity. Sestavení je podepsáno pomocí klíče podpisu a je identifikováno klíčem identity. Před rozhraním .NET Framework 4.5 byly tyto dva klíče identické. Počínaje rozhraním .NET Framework 4.5 zůstává klíč identity stejný jako v předchozích verzích rozhraní .NET Framework, ale podpisový klíč je vylepšený silnějším hashovacím algoritmem. Kromě toho je podpisový klíč podepsaný klíčem identity k vytvoření podpisu čítače.
Atribut AssemblySignatureKeyAttribute umožňuje, aby metadata sestavení používala před existující veřejný klíč pro identitu sestavení, což umožňuje, aby staré odkazy na sestavení pokračovaly v práci. Atribut AssemblySignatureKeyAttribute používá podpis čítače k zajištění, že vlastník nového klíče podpisu je také vlastníkem starého klíče identity.
Sign with SHA-2, without key migration
Spuštěním následujících příkazů z příkazového řádku podepište sestavení bez migrace podpisu silného názvu:
Vygenerujte nový klíč identity (v případě potřeby).
sn -k IdentityKey.snk
Extrahujte veřejný klíč identity a určete, že se má při podepisování pomocí tohoto klíče použít algoritmus SHA-2.
sn -p IdentityKey.snk IdentityPubKey.snk sha256
Zpoždění podepsání sestavení pomocí souboru veřejného klíče identity.
csc MyAssembly.cs /keyfile:IdentityPubKey.snk /delaySign+
Znovu podepište sestavení pomocí úplného páru klíčů identity.
sn -Ra MyAssembly.exe IdentityKey.snk
Sign with SHA-2, with key migration
Spuštěním následujících příkazů z příkazového řádku podepište sestavení s migrovaným podpisem silného názvu.
Vygenerujte pár klíčů identity a podpisu (v případě potřeby).
sn -k IdentityKey.snk sn -k SignatureKey.snk
Extrahujte veřejný klíč podpisu a určete, že se má při podepisování pomocí tohoto klíče použít algoritmus SHA-2.
sn -p SignatureKey.snk SignaturePubKey.snk sha256
Extrahujte veřejný klíč identity, který určuje algoritmus hash, který generuje podpis čítače.
sn -p IdentityKey.snk IdentityPubKey.snk
Vygenerujte parametry pro AssemblySignatureKeyAttribute atribut a připojte atribut k sestavení.
sn -a IdentityPubKey.snk IdentityKey.snk SignaturePubKey.snk
Výsledkem je výstup podobný následujícímu.
Information for key migration attribute. (System.Reflection.AssemblySignatureKeyAttribute): publicKey= 002400000c80000094000000060200000024000052534131000400000100010005a3a81ac0a519 d96244a9c589fc147c7d403e40ccf184fc290bdd06c7339389a76b738e255a2bce1d56c3e7e936 e4fc87d45adc82ca94c716b50a65d39d373eea033919a613e4341c66863cb2dc622bcb541762b4 3893434d219d1c43f07e9c83fada2aed400b9f6e44ff05e3ecde6c2827830b8f43f7ac8e3270a3 4d153cdd counterSignature= e3cf7c211678c4d1a7b8fb20276c894ab74c29f0b5a34de4d61e63d4a997222f78cdcbfe4c91eb e1ddf9f3505a32edcb2a76f34df0450c4f61e376b70fa3cdeb7374b1b8e2078b121e2ee6e8c6a8 ed661cc35621b4af53ac29c9e41738f199a81240e8fd478c887d1a30729d34e954a97cddce66e3 ae5fec2c682e57b7442738
Tento výstup je pak možné transformovat na AssemblySignatureKeyAttribute.
[assembly:System.Reflection.AssemblySignatureKeyAttribute( "002400000c80000094000000060200000024000052534131000400000100010005a3a81ac0a519d96244a9c589fc147c7d403e40ccf184fc290bdd06c7339389a76b738e255a2bce1d56c3e7e936e4fc87d45adc82ca94c716b50a65d39d373eea033919a613e4341c66863cb2dc622bcb541762b43893434d219d1c43f07e9c83fada2aed400b9f6e44ff05e3ecde6c2827830b8f43f7ac8e3270a34d153cdd", "e3cf7c211678c4d1a7b8fb20276c894ab74c29f0b5a34de4d61e63d4a997222f78cdcbfe4c91ebe1ddf9f3505a32edcb2a76f34df0450c4f61e376b70fa3cdeb7374b1b8e2078b121e2ee6e8c6a8ed661cc35621b4af53ac29c9e41738f199a81240e8fd478c887d1a30729d34e954a97cddce66e3ae5fec2c682e57b7442738" )]
Zpoždění podepsání sestavení pomocí veřejného klíče identity.
csc MyAssembly.cs /keyfile:IdentityPubKey.snk /delaySign+
Plně podepište sestavení pomocí páru klíčů podpisu.
sn -Ra MyAssembly.exe SignatureKey.snk