Kann jemand meine Gedanken ruhen lassen und sehen, ob dieses Setup bestätigt, dass eine Datei von mir stammt. Eine Idee davon, wie sicher das ist, wäre groß und mögliche Angriffsvektoren.Sichere DSA-Signatur
- Erstellen Sie einen öffentlichen und privaten Schlüssel mit DSACryptoServiceProvider.
- hinzufügen öffentlichen Schlüssel als Anwendungsressourcen
- Update erstellen
- dsa Hash-Update privaten Schlüssel
- Senden Hash und Update-Anwendung (Presume diese können abgefangen werden/geändert) Get
- Überprüfen Hash Korrigieren Sie den öffentlichen Schlüssel.
- Wenn anwenden prüft Update
Das Update eine exe und wird so ausgeführt werden, möchte ich sicherstellen, dass es nicht der ausgeführt wird, wenn jemand ersetzt oder Stampfer mit ihm.
BEARBEITEN: Punkt 6 wurde aktualisiert, da der öffentliche Schlüssel keinen Hash erzeugt, sondern nur überprüft. Ich denke, es ist dieser Teil, mit dem ich mit der Sicherheit von.
Das ist genau der richtige Algorithmus, außer dass Sie nicht mit Ihrem privaten Schlüssel _hash_; Sie generieren einen Hash und dann den Hash mit Ihrem privaten Schlüssel _encrypt. Der Empfänger verwendet Ihren _public_-Schlüssel, um den Hash zu entschlüsseln und zu verifizieren. Ich nehme auch an, dass sich Ihr privater Schlüssel auf einem isolierten Medium befindet (einem USB-Schlüssel oder einem nicht vernetzten Computer). :-) Ihr privater Schlüssel muss geheim gehalten werden, aber alle anderen Komponenten (das Update, der Hash und Ihr öffentlicher Schlüssel) müssen nicht sicher gehalten werden. –
Danke Adam, nur ein paar Punkte, die ich vermisse.Wie bekomme ich den Hash von DSACryptoProvider ohne den privaten Schlüssel? Ich dachte, Hash = DSACryptoServiceProvider.fromxmlstring (privater Schlüssel) .signdata (fileToGetHashFrom) - Zweiter Punkt. Ich dachte nicht, ich könnte Daten mit DSA verschlüsseln, sollte ich etwas anderes verwenden? Verschlüsseln Sie Daten normalerweise nicht mit einem öffentlichen Schlüssel und entschlüsseln Sie sie nicht mit einem privaten Schlüssel. Mein Schlüssel ist in diesem Fall falsch herum? Sorry, wenn ich hier blöd bin ;-) – Oli
@Oli das Erstellen von digitalen Signaturen wird oft als ein 2-stufiger Prozess beschrieben, bestehend aus 1) Erzeugen eines Hashes der zu signierenden Daten, dann 2) Transformieren des Hashes * mittels * privater Schlüssel, so dass er mit dem öffentlichen Schlüssel verifiziert werden kann und nicht gefälscht werden kann. Die einseitige Art des Generieren/Verifizieren-Prozesses weist Ähnlichkeiten mit der Verschlüsselung/Entschlüsselung auf, wobei nur die öffentlichen und privaten Schlüssel "in umgekehrter Richtung" verwendet werden. 'DSACryptoServiceProvider' wird sich um all diese Details genauso kümmern, wie Sie es kommentiert haben, aber ich denke, Adam ist der Punkt, dass der private Schlüssel selbst nicht zum Generieren des Hashs verwendet wird. – shambulator