Sdílet prostřednictvím


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:

  1. Vygenerujte nový klíč identity (v případě potřeby).

    sn -k IdentityKey.snk  
    
  2. 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  
    
  3. Zpoždění podepsání sestavení pomocí souboru veřejného klíče identity.

    csc MyAssembly.cs /keyfile:IdentityPubKey.snk /delaySign+  
    
  4. 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.

  1. Vygenerujte pár klíčů identity a podpisu (v případě potřeby).

    sn -k IdentityKey.snk  
    sn -k SignatureKey.snk  
    
  2. 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  
    
  3. Extrahujte veřejný klíč identity, který určuje algoritmus hash, který generuje podpis čítače.

    sn -p IdentityKey.snk IdentityPubKey.snk  
    
  4. 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"
    )]
    
  5. Zpoždění podepsání sestavení pomocí veřejného klíče identity.

    csc MyAssembly.cs /keyfile:IdentityPubKey.snk /delaySign+  
    
  6. Plně podepište sestavení pomocí páru klíčů podpisu.

    sn -Ra MyAssembly.exe SignatureKey.snk  
    

Viz také