Továbbfejlesztett erős elnevezés

Az erős névazonosítás egy identitáskezelési mechanizmus a .NET-keretrendszerben a szerelvények azonosítására. Ez egy nyilvános kulcsú digitális aláírás, amely általában a kezdeményezőtől (aláírótól) a címzettnek (hitelesítőnek) átadott adatok integritásának ellenőrzésére szolgál. Ez az aláírás egy szerelvény egyedi identitásaként használatos, és biztosítja, hogy a szerelvényre mutató hivatkozások ne legyenek egyértelműek. Az összeállítást a buildelési folyamat részeként aláírják, majd betöltésekor ellenőrzik.

Az erős névaláírások segítenek megakadályozni, hogy a rosszindulatú felek illetéktelenek módosítják a szerelvényt, majd újra aláírják a szerelvényt az eredeti aláíró kulcsával. Az erős névkulcsok azonban nem tartalmaznak megbízható információt a közzétevőről, és nem tartalmaznak tanúsítványhierarchiát sem. Az erős névaláírás nem garantálja a szerelvényt aláíró személy megbízhatóságát, és nem jelzi, hogy az adott személy a kulcs jogos tulajdonosa volt-e; csak azt jelzi, hogy a kulcs tulajdonosa aláírta a szerelvényt. Ezért nem javasoljuk, hogy erős névaláírást használjon biztonsági érvényesítőként a harmadik féltől származó kódok megbízhatóságához. A kód hitelesítésének ajánlott módja a Microsoft Authenticode.

A hagyományos erős nevek korlátozásai

A .NET-keretrendszer 4.5 előtti verziókban használt erős elnevezési technológia a következő hiányosságokkal rendelkezik:

  • A kulcsok folyamatosan támadás alatt állnak, és a továbbfejlesztett technikák és hardverek megkönnyítik a titkos kulcsok nyilvános kulcsból való következtetését. A támadások elleni védelemhez nagyobb kulcsok szükségesek. A .NET-keretrendszer .NET-keretrendszer 4.5 előtti verziói bármilyen méretkulccsal aláírhatók (az alapértelmezett méret 1024 bit), de az új kulccsal rendelkező szerelvény aláírása megszakítja az összes bináris fájlt, amely a szerelvény régebbi identitására hivatkozik. Ezért rendkívül nehéz frissíteni az aláírókulcs méretét, ha fenn szeretné tartani a kompatibilitást.

  • Az erős névaláírás csak az SHA-1 algoritmust támogatja. Az SHA-1 nem megfelelő a biztonságos kivonatolási alkalmazásokhoz. Ezért erősebb algoritmusra (SHA-256 vagy újabb) van szükség. Lehetséges, hogy az SHA-1 elveszíti a FIPS-kompatibilis állapotát, ami problémákat okozna azoknak, akik csak FIPS-kompatibilis szoftvereket és algoritmusokat használnak.

A továbbfejlesztett erős nevek előnyei

A továbbfejlesztett erős nevek fő előnye a már meglévő erős névvel való kompatibilitás, valamint annak a lehetősége, hogy azt állítják, hogy az egyik identitás egyenértékű a másikkal:

  • A már meglévő aláírt összetevőkkel rendelkező fejlesztők frissíthetik identitásaikat az SHA-2 algoritmusokra, miközben fenntartják a kompatibilitást azon összetevőkkel, amelyek a régi identitásokra hivatkoznak.

  • Azok a fejlesztők, akik új assembly-ket hoznak létre, és nem foglalkoznak a már meglévő erős nevű aláírásokkal, használhatják a biztonságosabb SHA-2 algoritmusokat, és a megszokott módon aláírhatják az assembly-ket.

Továbbfejlesztett erős nevek használata

Az erős névkulcsok egy aláírási kulcsból és egy identitáskulcsból állnak. Az összeállítást az aláírási kulccsal írják alá, és az identitáskulccsal azonosítják. A .NET-keretrendszer 4.5-ös verziója előtt ez a két kulcs azonos volt. A .NET-keretrendszer 4.5-ös verziójától kezdve az identitáskulcs ugyanaz marad, mint a korábbi .NET-keretrendszer-verziókban, de az aláírási kulcs erősebb kivonatoló algoritmussal bővül. Emellett az aláírási kulcs aláírása az identitáskulccsal történik, hogy ellenaláírást hozzon létre.

Az AssemblySignatureKeyAttribute attribútum lehetővé teszi, hogy a szerelvény metaadatai a már meglévő nyilvános kulcsot használják a szerelvényidentitáshoz, ami lehetővé teszi a régi szerelvényhivatkozások működését. Az AssemblySignatureKeyAttribute attribútum az ellenjegyzéssel biztosítja, hogy az új aláírási kulcs tulajdonosa is a régi identitáskulcs tulajdonosa legyen.

