andreas : gesendete mail() mit Anhang verschlüsseln

Hallo!
ich nochmal:-)
Also ich hab das ja dank Euch hervorragend hinbekommen mit meiner mysqldump-Anhang-mail.
Jetzt stell ich mir nur die Frage, wie sicher das ist so ne kpl. DB einfach so quer durchs Netz zuschicken, so Datenbanken können ja schonmal sehr sensible Daten enthalten!
Was gibt es für Möglichkeiten die Mail mit Anhang, die ich aus PHP sende zu verschlüsseln?
Meine Überlegung war die zuvor gespeichert Dump-Date aufzurufen und kpl. mit MD5 zu verschlüsseln, dann anhängen.

Oder gibts ne Möglichkeit das direkt in Shell zu machen?
So sieht der Aufruf bis jetzt aus:

system ("/usr/bin/mysqldump -u".$user." -p".$pass." -h".$host." ".$db." | gzip >  ".$file, $fp);

oder halt so:

$attachment = fread(fopen($file, "r"), filesize($file));
$attachment = MD5($attachment);
...

Ist das zu empfehlen, was sagt wohl der Sever dazu, sind ja immerhin schnell ein paar Mio Zeichen, und auch deutlich mehr!

Oder gibt es noch andere Methoden, dass ich das nicht von Hand entschlüsslen muß? Oder mache ich mir hierübr nur unnötig Sorgen?

