# Automatische Dateiverschlüsselung möglich?



## M. Zink (30. Sep. 2009)

Hallo,

ich baue grade eine Webanwendung und bin dabei das Thema Sicherheit zu behandeln. Da es in der Anwendung um sensieble Daten von Personen geht muss das ganze so gut wie nur irgend möglich verschlüsselt sein. In der Datenbank ist das auch soweit kein Problem wobei ich noch überlege wie ich auf der einen Seite ein Passwort nutzen kann was auch bei einem Serverwechsel nicht verloren geht aber es auch trotzdem nicht selbst kenne.

Mein Hauptproblem sind Dateien welche per Formular auf dem Server landen. Die Übertragung läuft über SSL aber die Dateien sollen auch auf dem Server nicht einfach so ungesichert einzusehen sein. Das heißt ich möchte noch nicht mal selbst in der Lage sein die Dateien anzusehen. Gibt es grundsätzlich eine Möglichkeit z.B. einen Upload Ordner auf dem Server anzulegen welcher alle Inhalte automatisch verschlüsselt so das wenn ich diese per FTP runter lade lediglich müll zu sehen bekomme? Das Passwort für die Verschlüsselung könnte man ja in einer Install Routine vom Anwender vergeben lassen wobei ich das PW ja mehr oder weniger einsehen können muss da es ja auch von PHP usw. dann verwendet wird.

Falls da jemand eine Idee hat oder mir sagen kann wo ich überhaupt mal danach suchen könnte wäre das prima.


----------



## Quest (30. Sep. 2009)

sollen die sensiblen Daten in irgendeiner Weise durchsuchbar sein?
sonst hätte ich sie in der DB auf jeden Fall mal binär in einem BLOB Feld abgelegt.
Dann sind sie schon nicht mehr ganz so einfach einzusehen (z.B. per phpMyAdmin keine chance).


----------



## M. Zink (30. Sep. 2009)

Die Daten in der Datenbank sind nicht mal so das Problem. Man kann ja z.B. mit des_encode und des_decode die Inhalte anhand eines $key verschlüsseln.

Wichtig sind mir hauptsächlich die Dateien wie JPG Bilder, PDF Dokumente usw. welche sensieble Daten enthalten.


----------



## Quest (30. Sep. 2009)

Da ist mir nichts bekannt, aber vielleicht gibts ja irgend einen php mod der verschlüsselte Daten auf der platte handelt.


----------



## M. Zink (30. Sep. 2009)

Naja da das Verschlüsseln und Entschlüsseln ja so gesehen direkt im Dateisystem passieren muss glaube ich kaum das es da in PHP was gibt. Wie soll PHP z.B. ein JPG Bild verschlüsseln? Meine Idee war schon mit base64_encode die Datei von Binär in Ascii zu wandeln, dann die Ascii Datei zu crypten und ab gehts aber da wird der Server echt ordentlich schwitzen mal ganz von der Datenmenge abgesehen.

Eine Möglichkeit die ich gefunden habe wäre GnuPG oder GPG genannt. Wobei ich das echt absolut nicht verstanden habe wir das läuft und mein Server reagiert auf gpg gar nicht. Ich denke also da muss was installiert werden. Aber zumindest scheint das was zu sein was praktikabel ist. Kennt sich damit wer aus und kann mir ansatzweise sagen wie ich das anwenden könnte?


----------



## Burge (30. Sep. 2009)

man kann auch bilder in einer db ablegen. und auch pdf's. Diesen stream koenntest du mit dem schluessel deines users verschluesseln und in ein blob in der db schreiben.


----------



## M. Zink (1. Okt. 2009)

Genau das habe ich jetzt auch getan. Ich nutze die AES_ENCODE und DECODE Funktion von MySQL und verschlüssele damit die Dateien. Das Passwort frage ich vom Benutzer gesondert ab und registriere dieses in einer Session da das reine Userpasswort ja mal geändert werden könnte oder der User gelöscht und dann darf natürlich die Datei nicht weg sein. Alles in allem funktioniert das jetzt sehr sehr gut!


----------



## Burge (1. Okt. 2009)

Jupp denke auch das, das schon ein gewisses mass an sicherheit darstellt und halbwegs perfomant sein sollte.


----------



## M. Zink (1. Okt. 2009)

Mir ging es eben darum, dem Kunden welcher das Tool (hoffentlich) einsetzen wird wirklich zeigen zu können, dass selbst ich keinen Zugriff auf seine Daten habe. Wir machen das so, dass bei Übergabe des Zugangs im Beisein vom Kunden ein Masterpasswort für die Verschlüsselung erzeugt wird welches wir uns auch nicht ansehen. Dieses wird in einen Umschlag gesteckt welcher versiegelt wird und von beiden auf dem Siegel unterzeichnet. Dadurch besteht die Möglichkeit das Masterpasswort noch mal in Erfahrung zu bringen und dennoch weiß der Kunde ohne das Siegel zu verletzen kommen wir nicht dran.

Und soweit ich das weiß bietet das AES_ENCODE Verfahren keine Möglichkeit so ohne weiteres die Daten zu knacken. Bruteforce würde mir einfallen aber da wir als PW einen 32 Stelligen Hashwert nehmen wollen sollte auch Bruteforce in diesem Jahrhundert nicht mehr fertig werden.

Ein netter Nebeneffekt ist übrigens, dass ich nur durch ein Datenbank Backup restlos alles gesichert habe und die Anwendung innerhalb von Minuten wieder am laufen habe ohne Ordnerberechtigungen oder sonstige fummelei. Einfach die Anwendung hin kopieren, DB Dump einlesen und alles steht wieder.

Allerdings frag ich mich wieso das so selten gemacht wird oder viele davon abraten. Ich hab leider noch keine Vergleichswerte aber ist die Performance dabei wirklich so schlecht oder warum sollte man sowas eigentlich nicht unbedingt machen mit Dateien in einer DB?


----------