Bejelentkezés SHA-2-vel kulcsmigrálás nélkül

Futtassa a következő parancsokat a parancssorban egy szerelvény aláírásához anélkül, hogy egy erős névaláírás átváltoztatására kerülne sor.

  1. Hozza létre az új identitáskulcsot (ha szükséges).

    sn -k IdentityKey.snk  
    
  2. Bontsa ki az identitás nyilvános kulcsát, és adja meg, hogy sha-2 algoritmust kell használni a kulccsal való aláíráskor.

    sn -p IdentityKey.snk IdentityPubKey.snk sha256  
    
  3. Késleltetheti a szerelvény aláírását az identitás nyilvános kulcsfájljával.

    csc MyAssembly.cs /keyfile:IdentityPubKey.snk /delaySign+  
    
  4. Írja alá újra az összeállítást a teljes azonosító kulcspárral.

    sn -Ra MyAssembly.exe IdentityKey.snk  
    

Bejelentkezés SHA-2-vel, kulcsmigrálással

Futtassa a következő parancsokat egy parancssorból egy szerelvény migrált erős névaaírással való aláírásához.

  1. Identitás- és aláíráskulcs-pár létrehozása (ha szükséges).

    sn -k IdentityKey.snk  
    sn -k SignatureKey.snk  
    
  2. Bontsa ki az aláírás nyilvános kulcsát, és adja meg, hogy sha-2 algoritmust kell használni a kulccsal való aláíráskor.

    sn -p SignatureKey.snk SignaturePubKey.snk sha256  
    
  3. Bontsa ki az identitás nyilvános kulcsát, amely meghatározza az ellenaláírást létrehozó kivonatoló algoritmust.

    sn -p IdentityKey.snk IdentityPubKey.snk  
    
  4. Hozza létre egy attribútum paramétereit AssemblySignatureKeyAttribute , és csatolja az attribútumot a szerelvényhez.

    sn -a IdentityPubKey.snk IdentityKey.snk SignaturePubKey.snk  
    

    Ez az alábbihoz hasonló kimenetet eredményez.

    Information for key migration attribute.
    (System.Reflection.AssemblySignatureKeyAttribute):
    publicKey=
    002400000c80000094000000060200000024000052534131000400000100010005a3a81ac0a519
    d96244a9c589fc147c7d403e40ccf184fc290bdd06c7339389a76b738e255a2bce1d56c3e7e936
    e4fc87d45adc82ca94c716b50a65d39d373eea033919a613e4341c66863cb2dc622bcb541762b4
    3893434d219d1c43f07e9c83fada2aed400b9f6e44ff05e3ecde6c2827830b8f43f7ac8e3270a3
    4d153cdd
    
    counterSignature=
    e3cf7c211678c4d1a7b8fb20276c894ab74c29f0b5a34de4d61e63d4a997222f78cdcbfe4c91eb
    e1ddf9f3505a32edcb2a76f34df0450c4f61e376b70fa3cdeb7374b1b8e2078b121e2ee6e8c6a8
    ed661cc35621b4af53ac29c9e41738f199a81240e8fd478c887d1a30729d34e954a97cddce66e3
    ae5fec2c682e57b7442738
    

    Ez a kimenet ezután AssemblySignatureKeyAttribute-lá alakítható.

    [assembly:System.Reflection.AssemblySignatureKeyAttribute(
    "002400000c80000094000000060200000024000052534131000400000100010005a3a81ac0a519d96244a9c589fc147c7d403e40ccf184fc290bdd06c7339389a76b738e255a2bce1d56c3e7e936e4fc87d45adc82ca94c716b50a65d39d373eea033919a613e4341c66863cb2dc622bcb541762b43893434d219d1c43f07e9c83fada2aed400b9f6e44ff05e3ecde6c2827830b8f43f7ac8e3270a34d153cdd",
    "e3cf7c211678c4d1a7b8fb20276c894ab74c29f0b5a34de4d61e63d4a997222f78cdcbfe4c91ebe1ddf9f3505a32edcb2a76f34df0450c4f61e376b70fa3cdeb7374b1b8e2078b121e2ee6e8c6a8ed661cc35621b4af53ac29c9e41738f199a81240e8fd478c887d1a30729d34e954a97cddce66e3ae5fec2c682e57b7442738"
    )]
    
  5. Az assemblyt haladék aláírással látja el az identitáshoz tartozó nyilvános kulccsal.

    csc MyAssembly.cs /keyfile:IdentityPubKey.snk /delaySign+  
    
  6. Írja alá teljesen az összeállítást a kulcspárral.

    sn -Ra MyAssembly.exe SignatureKey.snk  
    

Lásd még