2009-07-31 6 views
8

Ok, muss ich stumm Ursache sein ich das schon gelesen habe: http://www.csharp411.com/net-assembly-faq-part-3-strong-names-and-signing/Ich kann nicht Unterzeichnung dieses .NET-Assembly, was zu verstehen scheinen

Und ich es immer noch nicht ...

Angenommen, ich öffne die Eigenschaften meines Projekts und gehe zur Registerkarte "Signieren", dann überprüfe ich "Unterzeichnen Sie die Assembly" und erstellen Sie eine neue Assembly mit einem Passwort. Eine Datei mit starkem Namensschlüssel mit der Erweiterung .pfx mit den öffentlichen und privaten Schlüsseln wurde erstellt, und VS wird meine Assembly beim Kompilieren digital signieren, richtig?

Was ist mit dem privaten Schlüssel? Sollte nicht privat sein und ich, der Entwickler, der Einzige sein? Soll die Assembly nicht nur mit dem öffentlichen Schlüssel signiert werden?

Kann mir das jemand erklären? Grundsätzlich möchte ich die Assembly meines Projekts signieren und erlauben, dass Benutzer überprüfen, ob die Assembly wirklich von mir entwickelt wurde, wo ich der einzige bin, der den privaten Schlüssel behält (was ich denke, dass ich dazu sollte).

Antwort

8

Sie haben grundsätzlich recht.

Sie erstellen ein Schlüsselpaar und verwenden es zum Signieren. Aber versende die pfx (oder snk) -Datei nicht, sie enthält sowohl öffentliche als auch private Schlüssel und sollte sicher aufbewahrt werden.

Der öffentliche Schlüssel wird der Assembly als Teil des Signiervorgangs hinzugefügt.

Diese Signatur wird geprüft, wenn eine Baugruppe in eine Anwendung geladen wird. Endbenutzer können das Token für öffentliche Schlüssel auch im GAC überprüfen, aber das ist kein wirklich praktischer Vorgang. Und Sie müssen ihnen Ihre öffentlichen Schlüssel Token irgendwie sagen.

Und das Ganze ist nur so zuverlässig wie Ihre Fähigkeit, die Schlüsseldatei privat zu halten.

Beachten Sie auch, dass Sie idealerweise nur einen Schlüssel pro Firma haben sollten. Wenn Sie Bedenken haben, es mit (vielen) Kollegen zu teilen, untersuchen Sie die verzögerten Signaturen.

2

Die Assembly Signing basiert auf public-key cryptogrpahy (PKI). Kurz gefasst lautet das allgemeine Konzept: Wenn Sie etwas kryptografisch mit PKI signieren, wird der private Schlüssel zum Signieren verwendet, der öffentliche Schlüssel wird jedoch zur Überprüfung der Signatur verwendet. Ein privater Schlüssel kann nicht zum Überprüfen der Signatur verwendet werden, sondern nur zum Erstellen. Ein öffentlicher Schlüssel kann nicht zum Erstellen einer Signatur verwendet werden, sondern nur verifizieren.

Da ist es sehr wichtig, dass Sie Ihren privaten Schlüssel sicher und privat halten. Wenn Sie die höchste Sicherheitsstufe beibehalten und Ihren Kunden die höchste Authentizität bieten möchten, ist es wahrscheinlich am besten, eine verzögerte Signierung zu verwenden und eine einzelne Person oder Abteilung für die Verwaltung Ihrer vollständigen öffentlichen/privaten Schlüsselpaare verantwortlich zu machen . Entwickler sollten keinen Zugriff auf den privaten Schlüssel haben und die Option "delay-sign" verwenden, um weiterhin Assemblys mit starkem Namen zu entwickeln, ohne die Sicherheit und Authentizität zu beeinträchtigen.

+0

Tatsächlich ist die Verwendung von öffentlichen/privaten Schlüsseln ziemlich symmetrisch. Normale Codierung (nicht signieren) verwendet den öffentlichen Schlüssel. –

+0

@Henk: Wenn Sie Verschlüsselung sprechen, ja, öffentlicher Schlüssel wird verwendet, um zu verschlüsseln, und privater Schlüssel wird verwendet, um zu entschlüsseln. Im Rahmen der Unterzeichnung ist es umgekehrt. Und ich bin nicht sicher, warum Sie das symmetrisch nennen würden ... das ganze Konzept der Verwendung eines Schlüssels zum Verschlüsseln/Unterschreiben und eines anderen Schlüssels zum Entschlüsseln/Verifizieren ist ziemlich asymmetrisch. – jrista

+0

Unterschreiben ist effektiv die umgekehrte Verschlüsselung, das ist der symmetrische Teil. Aber Sie haben Recht, es heißt asymmetrische Kryptographie. –

4

Beim digitalen Signieren wird ein Hash der Binärdatei berechnet und anschließend der generierte Hash mithilfe des privaten Schlüssels aus dem von Ihnen generierten Schlüsselpaar verschlüsselt. Darüber hinaus fügt VS der Baugruppe den öffentlichen Schlüssel hinzu. Wenn dies auf der Clientseite ausgeführt wird, verwendet runtime den öffentlichen Schlüssel in der Assembly, um die Signatur (Hash) zu entschlüsseln, und vergleicht diese dann mit dem berechneten Hash der Binärdatei auf dem Client. Wenn sie übereinstimmen, bedeutet dies, dass die Binärdatei nicht manipuliert wurde.

1

Signing = Verschlüsseln des SHA1-Hash der Versammlung des privaten Schlüssel
Verification mit = Vergleicht man die PublicKey-entschlüsselten Signatur mit dem berechneten Hash der Versammlung

So kann jeder mit PublicKey kann die Anordnung überprüfen, sondern nur die Autor mit PrivateKey kann eine Assembly signieren.

PublicKey-Token = letzte 64 Bits SHA1-Hash von PublicKey in Little-Endian-Byte-Reihenfolge.

Verwandte Themen