Grüße
 Andreas

  1. Moin

    Jetzt stell ich mir nur die Frage, wie sicher das ist so ne kpl. DB einfach so quer durchs Netz zuschicken

    Bei Licht betrachtet entpricht der Sicherheitsgrad dem Äquivalent einer Postkarte.

    Meine Überlegung war die zuvor gespeichert Dump-Date aufzurufen und kpl. mit MD5 zu verschlüsseln, dann anhängen.

    MD5 ist eine Hashfunktion und kein Verschlüsselungsalgorithmus, will heissen du kriegst die Daten zwar wunderbar verschlüsselt und nebenbei noch auf 128 Byte komprimiert (ja, da kann zip nur von träumen :) aber es gibt keinen Weg die Daten wiederherzustellen.

    Oder gibts ne Möglichkeit das direkt in Shell zu machen?

    Zum Verschlüsseln möchtest du sehr wahrscheinlich GPG bzw PGP verwenden. Wenn du nämlich ein asymetrisches Verfahren einsetzt (also eins das unterschiedlicher Schlüssel zum Verschlüsseln und zum Entschlüsseln benutzt), brauchst du den Entschlüsselungsschlüssel nicht auf dem Server zu speichern, d.h. selbst wenn ein böser Bube vollkommenen Serverzugriff erlangen würde, kann er die Mails nicht entschlüsseln. Ausserdem bewart dich das vor den Kopfschmerzen das Passwort irgendwie sicher an die Shell zu übergeben.

    So sieht der Aufruf bis jetzt aus:
    system ("/usr/bin/mysqldump -u".$user." -p".$pass." -h".$host." ".$db." | gzip >  ".$file, $fp);

    Ja, gpg ist ein Tool das sich wie alle anderen auch an die Spielregeln der Standardein- und ausgabe hält und problemlos da einzuschleusen sein dürfte. Eine Beschreibung würde jedoch hier viel zu weit führen. Installier dir gpg und lies die Doku, da steht alles notwendige drin. Ich glaub auf selfaktuell liegt auch ein Feature-Artikel zu den Grundlagen.

    Wenn du ein bisschen Abenteuerlust und einen Server mit einem entsprechend kompilierten PHP-Modul hast, möchtest du evt. auch die PHP-Ver- und Entschlüsselungsroutinen in Betracht ziehen (http://www.php.net/manual/de/ref.mcrypt.php), davon würde ich aber dringend abraten. Sichere Kryptographie ist nichts was man sich mal eben so nebenbei beibringt.
    Einer der wichtigsten Punkte der den Briten das regelmäßige Mitlesen der deutschen Enigma ermöglichte, war ja auch die mangelhafte Bedienung.

    --
    Henryk Plötz
    Grüße aus Berlin

    1. Hi!

      Bei Licht betrachtet entpricht der Sicherheitsgrad dem Äquivalent einer Postkarte.

      :-)

      MD5 ist eine Hashfunktion und kein Verschlüsselungsalgorithmus, will heissen du kriegst die Daten zwar wunderbar verschlüsselt und nebenbei noch auf 128 Byte komprimiert (ja, da kann zip nur von träumen :) aber es gibt keinen Weg die Daten wiederherzustellen.

      Vielleicht bau ich mir wie kürzlich bei Heise gelesen einen kleinen Cluster mit 160 Athlon PCs, die sollten da schon was mit Brute-Force bewirken, aber wenn das über 1 Mio zeichen sind exisitiert unsere Welt schon nich mehr und das Ding ist immer noch am rechnen, aber schon fast bei 1% :-)

      Zum Verschlüsseln möchtest du sehr wahrscheinlich GPG bzw PGP verwenden. Wenn du nämlich ein asymetrisches Verfahren einsetzt (also eins das unterschiedlicher Schlüssel zum Verschlüsseln und zum Entschlüsseln benutzt), brauchst du den Entschlüsselungsschlüssel nicht auf dem Server zu speichern, d.h. selbst wenn ein böser Bube vollkommenen Serverzugriff erlangen würde, kann er die Mails nicht entschlüsseln. Ausserdem bewart dich das vor den Kopfschmerzen das Passwort irgendwie sicher an die Shell zu übergeben.

      Ja, GPG ist auf dem Server schon installiert, jetzt müßte man nur noch wissen wie man das nutzt:-)

      Wenn du ein bisschen Abenteuerlust und einen Server mit einem entsprechend kompilierten PHP-Modul hast, möchtest du evt. auch die PHP-Ver- und Entschlüsselungsroutinen in Betracht ziehen (http://www.php.net/manual/de/ref.mcrypt.php), davon würde ich aber dringend abraten. Sichere Kryptographie ist nichts was man sich mal eben so nebenbei beibringt.

      Na, die Lust hab ich zur Zeit nicht. Ich möchte nur ohne allzuviel Aufwand die Mail verschlüsseln können.

      Einer der wichtigsten Punkte der den Briten das regelmäßige Mitlesen der deutschen Enigma ermöglichte, war ja auch die mangelhafte Bedienung.

      Warst zufällig kürzlich im Kino

      Gibt es eigentlich eine deutschsprachige Erklärung zu PGP/GPG, wie komme ich übehaupt an so einen Schlüssel, wer vergibt den?

      Viele Grüße
       Andreas

      1. Moin

        Warst zufällig kürzlich im Kino

        Noe, hab da bloß ein Buch drüber im Regal stehen über das ich kürzlich mal wieder gestolpert bin.

        Gibt es eigentlich eine deutschsprachige Erklärung zu PGP/GPG, wie komme ich übehaupt an so einen Schlüssel, wer vergibt den?

        zu a) google und das web sind schon was tolles. Da wärst du beim ersten google-Ergebnis bei http://www.gnupg.org/ gelandet, hättest dort auf das nicht grade unscheinbare "German" geklickt um zu http://www.gnupg.org/de/gnupg.html zu kommen, von wo aus du dich dann in aller Ruhe aus zu http://www.gnupg.org/de/docs.html weiterklicken kannst. Nicht immer ist die Doku die sich auf den Originalseiten befindet so schlecht, dass man zwingend irgendeine geheime Alternativdoku kennen muß ;-)
        zu b) den machst du selbst. Du generierst dir mit gpg --gen-key einen Schlüssel (je nach deinen Systemeinstellungen ist die Benutzerführung komplett auf Deutsch! auch wenn ich bei der Übersetzung von "passphrase" mit "mantra" eher Bauchschmerzen kriege) indem du ihm ein paar einfache Fragen beantwortest (sowas wie "wie heisst du ?" :) und ihn ein bisschen rechnen lässt. Wenn du was nicht verstehst, einfach den default-Wert nehmen oder in der Doku nachlesen (empfohlen).
        Du kannst als Mantra ruhig etwas schwieriges und sicheres nehmen! Es wird nachher auf dem Server nicht zum Verschlüsseln gebraucht, wohl aber zum Entschlüsseln.

        Mit gpg --list-keys überzeugst du dich jetzt, dass der Schlüssel erfolgreich angelegt wurde, um daraufhin den öffentlichen Schlüssel mit gpg --export --armor userid  zu exportieren (bei userid setzt du einfach deinen Namen, deine Emailaddresse oder sonstwas ein, was nur in deinem grade erzeugten Schlüssel und in keinem anderen deines Schlüsselbundes vorkommt). Wie du siehst gibt gpg den Schlüssel auf der Standardausgabe aus, also wenn du nicht vorher dran gedacht hast, wiederholst du den letzten Schritt und leitest die Ausgabe mit > in eine Datei um. Wie das geht, weisst du ja jetzt :)
        Diese Datei kopierst du jetzt auf den Server (hab ich erwähnt, dass du alle bisherigen Schritte tunlichst auf einer subjektiv als sicher eingeschätzten Maschine, also deinem Rechner zu Hause und nicht dem Server machen solltest?) und importierst sie dort mit gpg --import dateiname in den dortigen Schlüsselbund (gpg speichert den Schlüsselbund im Homeverzeichnis des jeweiligen Users, du solltest das also als der User ausführen der später auch die Skripte starten wird).

        Jetzt kannst du mit gpg -e -r deinname --yes anfangen Daten zu verschlüsseln. Vorsicht: Er nimmt die Daten auf der Standardeingabe und schickt sie an die Standardausgabe. Da kommen Binärdaten raus, also solltest du immer die Standardausgabe in eine Datei umleiten oder mit -o ausgabedatei eine Ausgabe in eine Datei erzwingen. (Binärdaten neigen dazu manche Terminalprogramme zu verwirren).
        Das --yes ist übrigens dazu da, dass er alle Fragen automatisch mit ja beantwortet. Ansonsten gibt es evt. Probleme weil er die Echtheit des Schlüssels nicht bestätigen kann. (Kann dir aber hier eigentlich egal sein)
        Solltest du keinen User haben, unter dessen Homeverzeichnis gpg den Schlüsselbund anlegen kann, dann lass das mit dem exportieren und importieren sein und kopier gleiche deinen ganzen Schlüsselbund (sollten noch nicht allzu viele Schlüssel drin sein :) namens pubring.gpg (bei mir liegt der in meinem Heimatverzeichnis in einem Verzeichnis namens .gnupg, kA wo er bei dir landet) und gib gpg diese Datei bei jeder Operation mit der Option --keyring Dateiname an.

        Entschlüsseln kannst du den ganzen Spaß dann mit gpg -d dateiname. Evt. erkennt gpg automatisch was du tun willst, und du kannst dir das -d sparen (das tut es jedenfalls, wenn der Dateiname auf .gpg endet). Natürlich kann er erst entschlüsseln nachdem du das richtige Mantra eingegeben hast, dafür ist es ja da.

        Ein Hinweis noch: Du solltest das Komprimieren _vor_ dem Verschlüsseln erledigen. Ein guter Verschlüsselungsalgorithmus (und das was gpg benutzt, ist in der Regel gut) erzeugt nämlich Daten die sich nicht mehr weiter komprimieren lassen.

        PS: Das meiste sollte auch bei http://aktuell.de.selfhtml.org/artikel/internet/signatur/index.htm stehen.
        PPS: Sorry, wenn ich mir evt. nicht ganz einig war, ob gpg nun ein er oder ein es ist.
        PPPS: Mist, schon spät, muss ich auch immer so viel schreiben...

        --
        Henryk Plötz
        Grüße aus Berlin

        1. Hi!
          Vielen Dank  für die Super-Antwort! Hat mir sehr weitergeholfen, wie gesagt bin ich absoluter Shell-Newbie(und nicht nur das). Dauert wahrscheinlich noch was bis ich das hinbekomme, und noch viel lesen...
          Jedenfalls kann ich das doch nicht auf einem Win-PC machen, oder? Da hab ich nunmal kein Shell, oder in der Eingabeaufforderung?
          *nicht lachen bitte* :)
          Aber dafür habe ich einen SSH Zugang zum Webserver, sollte das nicht sicher genug sein?

          Grüße
            Andreas

          1. Moin

            Jedenfalls kann ich das doch nicht auf einem Win-PC machen, oder? Da hab ich nunmal kein Shell, oder in der Eingabeaufforderung?

            Bitte sieh dir die Seiten von gnupg an, da liegt auch eine Version für Windows herum. Die Eingabeaufforderung von Windows-Systemen ist zwar recht beschränkt, reicht dafür aber locker aus.

            Aber dafür habe ich einen SSH Zugang zum Webserver, sollte das nicht sicher genug sein?

            Naja, alles andere als SSH wäre ja auch fahrlässig (da du immerhin die Passphrase eingeben musst), aber dennoch würde ich mich aus Sicherheitsgründen nicht trauen das auf so einem weit entfernten Rechner zu machen.

            --
            Henryk Plötz
            Grüße aus Berlin