5 Stimmen

Unveränderbare Dateien erstellen

Ich möchte eine Datei erstellen und sie an einen Endbenutzer weitergeben, ihn aber daran hindern, Änderungen an der Datei vorzunehmen.

Natürlich kann ich niemanden daran hindern, die Datei zu ändern. Mein Ansatz besteht also darin, die Datei zu erkennen und zurückzuweisen, wenn sie geändert wurde.

Meine Absicht ist es, einen gesalzenen Hash des Dateiinhalts zu generieren und ihn an die Datei anzuhängen. Beim Lesen wird der Hash überprüft, bevor der Rest der Datei gelesen wird. Der Nachteil dabei ist, dass ich das feste "Salz" in der ausführbaren Datei, die die Datei liest, verteilen muss. Natürlich kann ich es bis zu einem gewissen Grad verschleiern, aber das ist immer noch eine Schwachstelle.

Gibt es bessere Ansätze, um diese Art von Problem zu lösen?

13voto

JesperE Punkte 61161

Sie möchten eine digitale Signatur zu Ihrem Dokument. Dies ist ein Bereich, der ausgiebig untersucht wurde. Kurz gesagt, Sie können mit ziemlicher Sicherheit sicherstellen, dass die Datei nicht manipuliert wurde, aber Sie können nicht verhindern. den Benutzer vor Manipulationen zu schützen.

(Der Vergleich mit der Musikindustrie ist nicht ganz zutreffend, da diese die Menschen daran hindern will Kopieren von auch die Datei, was ein viel schwierigeres Problem darstellt).

4voto

freespace Punkte 16029

Wenn Ihre Anwendung auf den Rechnern der Benutzer läuft, können diese die Binärdatei so patchen, dass sie die Überprüfung gar nicht erst durchführt, was Ihre ganze harte Arbeit nutzlos macht :-)

Selbst eine serverseitige Lösung kann durch Abhören des Datenverkehrs umgangen werden. Dann müssen Sie sie also übertreffen und SSL verwenden. Und dann haben sie einfach die Binärdatei gepatcht, wie oben beschrieben, und das war's. Sie wenden also verschiedene Maßnahmen an, um Ihre Binärdatei zu verschleiern, und Ihre Benutzer holen einen Disassembler wie IDA PRO hervor.

Die Frage, die ich mir an Ihrer Stelle stellen würde, wäre: "Wenn ich mich auf ein Wettrüsten mit meinen Nutzern einlasse, würde ich gewinnen?". Wenn die Antwort nein lautet, dann würde ich meine Zeit nicht verschwenden.

3voto

Mecki Punkte 113876

Verwenden Sie eine digitale Signatur. Eine Signatur ist ein Hash, der mit einer Public-Private-Key-Verschlüsselung verschlüsselt wird. Ihre Anwendung enthält nur den öffentlichen Schlüssel. Dieser Schlüssel wird verwendet, um den Hash zu entschlüsseln, und anschließend wird der Hash überprüft. Um den Hash nach einer Dateiänderung zu "korrigieren", muss der Benutzer den neuen Hash berechnen, ihn mit dem privaten Schlüssel verschlüsseln und den alten am Ende der Datei ersetzen. Problem: Er hat den privaten Schlüssel nicht. Der private Schlüssel befindet sich nicht in Ihrer Anwendung. Der private Schlüssel wird nicht mit Ihrer Anwendung ausgeliefert. Ihre Anwendung verfügt nur über den öffentlichen Schlüssel. Wenn er die Datei mit dem öffentlichen Schlüssel verschlüsselt, kann sie nicht mit dem öffentlichen Schlüssel entschlüsselt werden, so dass dies nutzlos ist. Der private Schlüssel befindet sich auf Ihrem Computer und niemand hat Zugriff darauf.

1voto

Magnus Westin Punkte 879

Nicht, wenn Sie eine 100%ige Lösung wollen. Schauen Sie sich nur die Film- und Musikindustrie an. Sie haben es seit vielen Jahren versucht und sind gescheitert :)

Ich denke, Ihre Lösung ist gut genug. Um die Änderung der Datei zu erschweren, könnten Sie sie verschlüsseln, aber dann können sie sie nicht mehr lesen, so dass es nur funktioniert, wenn dies eine gute Einschränkung ist.

1voto

Hapkido Punkte 1231

Zu Ihrem Anliegen, den Hash zu verteilen... Die gute Praxis ist, den Hash zu erstellen und ihn mit einem Paar aus privatem und öffentlichem Schlüssel zu verschlüsseln. Und Sie müssen nur den öffentlichen Schlüssel weitergeben. Auf diese Weise können sie ihn zwar lesen, aber nicht verändern oder neue Schlüssel erstellen.

Ich schlage vor, wie von JesperE vorgeschlagen, eine digitale Signatur zu verwenden. Der Prozess ist Standard, Sie werden viele Beispiele finden, die ihn demonstrieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X