Ok, ich muss dumm sein, denn ich habe das schon gelesen: Ссылка
Und ich verstehe es immer noch nicht ...
Sagen wir, ich öffne die Eigenschaften meines Projekts und gehe zur Registerkarte "Signieren", dann überprüfe ich "Signiere die Assembly" und erzeuge eine neue Assembly mit einem Passwort. Eine Datei mit starkem Namensschlüssel mit der Erweiterung PFX, mit dem öffentlichen und dem privaten Schlüssel, 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? Sollte die Assembly nicht nur mit dem öffentlichen Schlüssel signiert sein?
Kann mir das jemand erklären? Grundsätzlich möchte ich die Assembly meines Projekts signieren und den Benutzern erlauben, zu überprüfen, ob die Assembly wirklich von mir entwickelt wurde, wo ich der einzige bin, der den privaten Schlüssel behält (was ich eigentlich sollte).
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 Signierungsprozesses hinzugefügt.
Diese Signatur wird geprüft, wenn eine Assembly 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 Ihr Public-Key-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.
Beim digitalen Signieren wird ein Hash Ihrer Binärdatei berechnet und der generierte Hash wird dann mit dem privaten Schlüssel 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.
Die Assemblierung der Assemblierung 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 ein Höchstmaß an Sicherheit wünschen 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.
Signing = Verschlüsseln des SHA1 Hash der Assembly mit dem Private Key
Verification = Vergleichen der PublicKey-Entschlüsselten Signatur mit dem berechneten Hash der Assembly
So kann jeder mit PublicKey die Assembly überprüfen, aber nur der Autor mit PrivateKey kann eine Assembly signieren.
PublicKey-Token = die letzten 64 Bits des SHA1-Hashs von PublicKey in Little-Endian-Byte-Reihenfolge.
Tags und Links .net assemblies signing strongname