claus ginsel: Datei-Upload, Prüfsumme mit PHP

Hallo

ich überlege gerade, wie ich die Prüfsumme einer Datei, die ich zuvor mittels HTTP-Request hochgeladen habe, im Anschluss bilden kann, um beispielsweise nach späterer Verschlüsselung und Entschlüsselung die Unversehrtheit feststellen zu können.

Dabei kam mir der Gedanke, dass beim Upload-Prozess ja bereits eine Prüfsumme gebildet wird. Wenn diese vorliegt, könnte man die ja vielleicht verwenden.

Ist die Frage, ob man mit PHP an diese Prüfsumme herankommt und welches Verfahren dazu verwendet wird?

Gruß Claus

  1. Hallo claus,

    Dabei kam mir der Gedanke, dass beim Upload-Prozess ja bereits eine Prüfsumme gebildet wird.

    Nicht, dass ich wüsste. Aber ich lasse mich gerne eines besseren belehren. Im Netzwerkprotokoll des Browsers sehe ich jedenfalls nichts (im Firefox jedenfalls, in Chrome krieg ich nicht raus wie man die multipart/form-data Segmente anzeigt)

    Für den Multipart-Transfer werden Boundary-Strings erstellt. Aber das ist keine Prüfsumme. Der Browser verlässt sich darauf, dass das TCP Protokoll tut, was es soll. Ein TCP (oder IP?) Paket sollte eine Prüfsumme auf Paketebene enthalten.

    Rolf

    --
    sumpsi - posui - obstruxi
    1. danke Rolf

      dann muss ich wohl selbst ran.

      letztendlich dauert das auch nur einen Wimpernschlag. Hab gerade einmal 80 MB testweise mit PHP-sha1 gehasht, weniger als 1 sek.

      schönes WE

  2. Lieber claus,

    um beispielsweise nach späterer Verschlüsselung und Entschlüsselung die Unversehrtheit feststellen zu können.

    das soll heißen, Du traust dem Prozess des Ver- und Entschlüsselns zu, dass er Deine Datei korrumpiert? Welche Indizien sprechen für Deine Annahme?

    Liebe Grüße

    Felix Riesterer

    1. Hallo Felix,

      Je nach Algorithmus braucht man die Checksumme, um feststellen zu können, ob mit dem richtigen Passwort entschlüsselt wurde.

      Allerdings sollte ein brauchbarer Dateiverschlüsseler das intern behandeln.

      Claus, ich hoffe, du willst die Verschlüsselung nicht selbst implementieren.

      Rolf

      --
      sumpsi - posui - obstruxi
      1. Hi Rolf

        natürlich nicht, mittels openSSL über Shell-Aufruf.

        Auch Dir ein schönes Wochenende

    2. Felix, stell Dir vor, ein Angreifer erhält Zugriff auf die Datei. Ok, die ist verschlüsselt. Was aber, wenn er auch nur 1 Bit verändert? Dann ist die entschlüsselte Datei nicht mehr das, was ich behütet ablegen wollte. Irgendwo las ich: Verschlüsselung ohne Prüfsumme ist genauso schlecht wie keine Verschlüsselung 😉

      Dann hab ich gelesen, es soll bei der Bibliothek openSSL bei großen Dateien, > 500 MB, vorkommen, dass die entschlüsselte Datei Schrott ist. Ich kann die Richtigkeit dieser Aussage aus dem Netz nicht verifizieren, aber zumindest kann ich für diesen Fall vorbeugen.

      Feierabend, Ich wünsche ein schönes Wochenende

      1. Lieber claus,

        Felix, stell Dir vor, ein Angreifer erhält Zugriff auf die Datei. Ok, die ist verschlüsselt.

        was genau bedeutet "Zugriff"? Nur lesenden oder auch schreibenden Zugriff? Es ist die Frage, wie der Angreifer Zugriff bekommen hat. Wenn er schreiben kann, ist das Problem noch größer.

        Was aber, wenn er auch nur 1 Bit verändert?

        Dafür sollte es eine wasserdichte Backup-Strategie geben.

        Irgendwo las ich: Verschlüsselung ohne Prüfsumme ist genauso schlecht wie keine Verschlüsselung 😉

        In welchem Kontext wurde diese Äußerung getätigt? Beim Selbstschrauben eines File-Lockers, der intern die Dateien verschlüsselt ablegt? Hoffentlich nicht...

        Dann hab ich gelesen, es soll bei der Bibliothek openSSL bei großen Dateien, > 500 MB, vorkommen, dass die entschlüsselte Datei Schrott ist.

        Ist das nicht das deutlichste Alarmzeichen, dass Deine Vorgehensweise vielleicht suboptimal ist? Warum nicht auf einen Fileserver zugreifen, vor dem sich Deine Webapplikation authentifizieren muss? Dann sind die Dateien auf dem und nicht auf Deinem Webspace. Wie der die Dateien dann intern handhabt, kann Dir dann egal sein.

        Ich kann die Richtigkeit dieser Aussage aus dem Netz nicht verifizieren, aber zumindest kann ich für diesen Fall vorbeugen.

        Nein, das kannst Du nicht. Wenn Deine Webapplikation selbst verschlüsselt, dann muss sie auch den Schlüssel für das Entschlüsseln haben. Hat der Angreifer die Applikation gekapert, dann könnte er in den Besitz der notwendigen Schlüssel kommen. Wenn diese hingegen in Form eines Benutzerzugangs implementiert sind, dann hat Deine Applikation den Schlüssel nicht und der Angreifer hat nix, womit er Entschlüsseln könnte.

        Du kannst die Verwaltung der Logindaten von einem externen Server erledigen lassen, zu dem Deine Applikation eine Verbindung aufbaut. Damit vermeidest Du, dass Du Logindaten und/oder irgendwelche Schlüssel verwalten musst, weil sich der Benutzer Deiner Applikation nicht vor Dir, sondern vor dem anderen Server authentifizieren muss.

        Liebe Grüße

        Felix Riesterer

        1. Hi Felix

          was genau bedeutet "Zugriff"?

          Schreibzugriff. Auf welchem Weg auch immer er diesen erlangt.

          Dafür sollte es eine wasserdichte Backup-Strategie geben.

          Die Dateien auf dem Webserver sind nicht das Original, daher kümmere ich mich nicht um Backups. Ich möchte nur garantieren, dass die Dateien den Empfänger so erreichen, wie sie vom Absender eingestellt wurden.

          In welchem Kontext wurde diese Äußerung getätigt? Beim Selbstschrauben eines File-Lockers, der intern die Dateien verschlüsselt ablegt? Hoffentlich nicht...

          beim Googeln zu Verschlüsseln von großen Dateien.

          Ist das nicht das deutlichste Alarmzeichen, dass Deine Vorgehensweise vielleicht suboptimal

          das sehe ich nicht so, deshalb will ich ja die Prüfsumme dazu geben, um dann im Fall einer misslungenen Verifizierung reagieren zu können. Ich weiß nicht genau, ob das im Zusammenhang mit openSSL oder RSA verlautbart wurde. Auf alle Fälle ist bei mir hängen geblieben, Prüfsumme!

          Wenn Deine Webapplikation selbst verschlüsselt, dann muss sie auch den Schlüssel für das Entschlüsseln haben.

          Der Schlüssel wird nicht auf dem Server gespeichert, sondern vom User eingegeben.

          Du kannst die Verwaltung der Logindaten von einem externen Server erledigen lassen

          Bis vor kurzem hatte Apple, ich wiederhole Apple, auf einem seiner Portale keine Gegenmaßnahmen gegen Brute Force Attacken eingerichtet. Ergebnis war Einbruch. Externe Dienste zu nutzen heißt irgendwie, diesen auf Gedeih und Verderb ausgeliefert zu sein. Außerdem werde ich von meinem Arbeitgeber gerüffelt, wenn ich weitere Kosten verursache 😉

          Gruß Claus

          1. was genau bedeutet "Zugriff"?

            Schreibzugriff. Auf welchem Weg auch immer er diesen erlangt.

            Dafür sollte es eine wasserdichte Backup-Strategie geben.

            Die Dateien auf dem Webserver sind nicht das Original, daher kümmere ich mich nicht um Backups. Ich möchte nur garantieren, dass die Dateien den Empfänger so erreichen, wie sie vom Absender eingestellt wurden.

            Hallo Claus,

            in dem Fall erscheint mir eine reine Prüfsumme zu wenig. Wäre in diesem Fall eine digitale Signatur, zum Beispiel mit GPG nicht zielführender? Bei dieser kann der Empfänger unabhängig anhand des öffentlichen Schlüssels überprüfen, von wem die Signatur erstellt wurde und die Integrität der Datei prüfen. Wenn die Prüfsumme über den gleichen Kanal wie die Datei heruntergeladen wird, hilft das ansonsten nur gegen versehentliche Veränderungen aber nicht gegen dein Szenario.

            LG Andreas

        2. Hallo Felix,

          Dann hab ich gelesen, es soll bei der Bibliothek openSSL bei großen Dateien, > 500 MB, vorkommen, dass die entschlüsselte Datei Schrott ist.

          ich hab die Seite wiedergefunden:

          https://www.it-swarm.com.de/de/linux/so-verschluesseln-sie-eine-grosse-datei-openssl-mit-dem-oeffentlichen-schluessel/940274898/

          Gruß Claus